@dotzero.ai/export-mcp 1.2.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 (50) hide show
  1. package/README.md +474 -0
  2. package/dist/chart-engine.d.ts +29 -0
  3. package/dist/chart-engine.js +1 -0
  4. package/dist/colors.d.ts +21 -0
  5. package/dist/colors.js +1 -0
  6. package/dist/export-engine.d.ts +17 -0
  7. package/dist/export-engine.js +1 -0
  8. package/dist/file-output.d.ts +10 -0
  9. package/dist/file-output.js +1 -0
  10. package/dist/index.d.ts +8 -0
  11. package/dist/index.js +2 -0
  12. package/dist/schemas.d.ts +126 -0
  13. package/dist/schemas.js +1 -0
  14. package/dist/tool-registry.d.ts +10 -0
  15. package/dist/tool-registry.js +1 -0
  16. package/dist/tools/charts/bar.d.ts +214 -0
  17. package/dist/tools/charts/bar.js +1 -0
  18. package/dist/tools/charts/control-chart.d.ts +109 -0
  19. package/dist/tools/charts/control-chart.js +1 -0
  20. package/dist/tools/charts/gauge.d.ts +120 -0
  21. package/dist/tools/charts/gauge.js +1 -0
  22. package/dist/tools/charts/index.d.ts +9 -0
  23. package/dist/tools/charts/index.js +1 -0
  24. package/dist/tools/charts/line.d.ts +226 -0
  25. package/dist/tools/charts/line.js +1 -0
  26. package/dist/tools/charts/multi.d.ts +466 -0
  27. package/dist/tools/charts/multi.js +1 -0
  28. package/dist/tools/charts/oee-breakdown.d.ts +156 -0
  29. package/dist/tools/charts/oee-breakdown.js +1 -0
  30. package/dist/tools/charts/pie.d.ts +90 -0
  31. package/dist/tools/charts/pie.js +1 -0
  32. package/dist/tools/charts/scatter.d.ts +250 -0
  33. package/dist/tools/charts/scatter.js +1 -0
  34. package/dist/tools/charts/timeline.d.ts +128 -0
  35. package/dist/tools/charts/timeline.js +1 -0
  36. package/dist/tools/exports/csv.d.ts +51 -0
  37. package/dist/tools/exports/csv.js +1 -0
  38. package/dist/tools/exports/index.d.ts +2 -0
  39. package/dist/tools/exports/index.js +1 -0
  40. package/dist/tools/exports/xlsx.d.ts +85 -0
  41. package/dist/tools/exports/xlsx.js +1 -0
  42. package/dist/tools/smart/chart-from-json.d.ts +84 -0
  43. package/dist/tools/smart/chart-from-json.js +1 -0
  44. package/dist/tools/smart/index.d.ts +2 -0
  45. package/dist/tools/smart/index.js +1 -0
  46. package/dist/tools/smart/table-from-json.d.ts +63 -0
  47. package/dist/tools/smart/table-from-json.js +1 -0
  48. package/dist/types.d.ts +75 -0
  49. package/dist/types.js +1 -0
  50. package/package.json +64 -0
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ export declare const ExportCsvSchema: z.ZodObject<{
3
+ headers: z.ZodArray<z.ZodString, "many">;
4
+ rows: z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">, "many">;
5
+ filename: z.ZodOptional<z.ZodString>;
6
+ output_path: z.ZodOptional<z.ZodString>;
7
+ }, "strict", z.ZodTypeAny, {
8
+ headers: string[];
9
+ rows: (string | number | boolean | null)[][];
10
+ output_path?: string | undefined;
11
+ filename?: string | undefined;
12
+ }, {
13
+ headers: string[];
14
+ rows: (string | number | boolean | null)[][];
15
+ output_path?: string | undefined;
16
+ filename?: string | undefined;
17
+ }>;
18
+ export type ExportCsvInput = z.infer<typeof ExportCsvSchema>;
19
+ export declare const exportCsvTool: {
20
+ name: string;
21
+ title: string;
22
+ description: string;
23
+ inputSchema: z.ZodObject<{
24
+ headers: z.ZodArray<z.ZodString, "many">;
25
+ rows: z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">, "many">;
26
+ filename: z.ZodOptional<z.ZodString>;
27
+ output_path: z.ZodOptional<z.ZodString>;
28
+ }, "strict", z.ZodTypeAny, {
29
+ headers: string[];
30
+ rows: (string | number | boolean | null)[][];
31
+ output_path?: string | undefined;
32
+ filename?: string | undefined;
33
+ }, {
34
+ headers: string[];
35
+ rows: (string | number | boolean | null)[][];
36
+ output_path?: string | undefined;
37
+ filename?: string | undefined;
38
+ }>;
39
+ annotations: {
40
+ readOnlyHint: boolean;
41
+ destructiveHint: boolean;
42
+ idempotentHint: boolean;
43
+ openWorldHint: boolean;
44
+ };
45
+ };
46
+ export declare function executeExportCsv(params: ExportCsvInput): Promise<{
47
+ content: {
48
+ type: "text";
49
+ text: string;
50
+ }[];
51
+ }>;
@@ -0,0 +1 @@
1
+ import{z}from"zod";import{generateCsv,exportResultToContent}from"../../export-engine.js";export const ExportCsvSchema=z.object({headers:z.array(z.string()).describe("Column headers"),rows:z.array(z.array(z.union([z.string(),z.number(),z.boolean(),z.null()]))).describe("Row data"),filename:z.string().optional().describe("Output filename (without extension)"),output_path:z.string().optional().describe("Custom output file path")}).strict();export const exportCsvTool={name:"export_csv",title:"Export CSV",description:"Export data to a CSV file. Provide column headers and row data.",inputSchema:ExportCsvSchema,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1}};export async function executeExportCsv(t){const e=generateCsv(t.headers,t.rows,t.filename,t.output_path);return exportResultToContent(e)}
@@ -0,0 +1,2 @@
1
+ export { exportCsvTool, executeExportCsv, type ExportCsvInput } from "./csv.js";
2
+ export { exportXlsxTool, executeExportXlsx, type ExportXlsxInput } from "./xlsx.js";
@@ -0,0 +1 @@
1
+ export{exportCsvTool,executeExportCsv}from"./csv.js";export{exportXlsxTool,executeExportXlsx}from"./xlsx.js";
@@ -0,0 +1,85 @@
1
+ import { z } from "zod";
2
+ export declare const ExportXlsxSchema: z.ZodObject<{
3
+ sheets: z.ZodArray<z.ZodObject<{
4
+ name: z.ZodString;
5
+ headers: z.ZodArray<z.ZodString, "many">;
6
+ rows: z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">, "many">;
7
+ }, "strict", z.ZodTypeAny, {
8
+ name: string;
9
+ headers: string[];
10
+ rows: (string | number | boolean | null)[][];
11
+ }, {
12
+ name: string;
13
+ headers: string[];
14
+ rows: (string | number | boolean | null)[][];
15
+ }>, "many">;
16
+ filename: z.ZodOptional<z.ZodString>;
17
+ output_path: z.ZodOptional<z.ZodString>;
18
+ }, "strict", z.ZodTypeAny, {
19
+ sheets: {
20
+ name: string;
21
+ headers: string[];
22
+ rows: (string | number | boolean | null)[][];
23
+ }[];
24
+ output_path?: string | undefined;
25
+ filename?: string | undefined;
26
+ }, {
27
+ sheets: {
28
+ name: string;
29
+ headers: string[];
30
+ rows: (string | number | boolean | null)[][];
31
+ }[];
32
+ output_path?: string | undefined;
33
+ filename?: string | undefined;
34
+ }>;
35
+ export type ExportXlsxInput = z.infer<typeof ExportXlsxSchema>;
36
+ export declare const exportXlsxTool: {
37
+ name: string;
38
+ title: string;
39
+ description: string;
40
+ inputSchema: z.ZodObject<{
41
+ sheets: z.ZodArray<z.ZodObject<{
42
+ name: z.ZodString;
43
+ headers: z.ZodArray<z.ZodString, "many">;
44
+ rows: z.ZodArray<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">, "many">;
45
+ }, "strict", z.ZodTypeAny, {
46
+ name: string;
47
+ headers: string[];
48
+ rows: (string | number | boolean | null)[][];
49
+ }, {
50
+ name: string;
51
+ headers: string[];
52
+ rows: (string | number | boolean | null)[][];
53
+ }>, "many">;
54
+ filename: z.ZodOptional<z.ZodString>;
55
+ output_path: z.ZodOptional<z.ZodString>;
56
+ }, "strict", z.ZodTypeAny, {
57
+ sheets: {
58
+ name: string;
59
+ headers: string[];
60
+ rows: (string | number | boolean | null)[][];
61
+ }[];
62
+ output_path?: string | undefined;
63
+ filename?: string | undefined;
64
+ }, {
65
+ sheets: {
66
+ name: string;
67
+ headers: string[];
68
+ rows: (string | number | boolean | null)[][];
69
+ }[];
70
+ output_path?: string | undefined;
71
+ filename?: string | undefined;
72
+ }>;
73
+ annotations: {
74
+ readOnlyHint: boolean;
75
+ destructiveHint: boolean;
76
+ idempotentHint: boolean;
77
+ openWorldHint: boolean;
78
+ };
79
+ };
80
+ export declare function executeExportXlsx(params: ExportXlsxInput): Promise<{
81
+ content: {
82
+ type: "text";
83
+ text: string;
84
+ }[];
85
+ }>;
@@ -0,0 +1 @@
1
+ import{z}from"zod";import{ExportSheetSchema}from"../../schemas.js";import{generateXlsx,exportResultToContent}from"../../export-engine.js";export const ExportXlsxSchema=z.object({sheets:z.array(ExportSheetSchema).min(1).describe("Worksheet definitions"),filename:z.string().optional().describe("Output filename (without extension)"),output_path:z.string().optional().describe("Custom output file path")}).strict();export const exportXlsxTool={name:"export_xlsx",title:"Export XLSX",description:"Export data to an Excel XLSX file with one or more sheets. Each sheet has headers with bold formatting and auto-fit column widths.",inputSchema:ExportXlsxSchema,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1}};export async function executeExportXlsx(t){const e=await generateXlsx(t.sheets,t.filename,t.output_path);return exportResultToContent(e)}
@@ -0,0 +1,84 @@
1
+ import { z } from "zod";
2
+ export declare const ChartFromJsonSchema: z.ZodObject<{
3
+ title: z.ZodDefault<z.ZodString>;
4
+ data: z.ZodUnknown;
5
+ chart_type: z.ZodDefault<z.ZodEnum<["auto", "bar", "line", "pie", "gauge", "oee"]>>;
6
+ } & {
7
+ output_path: z.ZodOptional<z.ZodString>;
8
+ width: z.ZodDefault<z.ZodNumber>;
9
+ height: z.ZodDefault<z.ZodNumber>;
10
+ format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
11
+ }, "strict", z.ZodTypeAny, {
12
+ width: number;
13
+ height: number;
14
+ format: "png" | "jpg";
15
+ title: string;
16
+ chart_type: "bar" | "line" | "pie" | "gauge" | "auto" | "oee";
17
+ data?: unknown;
18
+ output_path?: string | undefined;
19
+ }, {
20
+ width?: number | undefined;
21
+ height?: number | undefined;
22
+ data?: unknown;
23
+ output_path?: string | undefined;
24
+ format?: "png" | "jpg" | undefined;
25
+ title?: string | undefined;
26
+ chart_type?: "bar" | "line" | "pie" | "gauge" | "auto" | "oee" | undefined;
27
+ }>;
28
+ export type ChartFromJsonInput = z.infer<typeof ChartFromJsonSchema>;
29
+ export declare const chartFromJsonTool: {
30
+ name: string;
31
+ title: string;
32
+ description: string;
33
+ inputSchema: z.ZodObject<{
34
+ title: z.ZodDefault<z.ZodString>;
35
+ data: z.ZodUnknown;
36
+ chart_type: z.ZodDefault<z.ZodEnum<["auto", "bar", "line", "pie", "gauge", "oee"]>>;
37
+ } & {
38
+ output_path: z.ZodOptional<z.ZodString>;
39
+ width: z.ZodDefault<z.ZodNumber>;
40
+ height: z.ZodDefault<z.ZodNumber>;
41
+ format: z.ZodDefault<z.ZodEnum<["png", "jpg"]>>;
42
+ }, "strict", z.ZodTypeAny, {
43
+ width: number;
44
+ height: number;
45
+ format: "png" | "jpg";
46
+ title: string;
47
+ chart_type: "bar" | "line" | "pie" | "gauge" | "auto" | "oee";
48
+ data?: unknown;
49
+ output_path?: string | undefined;
50
+ }, {
51
+ width?: number | undefined;
52
+ height?: number | undefined;
53
+ data?: unknown;
54
+ output_path?: string | undefined;
55
+ format?: "png" | "jpg" | undefined;
56
+ title?: string | undefined;
57
+ chart_type?: "bar" | "line" | "pie" | "gauge" | "auto" | "oee" | undefined;
58
+ }>;
59
+ annotations: {
60
+ readOnlyHint: boolean;
61
+ destructiveHint: boolean;
62
+ idempotentHint: boolean;
63
+ openWorldHint: boolean;
64
+ };
65
+ };
66
+ export declare function executeChartFromJson(params: ChartFromJsonInput): Promise<{
67
+ content: ({
68
+ type: "text";
69
+ text: string;
70
+ data?: undefined;
71
+ mimeType?: undefined;
72
+ } | {
73
+ type: "image";
74
+ data: string;
75
+ mimeType: "image/png" | "image/jpeg";
76
+ text?: undefined;
77
+ })[];
78
+ } | {
79
+ content: {
80
+ type: "text";
81
+ text: string;
82
+ }[];
83
+ isError: boolean;
84
+ }>;
@@ -0,0 +1 @@
1
+ import{z}from"zod";import{BaseChartParams}from"../../schemas.js";import{executeChartBar}from"../charts/bar.js";import{executeChartPie}from"../charts/pie.js";import{executeChartLine}from"../charts/line.js";import{executeChartOeeBreakdown}from"../charts/oee-breakdown.js";import{executeChartGauge}from"../charts/gauge.js";export const ChartFromJsonSchema=z.object({title:z.string().default("Auto Chart").describe("Chart title"),data:z.unknown().describe("JSON data from any DotZero MCP tool (response_format: 'json'). The tool will auto-detect the data shape and pick the best chart type."),chart_type:z.enum(["auto","bar","line","pie","gauge","oee"]).default("auto").describe("Force a specific chart type or let the tool auto-detect")}).merge(BaseChartParams).strict();export const chartFromJsonTool={name:"chart_from_json",title:"Chart from JSON",description:"Auto-detect DotZero JSON data format and generate the most appropriate chart. Pass raw JSON output from any DotZero tool (with response_format: 'json'). Supports OEE data, production summaries, worker rankings, device status, and more.",inputSchema:ChartFromJsonSchema,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1}};export async function executeChartFromJson(e){const{data:t,title:a}=e,r={width:e.width,height:e.height,format:e.format,output_path:e.output_path};try{const o="string"==typeof t?JSON.parse(t):t;if("oee"===e.chart_type||"auto"===e.chart_type){if(isOeeData(o))return executeChartOeeBreakdown({title:a,availability:asPercent(o.availability),quality:asPercent(o.quality),performance:asPercent(o.performance),oee:void 0!==o.oee?asPercent(o.oee):void 0,...r});if(Array.isArray(o)&&o.length>0&&isOeeData(o[0]))return executeChartOeeBreakdown({title:a,availability:0,quality:0,performance:0,devices:o.map(e=>({name:e.device_name||e.name||"?",availability:asPercent(e.availability),quality:asPercent(e.quality),performance:asPercent(e.performance),oee:void 0!==e.oee?asPercent(e.oee):void 0})),...r})}if("gauge"===e.chart_type||"auto"===e.chart_type&&"number"==typeof o)return executeChartGauge({value:"number"==typeof o?o:0,label:a,min:0,max:100,...r});if(Array.isArray(o)&&o.length>0&&"object"==typeof o[0]){const t=Object.keys(o[0]),i=t.find(e=>["name","device_name","worker_name","label","work_order_id"].includes(e)),n=t.filter(e=>"number"==typeof o[0][e]&&e!==i);if(i&&n.length>0){const t=o.map(e=>String(e[i]));return"pie"===e.chart_type&&1===n.length?executeChartPie({title:a,labels:t,values:o.map(e=>e[n[0]]),chart_type:"pie",...r}):"line"===e.chart_type?executeChartLine({title:a,labels:t,datasets:n.map(e=>({label:e,data:o.map(t=>t[e])})),...r}):executeChartBar({title:a,labels:t,datasets:n.map(e=>({label:e,data:o.map(t=>t[e])})),...r})}}return{content:[{type:"text",text:"Could not auto-detect chart type for the provided data. Try specifying chart_type explicitly or pass data in a simpler format (array of objects with name + numeric fields)."}],isError:!0}}catch(e){return{content:[{type:"text",text:`Error: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}}function isOeeData(e){return e&&"object"==typeof e&&("availability"in e||"quality"in e||"performance"in e)}function asPercent(e){return e<=1&&e>=0?100*e:e}
@@ -0,0 +1,2 @@
1
+ export { chartFromJsonTool, executeChartFromJson, type ChartFromJsonInput } from "./chart-from-json.js";
2
+ export { exportTableFromJsonTool, executeExportTableFromJson, type ExportTableFromJsonInput } from "./table-from-json.js";
@@ -0,0 +1 @@
1
+ export{chartFromJsonTool,executeChartFromJson}from"./chart-from-json.js";export{exportTableFromJsonTool,executeExportTableFromJson}from"./table-from-json.js";
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ export declare const ExportTableFromJsonSchema: z.ZodObject<{
3
+ data: z.ZodUnknown;
4
+ format: z.ZodDefault<z.ZodEnum<["csv", "xlsx"]>>;
5
+ filename: z.ZodOptional<z.ZodString>;
6
+ output_path: z.ZodOptional<z.ZodString>;
7
+ sheet_name: z.ZodDefault<z.ZodString>;
8
+ }, "strict", z.ZodTypeAny, {
9
+ format: "csv" | "xlsx";
10
+ sheet_name: string;
11
+ data?: unknown;
12
+ output_path?: string | undefined;
13
+ filename?: string | undefined;
14
+ }, {
15
+ data?: unknown;
16
+ output_path?: string | undefined;
17
+ format?: "csv" | "xlsx" | undefined;
18
+ filename?: string | undefined;
19
+ sheet_name?: string | undefined;
20
+ }>;
21
+ export type ExportTableFromJsonInput = z.infer<typeof ExportTableFromJsonSchema>;
22
+ export declare const exportTableFromJsonTool: {
23
+ name: string;
24
+ title: string;
25
+ description: string;
26
+ inputSchema: z.ZodObject<{
27
+ data: z.ZodUnknown;
28
+ format: z.ZodDefault<z.ZodEnum<["csv", "xlsx"]>>;
29
+ filename: z.ZodOptional<z.ZodString>;
30
+ output_path: z.ZodOptional<z.ZodString>;
31
+ sheet_name: z.ZodDefault<z.ZodString>;
32
+ }, "strict", z.ZodTypeAny, {
33
+ format: "csv" | "xlsx";
34
+ sheet_name: string;
35
+ data?: unknown;
36
+ output_path?: string | undefined;
37
+ filename?: string | undefined;
38
+ }, {
39
+ data?: unknown;
40
+ output_path?: string | undefined;
41
+ format?: "csv" | "xlsx" | undefined;
42
+ filename?: string | undefined;
43
+ sheet_name?: string | undefined;
44
+ }>;
45
+ annotations: {
46
+ readOnlyHint: boolean;
47
+ destructiveHint: boolean;
48
+ idempotentHint: boolean;
49
+ openWorldHint: boolean;
50
+ };
51
+ };
52
+ export declare function executeExportTableFromJson(params: ExportTableFromJsonInput): Promise<{
53
+ content: {
54
+ type: "text";
55
+ text: string;
56
+ }[];
57
+ } | {
58
+ content: {
59
+ type: "text";
60
+ text: string;
61
+ }[];
62
+ isError: boolean;
63
+ }>;
@@ -0,0 +1 @@
1
+ import{z}from"zod";import{generateCsv,generateXlsx,exportResultToContent}from"../../export-engine.js";export const ExportTableFromJsonSchema=z.object({data:z.unknown().describe("JSON data from any DotZero MCP tool (response_format: 'json'). Accepts an array of objects or a single object."),format:z.enum(["csv","xlsx"]).default("csv").describe("Export format"),filename:z.string().optional().describe("Output filename (without extension)"),output_path:z.string().optional().describe("Custom output file path"),sheet_name:z.string().default("Data").describe("Sheet name (for XLSX)")}).strict();export const exportTableFromJsonTool={name:"export_table_from_json",title:"Export Table from JSON",description:"Auto-convert DotZero JSON data to CSV or XLSX. Pass raw JSON output from any DotZero tool (with response_format: 'json'). Automatically extracts headers from object keys.",inputSchema:ExportTableFromJsonSchema,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1}};export async function executeExportTableFromJson(t){try{const e="string"==typeof t.data?JSON.parse(t.data):t.data;let o;if(Array.isArray(e))o=e;else{if("object"!=typeof e||null===e)return{content:[{type:"text",text:"Error: Data must be a JSON object or array of objects."}],isError:!0};o="data"in e&&Array.isArray(e.data)?e.data:[e]}if(0===o.length)return{content:[{type:"text",text:"No data to export (empty array)."}],isError:!0};const r=new Set;for(const t of o)if("object"==typeof t&&null!==t)for(const e of Object.keys(t))r.add(e);const n=[...r],a=o.map(t=>n.map(e=>{const o=t[e];return null==o?null:"object"==typeof o?JSON.stringify(o):o}));if("xlsx"===t.format){const e=await generateXlsx([{name:t.sheet_name,headers:n,rows:a}],t.filename,t.output_path);return exportResultToContent(e)}{const e=generateCsv(n,a,t.filename,t.output_path);return exportResultToContent(e)}}catch(t){return{content:[{type:"text",text:`Error: ${t instanceof Error?t.message:String(t)}`}],isError:!0}}}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * TypeScript interfaces for export-mcp
3
+ */
4
+ export interface ChartDataset {
5
+ label: string;
6
+ data: number[];
7
+ color?: string;
8
+ borderColor?: string;
9
+ backgroundColor?: string;
10
+ fill?: boolean;
11
+ }
12
+ export interface ScatterPoint {
13
+ x: number;
14
+ y: number;
15
+ }
16
+ export interface ScatterDataset {
17
+ label: string;
18
+ data: ScatterPoint[];
19
+ color?: string;
20
+ }
21
+ export interface ChartOptions {
22
+ stacked?: boolean;
23
+ horizontal?: boolean;
24
+ show_legend?: boolean;
25
+ show_grid?: boolean;
26
+ x_label?: string;
27
+ y_label?: string;
28
+ min_y?: number;
29
+ max_y?: number;
30
+ }
31
+ export interface GaugeThreshold {
32
+ value: number;
33
+ color: string;
34
+ }
35
+ export interface ControlChartData {
36
+ values: number[];
37
+ labels?: string[];
38
+ ucl: number;
39
+ cl: number;
40
+ lcl: number;
41
+ usl?: number;
42
+ lsl?: number;
43
+ }
44
+ export interface TimelineSegment {
45
+ start: string;
46
+ end: string;
47
+ state: string;
48
+ color?: string;
49
+ }
50
+ export interface TimelineData {
51
+ device_name?: string;
52
+ segments: TimelineSegment[];
53
+ }
54
+ export interface MultiChartItem {
55
+ type: "bar" | "line" | "pie" | "gauge";
56
+ title: string;
57
+ config: Record<string, unknown>;
58
+ }
59
+ export interface ExportSheet {
60
+ name: string;
61
+ headers: string[];
62
+ rows: (string | number | boolean | null)[][];
63
+ }
64
+ export interface ChartResult {
65
+ filePath: string;
66
+ width: number;
67
+ height: number;
68
+ base64: string;
69
+ mimeType: "image/png" | "image/jpeg";
70
+ }
71
+ export interface ExportResult {
72
+ filePath: string;
73
+ rowCount: number;
74
+ preview: string;
75
+ }
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export{};
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@dotzero.ai/export-mcp",
3
+ "version": "1.2.1",
4
+ "description": "MCP server for chart generation and data export - PNG/JPG charts, CSV/XLSX exports",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "export-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "engines": {
15
+ "node": ">=18"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "chart",
20
+ "export",
21
+ "csv",
22
+ "xlsx",
23
+ "png",
24
+ "manufacturing",
25
+ "oee",
26
+ "spc",
27
+ "visualization"
28
+ ],
29
+ "author": {
30
+ "name": "DotZero",
31
+ "url": "https://dotzero.app"
32
+ },
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://gitlab.com/dotzero/dz-ai.git",
37
+ "directory": "packages/export-mcp"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "dependencies": {
43
+ "@modelcontextprotocol/sdk": "^1.6.1",
44
+ "@napi-rs/canvas": "^0.1.65",
45
+ "chart.js": "^4.4.8",
46
+ "chartjs-node-canvas": "^4.1.6",
47
+ "chartjs-plugin-annotation": "^3.1.0",
48
+ "exceljs": "^4.4.0",
49
+ "express": "^4.21.2",
50
+ "zod": "^3.23.8"
51
+ },
52
+ "devDependencies": {
53
+ "@types/express": "^5.0.0",
54
+ "@types/node": "^22.10.0",
55
+ "tsx": "^4.19.2",
56
+ "typescript": "^5.7.2"
57
+ },
58
+ "scripts": {
59
+ "start": "node dist/index.js",
60
+ "dev": "tsx watch src/index.ts",
61
+ "build": "tsc && find dist -name '*.js' -exec npx terser {} --compress --mangle -o {} \\;",
62
+ "clean": "rm -rf dist"
63
+ }
64
+ }