@umengfe/mcp-server-chart 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +273 -0
  3. package/build/charts/area.d.ts +51 -0
  4. package/build/charts/area.js +52 -0
  5. package/build/charts/bar.d.ts +49 -0
  6. package/build/charts/bar.js +53 -0
  7. package/build/charts/base.d.ts +34 -0
  8. package/build/charts/base.js +74 -0
  9. package/build/charts/boxplot.d.ts +47 -0
  10. package/build/charts/boxplot.js +45 -0
  11. package/build/charts/column.d.ts +49 -0
  12. package/build/charts/column.js +53 -0
  13. package/build/charts/district-map.d.ts +93 -0
  14. package/build/charts/district-map.js +85 -0
  15. package/build/charts/dual-axes.d.ts +47 -0
  16. package/build/charts/dual-axes.js +54 -0
  17. package/build/charts/fishbone-diagram.d.ts +28 -0
  18. package/build/charts/fishbone-diagram.js +55 -0
  19. package/build/charts/flow-diagram.d.ts +91 -0
  20. package/build/charts/flow-diagram.js +41 -0
  21. package/build/charts/funnel.d.ts +42 -0
  22. package/build/charts/funnel.js +37 -0
  23. package/build/charts/histogram.d.ts +36 -0
  24. package/build/charts/histogram.js +41 -0
  25. package/build/charts/index.d.ts +28 -0
  26. package/build/charts/index.js +56 -0
  27. package/build/charts/line.d.ts +50 -0
  28. package/build/charts/line.js +47 -0
  29. package/build/charts/liquid.d.ts +34 -0
  30. package/build/charts/liquid.js +42 -0
  31. package/build/charts/mind-map.d.ts +26 -0
  32. package/build/charts/mind-map.js +39 -0
  33. package/build/charts/network-graph.d.ts +91 -0
  34. package/build/charts/network-graph.js +41 -0
  35. package/build/charts/organization-chart.d.ts +114 -0
  36. package/build/charts/organization-chart.js +56 -0
  37. package/build/charts/path-map.d.ts +25 -0
  38. package/build/charts/path-map.js +25 -0
  39. package/build/charts/pie.d.ts +43 -0
  40. package/build/charts/pie.js +44 -0
  41. package/build/charts/pin-map.d.ts +35 -0
  42. package/build/charts/pin-map.js +34 -0
  43. package/build/charts/radar.d.ts +48 -0
  44. package/build/charts/radar.js +45 -0
  45. package/build/charts/sankey.d.ts +46 -0
  46. package/build/charts/sankey.js +43 -0
  47. package/build/charts/scatter.d.ts +47 -0
  48. package/build/charts/scatter.js +43 -0
  49. package/build/charts/treemap.d.ts +86 -0
  50. package/build/charts/treemap.js +55 -0
  51. package/build/charts/venn.d.ts +45 -0
  52. package/build/charts/venn.js +45 -0
  53. package/build/charts/violin.d.ts +47 -0
  54. package/build/charts/violin.js +45 -0
  55. package/build/charts/word-cloud.d.ts +42 -0
  56. package/build/charts/word-cloud.js +40 -0
  57. package/build/index.d.ts +2 -0
  58. package/build/index.js +73 -0
  59. package/build/sdk.d.ts +6 -0
  60. package/build/sdk.js +24 -0
  61. package/build/server.d.ts +17 -0
  62. package/build/server.js +132 -0
  63. package/build/services/index.d.ts +3 -0
  64. package/build/services/index.js +9 -0
  65. package/build/services/sse.d.ts +2 -0
  66. package/build/services/sse.js +58 -0
  67. package/build/services/stdio.d.ts +2 -0
  68. package/build/services/stdio.js +21 -0
  69. package/build/services/streamable.d.ts +2 -0
  70. package/build/services/streamable.js +58 -0
  71. package/build/utils/callTool.d.ts +18 -0
  72. package/build/utils/callTool.js +130 -0
  73. package/build/utils/env.d.ts +12 -0
  74. package/build/utils/env.js +32 -0
  75. package/build/utils/generate.d.ts +25 -0
  76. package/build/utils/generate.js +68 -0
  77. package/build/utils/index.d.ts +3 -0
  78. package/build/utils/index.js +9 -0
  79. package/build/utils/logger.d.ts +28 -0
  80. package/build/utils/logger.js +57 -0
  81. package/build/utils/schema.d.ts +7 -0
  82. package/build/utils/schema.js +14 -0
  83. package/build/utils/validator.d.ts +34 -0
  84. package/build/utils/validator.js +76 -0
  85. package/package.json +65 -0
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startHTTPStreamableServer = exports.startSSEMcpServer = exports.startStdioMcpServer = void 0;
4
+ var stdio_1 = require("./stdio.js");
5
+ Object.defineProperty(exports, "startStdioMcpServer", { enumerable: true, get: function () { return stdio_1.startStdioMcpServer; } });
6
+ var sse_1 = require("./sse.js");
7
+ Object.defineProperty(exports, "startSSEMcpServer", { enumerable: true, get: function () { return sse_1.startSSEMcpServer; } });
8
+ var streamable_1 = require("./streamable.js");
9
+ Object.defineProperty(exports, "startHTTPStreamableServer", { enumerable: true, get: function () { return streamable_1.startHTTPStreamableServer; } });
@@ -0,0 +1,2 @@
1
+ import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ export declare const startSSEMcpServer: (server: Server, endpoint?: string, port?: number, host?: string) => Promise<void>;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.startSSEMcpServer = void 0;
16
+ const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
17
+ const express_1 = __importDefault(require("express"));
18
+ const logger_1 = require("../utils/logger.js");
19
+ const startSSEMcpServer = (server_1, ...args_1) => __awaiter(void 0, [server_1, ...args_1], void 0, function* (server, endpoint = "/sse", port = 1122, host = "localhost") {
20
+ const app = (0, express_1.default)();
21
+ app.use(express_1.default.json());
22
+ const transports = {};
23
+ app.get(endpoint, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const transport = new sse_js_1.SSEServerTransport("/messages", res);
25
+ transports[transport.sessionId] = transport;
26
+ transport.onclose = () => {
27
+ delete transports[transport.sessionId];
28
+ logger_1.logger.info(`SSE Server disconnected: sessionId=${transport.sessionId}`);
29
+ };
30
+ yield server.connect(transport);
31
+ logger_1.logger.info(`SSE Server connected: sessionId=${transport.sessionId}`);
32
+ }));
33
+ app.post("/messages", (req, res) => __awaiter(void 0, void 0, void 0, function* () {
34
+ const sessionId = req.query.sessionId;
35
+ if (!sessionId) {
36
+ logger_1.logger.warn("SSE Server sessionId parameter is missing");
37
+ return res.status(400).send("Missing sessionId parameter");
38
+ }
39
+ const transport = transports[sessionId];
40
+ if (!transport) {
41
+ logger_1.logger.warn(`SSE Server session not found: sessionId=${sessionId}`);
42
+ return res.status(404).send("Session not found");
43
+ }
44
+ try {
45
+ logger_1.logger.info(`SSE Server handling message: sessionId=${sessionId}`);
46
+ yield transport.handlePostMessage(req, res, req.body);
47
+ }
48
+ catch (e) {
49
+ logger_1.logger.error("SSE Server error handling message", e);
50
+ if (!res.headersSent)
51
+ res.status(500).send("Error handling request");
52
+ }
53
+ }));
54
+ app.listen(port, host, () => {
55
+ logger_1.logger.success(`SSE Server listening on http://${host}:${port}${endpoint}`);
56
+ });
57
+ });
58
+ exports.startSSEMcpServer = startSSEMcpServer;
@@ -0,0 +1,2 @@
1
+ import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ export declare function startStdioMcpServer(server: Server): Promise<void>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.startStdioMcpServer = startStdioMcpServer;
13
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
14
+ const logger_1 = require("../utils/logger.js");
15
+ function startStdioMcpServer(server) {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ const transport = new stdio_js_1.StdioServerTransport();
18
+ yield server.connect(transport);
19
+ logger_1.logger.success("Stdio MCP Server started");
20
+ });
21
+ }
@@ -0,0 +1,2 @@
1
+ import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ export declare const startHTTPStreamableServer: (createServer: () => Server, endpoint?: string, port?: number, host?: string) => Promise<void>;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.startHTTPStreamableServer = void 0;
16
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
17
+ const cors_1 = __importDefault(require("cors"));
18
+ const express_1 = __importDefault(require("express"));
19
+ const logger_1 = require("../utils/logger.js");
20
+ const startHTTPStreamableServer = (createServer_1, ...args_1) => __awaiter(void 0, [createServer_1, ...args_1], void 0, function* (createServer, endpoint = "/mcp", port = 1122, host = "localhost") {
21
+ const app = (0, express_1.default)();
22
+ app.use(express_1.default.json());
23
+ app.use((0, cors_1.default)({ origin: "*", exposedHeaders: ["Mcp-Session-Id"] }));
24
+ app.post(endpoint, (req, res) => __awaiter(void 0, void 0, void 0, function* () {
25
+ // In stateless mode, create a new transport for each request to prevent
26
+ // request ID collisions. Different clients may use the same JSON-RPC request IDs,
27
+ // which would cause responses to be routed to the wrong HTTP connections if
28
+ // the transport state is shared.
29
+ try {
30
+ const server = createServer();
31
+ const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
32
+ sessionIdGenerator: undefined,
33
+ enableJsonResponse: true,
34
+ });
35
+ res.on("close", () => {
36
+ transport.close();
37
+ logger_1.logger.info("HTTP Streamable Server response closed");
38
+ });
39
+ yield server.connect(transport);
40
+ yield transport.handleRequest(req, res, req.body);
41
+ logger_1.logger.info("HTTP Streamable Server response connected");
42
+ }
43
+ catch (e) {
44
+ logger_1.logger.error("HTTP Streamable Server response error", e);
45
+ if (!res.headersSent) {
46
+ res.status(500).json({
47
+ jsonrpc: "2.0",
48
+ error: { code: -32603, message: "Internal server error" },
49
+ id: null,
50
+ });
51
+ }
52
+ }
53
+ }));
54
+ app.listen(port, host, () => {
55
+ logger_1.logger.success(`Streamable HTTP Server listening on http://${host}:${port}${endpoint}`);
56
+ });
57
+ });
58
+ exports.startHTTPStreamableServer = startHTTPStreamableServer;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Call a tool to generate a chart based on the provided name and arguments.
3
+ * @param tool The name of the tool to call, e.g., "generate_area_chart".
4
+ * @param args The arguments for the tool, which should match the expected schema for the chart type.
5
+ * @returns
6
+ */
7
+ export declare function callTool(tool: string, args?: object): Promise<{
8
+ content: {
9
+ type: string;
10
+ text: string;
11
+ }[];
12
+ _meta: {
13
+ description: string;
14
+ spec: {
15
+ type: "area" | "bar" | "boxplot" | "column" | "district-map" | "dual-axes" | "fishbone-diagram" | "flow-diagram" | "funnel" | "histogram" | "line" | "liquid" | "mind-map" | "network-graph" | "organization-chart" | "path-map" | "pie" | "pin-map" | "radar" | "sankey" | "scatter" | "treemap" | "venn" | "violin" | "word-cloud";
16
+ };
17
+ };
18
+ }>;
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.callTool = callTool;
46
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
47
+ const zod_1 = require("zod");
48
+ const Charts = __importStar(require("../charts/index.js"));
49
+ const logger_1 = require("./logger.js");
50
+ const validator_1 = require("./validator.js");
51
+ // Chart type mapping
52
+ const CHART_TYPE_MAP = {
53
+ generate_area_chart: "area",
54
+ generate_bar_chart: "bar",
55
+ generate_boxplot_chart: "boxplot",
56
+ generate_column_chart: "column",
57
+ generate_district_map: "district-map",
58
+ generate_dual_axes_chart: "dual-axes",
59
+ generate_fishbone_diagram: "fishbone-diagram",
60
+ generate_flow_diagram: "flow-diagram",
61
+ generate_funnel_chart: "funnel",
62
+ generate_histogram_chart: "histogram",
63
+ generate_line_chart: "line",
64
+ generate_liquid_chart: "liquid",
65
+ generate_mind_map: "mind-map",
66
+ generate_network_graph: "network-graph",
67
+ generate_organization_chart: "organization-chart",
68
+ generate_path_map: "path-map",
69
+ generate_pie_chart: "pie",
70
+ generate_pin_map: "pin-map",
71
+ generate_radar_chart: "radar",
72
+ generate_sankey_chart: "sankey",
73
+ generate_scatter_chart: "scatter",
74
+ generate_treemap_chart: "treemap",
75
+ generate_venn_chart: "venn",
76
+ generate_violin_chart: "violin",
77
+ generate_word_cloud_chart: "word-cloud",
78
+ };
79
+ /**
80
+ * Call a tool to generate a chart based on the provided name and arguments.
81
+ * @param tool The name of the tool to call, e.g., "generate_area_chart".
82
+ * @param args The arguments for the tool, which should match the expected schema for the chart type.
83
+ * @returns
84
+ */
85
+ function callTool(tool_1) {
86
+ return __awaiter(this, arguments, void 0, function* (tool, args = {}) {
87
+ logger_1.logger.info(`Calling tool: ${tool}`);
88
+ const chartType = CHART_TYPE_MAP[tool];
89
+ if (!chartType) {
90
+ logger_1.logger.error(`Unknown tool: ${tool}`);
91
+ throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Unknown tool: ${tool}.`);
92
+ }
93
+ try {
94
+ // Validate input using Zod before sending to API.
95
+ // Select the appropriate schema based on the chart type.
96
+ const schema = Charts[chartType].schema;
97
+ if (schema) {
98
+ // Use safeParse instead of parse and try-catch.
99
+ const result = zod_1.z.object(schema).safeParse(args);
100
+ if (!result.success) {
101
+ logger_1.logger.error(`Invalid parameters: ${result.error.message}`);
102
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, `Invalid parameters: ${result.error.message}`);
103
+ }
104
+ }
105
+ return {
106
+ content: [
107
+ {
108
+ type: "text",
109
+ text: `\`\`\`vis-chart
110
+ ${JSON.stringify(Object.assign({ type: chartType }, args))}
111
+ \`\`\``,
112
+ },
113
+ ],
114
+ _meta: {
115
+ description: "This is the chart's spec and configuration, which can be renderred to corresponding chart by AntV GPT-Vis chart components.",
116
+ spec: Object.assign({ type: chartType }, args),
117
+ },
118
+ };
119
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
120
+ }
121
+ catch (error) {
122
+ logger_1.logger.error(`Failed to generate chart: ${error.message || "Unknown error"}.`);
123
+ if (error instanceof types_js_1.McpError)
124
+ throw error;
125
+ if (error instanceof validator_1.ValidateError)
126
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InvalidParams, error.message);
127
+ throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError, `Failed to generate chart: ${(error === null || error === void 0 ? void 0 : error.message) || "Unknown error."}`);
128
+ }
129
+ });
130
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Get the VIS_REQUEST_SERVER from environment variables.
3
+ */
4
+ export declare function getVisRequestServer(): string;
5
+ /**
6
+ * Get the `SERVICE_ID` from environment variables.
7
+ */
8
+ export declare function getServiceIdentifier(): string | undefined;
9
+ /**
10
+ * Get the list of disabled tools from environment variables.
11
+ */
12
+ export declare function getDisabledTools(): string[];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getVisRequestServer = getVisRequestServer;
7
+ exports.getServiceIdentifier = getServiceIdentifier;
8
+ exports.getDisabledTools = getDisabledTools;
9
+ const node_process_1 = __importDefault(require("node:process"));
10
+ /**
11
+ * Get the VIS_REQUEST_SERVER from environment variables.
12
+ */
13
+ function getVisRequestServer() {
14
+ return (node_process_1.default.env.VIS_REQUEST_SERVER ||
15
+ "https://antv-studio.alipay.com/api/gpt-vis");
16
+ }
17
+ /**
18
+ * Get the `SERVICE_ID` from environment variables.
19
+ */
20
+ function getServiceIdentifier() {
21
+ return node_process_1.default.env.SERVICE_ID;
22
+ }
23
+ /**
24
+ * Get the list of disabled tools from environment variables.
25
+ */
26
+ function getDisabledTools() {
27
+ const disabledTools = node_process_1.default.env.DISABLED_TOOLS;
28
+ if (!disabledTools || disabledTools === "undefined") {
29
+ return [];
30
+ }
31
+ return disabledTools.split(",");
32
+ }
@@ -0,0 +1,25 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ /**
3
+ * Generate a chart URL using the provided configuration.
4
+ * @param type The type of chart to generate
5
+ * @param options Chart options
6
+ * @returns {Promise<string>} The generated chart URL.
7
+ * @throws {Error} If the chart generation fails.
8
+ */
9
+ export declare function generateChartUrl(type: string, options: Record<string, any>): Promise<object>;
10
+ type ResponseResult = {
11
+ metadata: unknown;
12
+ /**
13
+ * @docs https://modelcontextprotocol.io/specification/2025-03-26/server/tools#tool-result
14
+ */
15
+ content: CallToolResult["content"];
16
+ isError?: CallToolResult["isError"];
17
+ };
18
+ /**
19
+ * Generate a map
20
+ * @param tool - The tool name
21
+ * @param input - The input
22
+ * @returns
23
+ */
24
+ export declare function generateMap(tool: string, input: unknown): Promise<ResponseResult>;
25
+ export {};
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.generateChartUrl = generateChartUrl;
16
+ exports.generateMap = generateMap;
17
+ const axios_1 = __importDefault(require("axios"));
18
+ const env_1 = require("./env.js");
19
+ /**
20
+ * Generate a chart URL using the provided configuration.
21
+ * @param type The type of chart to generate
22
+ * @param options Chart options
23
+ * @returns {Promise<string>} The generated chart URL.
24
+ * @throws {Error} If the chart generation fails.
25
+ */
26
+ function generateChartUrl(type,
27
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
28
+ options) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const url = (0, env_1.getVisRequestServer)();
31
+ const response = yield axios_1.default.post(url, Object.assign(Object.assign({ type }, options), { source: "mcp-server-chart" }), {
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ },
35
+ });
36
+ const { success, errorMessage, resultObj } = response.data;
37
+ if (!success) {
38
+ throw new Error(errorMessage);
39
+ }
40
+ return resultObj;
41
+ });
42
+ }
43
+ /**
44
+ * Generate a map
45
+ * @param tool - The tool name
46
+ * @param input - The input
47
+ * @returns
48
+ */
49
+ function generateMap(tool, input) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ const url = (0, env_1.getVisRequestServer)();
52
+ const response = yield axios_1.default.post(url, {
53
+ serviceId: (0, env_1.getServiceIdentifier)(),
54
+ tool,
55
+ input,
56
+ source: "mcp-server-chart",
57
+ }, {
58
+ headers: {
59
+ "Content-Type": "application/json",
60
+ },
61
+ });
62
+ const { success, errorMessage, resultObj } = response.data;
63
+ if (!success) {
64
+ throw new Error(errorMessage);
65
+ }
66
+ return resultObj;
67
+ });
68
+ }
@@ -0,0 +1,3 @@
1
+ export { callTool } from "./callTool";
2
+ export { generateChartUrl } from "./generate";
3
+ export { zodToJsonSchema } from "./schema";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.zodToJsonSchema = exports.generateChartUrl = exports.callTool = void 0;
4
+ var callTool_1 = require("./callTool.js");
5
+ Object.defineProperty(exports, "callTool", { enumerable: true, get: function () { return callTool_1.callTool; } });
6
+ var generate_1 = require("./generate.js");
7
+ Object.defineProperty(exports, "generateChartUrl", { enumerable: true, get: function () { return generate_1.generateChartUrl; } });
8
+ var schema_1 = require("./schema.js");
9
+ Object.defineProperty(exports, "zodToJsonSchema", { enumerable: true, get: function () { return schema_1.zodToJsonSchema; } });
@@ -0,0 +1,28 @@
1
+ declare function setIsStdio(isStdio: boolean): void;
2
+ /**
3
+ * Log info message
4
+ */
5
+ declare function info(message: string, ...args: unknown[]): void;
6
+ /**
7
+ * Log warning message
8
+ */
9
+ declare function warn(message: string, ...args: unknown[]): void;
10
+ /**
11
+ * Log error message
12
+ */
13
+ declare function error(message: string, error?: unknown): void;
14
+ /**
15
+ * Log success message
16
+ */
17
+ declare function success(message: string, ...args: unknown[]): void;
18
+ /**
19
+ * Logger object for backward compatibility
20
+ */
21
+ export declare const logger: {
22
+ info: typeof info;
23
+ warn: typeof warn;
24
+ error: typeof error;
25
+ success: typeof success;
26
+ setIsStdio: typeof setIsStdio;
27
+ };
28
+ export {};
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ /**
5
+ * Unified logger for consistent logging across the application
6
+ */
7
+ const prefix = "[MCP-Server-Chart]";
8
+ /**
9
+ * Indicates if the logger is in stdio mode.
10
+ * When true, logs are directed to stderr for info, warn, and success messages, using console.error.
11
+ * When false, logs are directed to stdout.
12
+ */
13
+ let IS_STDIO = true;
14
+ function setIsStdio(isStdio) {
15
+ IS_STDIO = isStdio;
16
+ }
17
+ function getPrefix() {
18
+ const timestamp = new Date().toISOString();
19
+ return `${prefix} ${timestamp}`;
20
+ }
21
+ /**
22
+ * Log info message
23
+ */
24
+ function info(message, ...args) {
25
+ const fn = IS_STDIO ? console.error : console.log;
26
+ fn(`${getPrefix()} ℹ️ ${message}`, ...args);
27
+ }
28
+ /**
29
+ * Log warning message
30
+ */
31
+ function warn(message, ...args) {
32
+ const fn = IS_STDIO ? console.warn : console.log;
33
+ fn(`${getPrefix()} ⚠️ ${message}`, ...args);
34
+ }
35
+ /**
36
+ * Log error message
37
+ */
38
+ function error(message, error) {
39
+ console.error(`${getPrefix()} ❌ ${message}`, error || "");
40
+ }
41
+ /**
42
+ * Log success message
43
+ */
44
+ function success(message, ...args) {
45
+ const fn = IS_STDIO ? console.error : console.log;
46
+ fn(`${getPrefix()} ✅ ${message}`, ...args);
47
+ }
48
+ /**
49
+ * Logger object for backward compatibility
50
+ */
51
+ exports.logger = {
52
+ info,
53
+ warn,
54
+ error,
55
+ success,
56
+ setIsStdio,
57
+ };
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ export declare const zodToJsonSchema: (schema: Record<string, z.ZodType<any>>) => import("zod-to-json-schema").JsonSchema7Type & {
3
+ $schema?: string | undefined;
4
+ definitions?: {
5
+ [key: string]: import("zod-to-json-schema").JsonSchema7Type;
6
+ } | undefined;
7
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.zodToJsonSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const zod_to_json_schema_1 = require("zod-to-json-schema");
6
+ // TODO: use zod v4 JSON to schema to replace zod-to-json-schema when v4 is stable
7
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
8
+ const zodToJsonSchema = (schema) => {
9
+ return (0, zod_to_json_schema_1.zodToJsonSchema)(zod_1.z.object(schema), {
10
+ rejectedAdditionalProperties: undefined,
11
+ $refStrategy: "none",
12
+ });
13
+ };
14
+ exports.zodToJsonSchema = zodToJsonSchema;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The Error class for validation errors in zod.
3
+ */
4
+ export declare class ValidateError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ export type NodeEdgeDataType = {
8
+ nodes: Array<{
9
+ name: string;
10
+ }>;
11
+ edges: Array<{
12
+ name: string;
13
+ source: string;
14
+ target: string;
15
+ }>;
16
+ };
17
+ export type TreeDataType = {
18
+ name: string;
19
+ children?: TreeDataType[];
20
+ };
21
+ /**
22
+ * Valid node name is unique.
23
+ * Valid edge source and target are existing in nodes.
24
+ * Valid edge source edge target pair are unique.
25
+ * @param data
26
+ * @returns boolean
27
+ */
28
+ export declare const validatedNodeEdgeDataSchema: (data: NodeEdgeDataType) => boolean;
29
+ /**
30
+ * Valid TreeData name is unique.
31
+ * @param data
32
+ * @returns boolean
33
+ */
34
+ export declare const validatedTreeDataSchema: (data: TreeDataType) => boolean;