@achmadya-dev/mcp-excel-query 0.3.0

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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/excel/cell.d.ts +12 -0
  4. package/dist/excel/cell.d.ts.map +1 -0
  5. package/dist/excel/cell.js +136 -0
  6. package/dist/excel/cell.js.map +1 -0
  7. package/dist/excel/date.d.ts +6 -0
  8. package/dist/excel/date.d.ts.map +1 -0
  9. package/dist/excel/date.js +132 -0
  10. package/dist/excel/date.js.map +1 -0
  11. package/dist/excel/excel.d.ts +29 -0
  12. package/dist/excel/excel.d.ts.map +1 -0
  13. package/dist/excel/excel.js +94 -0
  14. package/dist/excel/excel.js.map +1 -0
  15. package/dist/excel/range.d.ts +15 -0
  16. package/dist/excel/range.d.ts.map +1 -0
  17. package/dist/excel/range.js +70 -0
  18. package/dist/excel/range.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +44 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/tools/excel_copy_range.d.ts +2 -0
  24. package/dist/tools/excel_copy_range.d.ts.map +1 -0
  25. package/dist/tools/excel_copy_range.js +56 -0
  26. package/dist/tools/excel_copy_range.js.map +1 -0
  27. package/dist/tools/excel_copy_sheet.d.ts +2 -0
  28. package/dist/tools/excel_copy_sheet.d.ts.map +1 -0
  29. package/dist/tools/excel_copy_sheet.js +56 -0
  30. package/dist/tools/excel_copy_sheet.js.map +1 -0
  31. package/dist/tools/excel_create_file.d.ts +2 -0
  32. package/dist/tools/excel_create_file.d.ts.map +1 -0
  33. package/dist/tools/excel_create_file.js +31 -0
  34. package/dist/tools/excel_create_file.js.map +1 -0
  35. package/dist/tools/excel_create_table.d.ts +2 -0
  36. package/dist/tools/excel_create_table.d.ts.map +1 -0
  37. package/dist/tools/excel_create_table.js +73 -0
  38. package/dist/tools/excel_create_table.js.map +1 -0
  39. package/dist/tools/excel_delete_range.d.ts +2 -0
  40. package/dist/tools/excel_delete_range.d.ts.map +1 -0
  41. package/dist/tools/excel_delete_range.js +55 -0
  42. package/dist/tools/excel_delete_range.js.map +1 -0
  43. package/dist/tools/excel_delete_sheet.d.ts +2 -0
  44. package/dist/tools/excel_delete_sheet.d.ts.map +1 -0
  45. package/dist/tools/excel_delete_sheet.js +32 -0
  46. package/dist/tools/excel_delete_sheet.js.map +1 -0
  47. package/dist/tools/excel_format_range.d.ts +2 -0
  48. package/dist/tools/excel_format_range.d.ts.map +1 -0
  49. package/dist/tools/excel_format_range.js +157 -0
  50. package/dist/tools/excel_format_range.js.map +1 -0
  51. package/dist/tools/excel_get_metadata.d.ts +2 -0
  52. package/dist/tools/excel_get_metadata.d.ts.map +1 -0
  53. package/dist/tools/excel_get_metadata.js +71 -0
  54. package/dist/tools/excel_get_metadata.js.map +1 -0
  55. package/dist/tools/excel_insert_columns.d.ts +2 -0
  56. package/dist/tools/excel_insert_columns.d.ts.map +1 -0
  57. package/dist/tools/excel_insert_columns.js +44 -0
  58. package/dist/tools/excel_insert_columns.js.map +1 -0
  59. package/dist/tools/excel_insert_rows.d.ts +2 -0
  60. package/dist/tools/excel_insert_rows.d.ts.map +1 -0
  61. package/dist/tools/excel_insert_rows.js +39 -0
  62. package/dist/tools/excel_insert_rows.js.map +1 -0
  63. package/dist/tools/excel_read_sheet.d.ts +2 -0
  64. package/dist/tools/excel_read_sheet.d.ts.map +1 -0
  65. package/dist/tools/excel_read_sheet.js +147 -0
  66. package/dist/tools/excel_read_sheet.js.map +1 -0
  67. package/dist/tools/excel_rename_sheet.d.ts +2 -0
  68. package/dist/tools/excel_rename_sheet.d.ts.map +1 -0
  69. package/dist/tools/excel_rename_sheet.js +37 -0
  70. package/dist/tools/excel_rename_sheet.js.map +1 -0
  71. package/dist/tools/excel_set_data_validation.d.ts +2 -0
  72. package/dist/tools/excel_set_data_validation.d.ts.map +1 -0
  73. package/dist/tools/excel_set_data_validation.js +126 -0
  74. package/dist/tools/excel_set_data_validation.js.map +1 -0
  75. package/dist/tools/excel_set_dimensions.d.ts +2 -0
  76. package/dist/tools/excel_set_dimensions.d.ts.map +1 -0
  77. package/dist/tools/excel_set_dimensions.js +134 -0
  78. package/dist/tools/excel_set_dimensions.js.map +1 -0
  79. package/dist/tools/excel_set_sheet_visibility.d.ts +2 -0
  80. package/dist/tools/excel_set_sheet_visibility.d.ts.map +1 -0
  81. package/dist/tools/excel_set_sheet_visibility.js +39 -0
  82. package/dist/tools/excel_set_sheet_visibility.js.map +1 -0
  83. package/dist/tools/excel_unmerge_cells.d.ts +2 -0
  84. package/dist/tools/excel_unmerge_cells.d.ts.map +1 -0
  85. package/dist/tools/excel_unmerge_cells.js +42 -0
  86. package/dist/tools/excel_unmerge_cells.js.map +1 -0
  87. package/dist/tools/excel_write_range.d.ts +2 -0
  88. package/dist/tools/excel_write_range.d.ts.map +1 -0
  89. package/dist/tools/excel_write_range.js +156 -0
  90. package/dist/tools/excel_write_range.js.map +1 -0
  91. package/package.json +54 -0
@@ -0,0 +1,126 @@
1
+ import { defineTool, ToolError } from "@achmadya-dev/mcp-core";
2
+ import { z } from "zod";
3
+ import { Excel } from "../excel/excel.js";
4
+ import { Range } from "../excel/range.js";
5
+ const filePathField = z.string().describe("Absolute path to the local Excel file (.xlsx)");
6
+ const sheetNameOptional = z
7
+ .string()
8
+ .optional()
9
+ .describe("Name of the worksheet (defaults to the first sheet)");
10
+ const validationOperatorSchema = z.enum([
11
+ "between",
12
+ "notBetween",
13
+ "equal",
14
+ "notEqual",
15
+ "greaterThan",
16
+ "lessThan",
17
+ "greaterThanOrEqual",
18
+ "lessThanOrEqual",
19
+ ]);
20
+ const setDataValidationInputSchema = z.object({
21
+ filePath: filePathField,
22
+ sheetName: sheetNameOptional,
23
+ startCell: z.string(),
24
+ endCell: z.string().optional(),
25
+ range: z.string().optional(),
26
+ clear: z.boolean().optional().describe("Remove data validation from the range"),
27
+ type: z
28
+ .enum(["list", "whole", "decimal", "date", "textLength", "custom"])
29
+ .optional()
30
+ .describe("Validation type (required unless clear:true)"),
31
+ operator: validationOperatorSchema.optional(),
32
+ formulae: z
33
+ .array(z.string())
34
+ .optional()
35
+ .describe('Formula strings, e.g. ["\\"Yes,No\\""] for list or ["=A1>0"] for custom'),
36
+ allowBlank: z.boolean().optional(),
37
+ showInputMessage: z.boolean().optional(),
38
+ prompt: z.string().optional(),
39
+ promptTitle: z.string().optional(),
40
+ showErrorMessage: z.boolean().optional(),
41
+ error: z.string().optional(),
42
+ errorTitle: z.string().optional(),
43
+ });
44
+ const operationResultOutputShape = z.object({
45
+ success: z.boolean(),
46
+ message: z.string(),
47
+ });
48
+ function boundsFromParams(params) {
49
+ return params.range ? Range.parse(params.range) : Range.between(params.startCell, params.endCell);
50
+ }
51
+ function applyValidationToCell(cell, params) {
52
+ const validation = {
53
+ type: params.type,
54
+ formulae: params.formulae ?? [],
55
+ ...(params.operator ? { operator: params.operator } : {}),
56
+ ...(params.allowBlank !== undefined ? { allowBlank: params.allowBlank } : {}),
57
+ ...(params.showInputMessage !== undefined ? { showInputMessage: params.showInputMessage } : {}),
58
+ ...(params.prompt ? { prompt: params.prompt } : {}),
59
+ ...(params.promptTitle ? { promptTitle: params.promptTitle } : {}),
60
+ ...(params.showErrorMessage !== undefined ? { showErrorMessage: params.showErrorMessage } : {}),
61
+ ...(params.error ? { error: params.error } : {}),
62
+ ...(params.errorTitle ? { errorTitle: params.errorTitle } : {}),
63
+ };
64
+ cell.dataValidation = validation;
65
+ }
66
+ export const excel_set_data_validation = defineTool({
67
+ name: "excel_set_data_validation",
68
+ description: "Set or clear data validation on a range. Supports list, whole, decimal, date, textLength, and custom rules with formulae.",
69
+ inputSchema: setDataValidationInputSchema,
70
+ outputSchema: operationResultOutputShape,
71
+ handler: async (args) => {
72
+ try {
73
+ const excel = await Excel.open(args.filePath);
74
+ const sheet = excel.sheet(args.sheetName);
75
+ const worksheet = sheet.raw;
76
+ const bounds = boundsFromParams(args);
77
+ for (let r = bounds.startRow; r <= bounds.endRow; r++) {
78
+ for (let c = bounds.startCol; c <= bounds.endCol; c++) {
79
+ const cell = worksheet.getCell(r, c);
80
+ if (args.clear) {
81
+ const address = cell.address;
82
+ const validations = worksheet.dataValidations;
83
+ validations.remove(address);
84
+ delete validations.model[address];
85
+ continue;
86
+ }
87
+ if (!args.type) {
88
+ throw new Error("type is required when setting data validation");
89
+ }
90
+ if (!args.formulae || args.formulae.length === 0) {
91
+ throw new Error("formulae is required when setting data validation");
92
+ }
93
+ applyValidationToCell(cell, {
94
+ type: args.type,
95
+ operator: args.operator,
96
+ formulae: args.formulae,
97
+ allowBlank: args.allowBlank,
98
+ showInputMessage: args.showInputMessage,
99
+ prompt: args.prompt,
100
+ promptTitle: args.promptTitle,
101
+ showErrorMessage: args.showErrorMessage,
102
+ error: args.error,
103
+ errorTitle: args.errorTitle,
104
+ });
105
+ }
106
+ }
107
+ await excel.save();
108
+ const rangeLabel = args.range ?? `${args.startCell}${args.endCell ? `:${args.endCell}` : ""}`;
109
+ if (args.clear) {
110
+ return {
111
+ success: true,
112
+ message: `Cleared data validation on sheet '${worksheet.name}' at ${rangeLabel}`,
113
+ };
114
+ }
115
+ return {
116
+ success: true,
117
+ message: `Set ${args.type} data validation on sheet '${worksheet.name}' at ${rangeLabel}`,
118
+ };
119
+ }
120
+ catch (error) {
121
+ const msg = error instanceof Error ? error.message : String(error);
122
+ throw new ToolError("Failed to set data validation: " + msg);
123
+ }
124
+ },
125
+ });
126
+ //# sourceMappingURL=excel_set_data_validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_set_data_validation.js","sourceRoot":"","sources":["../../src/tools/excel_set_data_validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_set_dimensions: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_set_dimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_set_dimensions.d.ts","sourceRoot":"","sources":["../../src/tools/excel_set_dimensions.ts"],"names":[],"mappings":"AAsGA,eAAO,MAAM,oBAAoB,mDAiF/B,CAAC"}
@@ -0,0 +1,134 @@
1
+ import { defineTool, ToolError } from "@achmadya-dev/mcp-core";
2
+ import { z } from "zod";
3
+ import { Excel } from "../excel/excel.js";
4
+ import { Range } from "../excel/range.js";
5
+ const filePathField = z.string().describe("Absolute path to the local Excel file (.xlsx)");
6
+ const sheetNameOptional = z
7
+ .string()
8
+ .optional()
9
+ .describe("Name of the worksheet (defaults to the first sheet)");
10
+ const setDimensionsInputSchema = z.object({
11
+ filePath: filePathField,
12
+ sheetName: sheetNameOptional,
13
+ range: z.string().optional(),
14
+ startCell: z.string().optional(),
15
+ endCell: z.string().optional(),
16
+ rows: z.array(z.number()).optional().describe("1-based row numbers for rowHeight"),
17
+ columns: z
18
+ .array(z.union([z.number(), z.string()]))
19
+ .optional()
20
+ .describe("1-based column indexes or letters for columnWidth"),
21
+ rowHeight: z.number().optional().describe("Row height in points"),
22
+ columnWidth: z.number().optional().describe("Column width in Excel character units"),
23
+ defaultRowHeight: z.number().optional().describe("Sheet default row height"),
24
+ defaultColumnWidth: z.number().optional().describe("Sheet default column width"),
25
+ });
26
+ const operationResultOutputShape = z.object({
27
+ success: z.boolean(),
28
+ message: z.string(),
29
+ });
30
+ function columnIndex(column) {
31
+ if (typeof column === "number") {
32
+ if (!Number.isInteger(column) || column < 1) {
33
+ throw new Error(`Invalid column index: ${column}`);
34
+ }
35
+ return column;
36
+ }
37
+ return Range.letterToCol(column);
38
+ }
39
+ function collectTargetRows(params) {
40
+ if (params.rows && params.rows.length > 0) {
41
+ return params.rows;
42
+ }
43
+ if (params.range) {
44
+ const bounds = Range.parse(params.range);
45
+ return Array.from({ length: bounds.endRow - bounds.startRow + 1 }, (_, i) => bounds.startRow + i);
46
+ }
47
+ if (params.startCell) {
48
+ const bounds = Range.between(params.startCell, params.endCell);
49
+ return Array.from({ length: bounds.endRow - bounds.startRow + 1 }, (_, i) => bounds.startRow + i);
50
+ }
51
+ return [];
52
+ }
53
+ function collectTargetColumns(params) {
54
+ if (params.columns && params.columns.length > 0) {
55
+ return params.columns.map(columnIndex);
56
+ }
57
+ if (params.range) {
58
+ const bounds = Range.parse(params.range);
59
+ return Array.from({ length: bounds.endCol - bounds.startCol + 1 }, (_, i) => bounds.startCol + i);
60
+ }
61
+ if (params.startCell) {
62
+ const bounds = Range.between(params.startCell, params.endCell);
63
+ return Array.from({ length: bounds.endCol - bounds.startCol + 1 }, (_, i) => bounds.startCol + i);
64
+ }
65
+ return [];
66
+ }
67
+ export const excel_set_dimensions = defineTool({
68
+ name: "excel_set_dimensions",
69
+ description: "Adjust row heights and column widths by range, explicit rows/columns, or sheet defaults.",
70
+ inputSchema: setDimensionsInputSchema,
71
+ outputSchema: operationResultOutputShape,
72
+ handler: async (args) => {
73
+ try {
74
+ const { filePath, sheetName, rowHeight, columnWidth, defaultRowHeight, defaultColumnWidth } = args;
75
+ if (rowHeight === undefined &&
76
+ columnWidth === undefined &&
77
+ defaultRowHeight === undefined &&
78
+ defaultColumnWidth === undefined) {
79
+ throw new Error("Provide rowHeight, columnWidth, defaultRowHeight, and/or defaultColumnWidth");
80
+ }
81
+ const excel = await Excel.open(filePath);
82
+ const sheet = excel.sheet(sheetName);
83
+ const worksheet = sheet.raw;
84
+ const targetRows = collectTargetRows(args);
85
+ const targetColumns = collectTargetColumns(args);
86
+ if (rowHeight !== undefined) {
87
+ if (targetRows.length === 0) {
88
+ throw new Error("rowHeight requires rows, range, or startCell");
89
+ }
90
+ for (const rowNumber of targetRows) {
91
+ worksheet.getRow(rowNumber).height = rowHeight;
92
+ }
93
+ }
94
+ if (columnWidth !== undefined) {
95
+ if (targetColumns.length === 0) {
96
+ throw new Error("columnWidth requires columns, range, or startCell");
97
+ }
98
+ for (const colNumber of targetColumns) {
99
+ worksheet.getColumn(colNumber).width = columnWidth;
100
+ }
101
+ }
102
+ if (defaultRowHeight !== undefined) {
103
+ worksheet.properties.defaultRowHeight = defaultRowHeight;
104
+ }
105
+ if (defaultColumnWidth !== undefined) {
106
+ worksheet.properties.defaultColWidth = defaultColumnWidth;
107
+ }
108
+ await excel.save();
109
+ const parts = [];
110
+ if (rowHeight !== undefined) {
111
+ parts.push(`row height ${rowHeight} on rows ${targetRows.join(", ")}`);
112
+ }
113
+ if (columnWidth !== undefined) {
114
+ const labels = targetColumns.map((c) => Range.colToLetter(c));
115
+ parts.push(`column width ${columnWidth} on columns ${labels.join(", ")}`);
116
+ }
117
+ if (defaultRowHeight !== undefined) {
118
+ parts.push(`default row height ${defaultRowHeight}`);
119
+ }
120
+ if (defaultColumnWidth !== undefined) {
121
+ parts.push(`default column width ${defaultColumnWidth}`);
122
+ }
123
+ return {
124
+ success: true,
125
+ message: `Updated ${parts.join("; ")} on sheet '${worksheet.name}'`,
126
+ };
127
+ }
128
+ catch (error) {
129
+ const msg = error instanceof Error ? error.message : String(error);
130
+ throw new ToolError("Failed to set dimensions: " + msg);
131
+ }
132
+ },
133
+ });
134
+ //# sourceMappingURL=excel_set_dimensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_set_dimensions.js","sourceRoot":"","sources":["../../src/tools/excel_set_dimensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_set_sheet_visibility: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_set_sheet_visibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_set_sheet_visibility.d.ts","sourceRoot":"","sources":["../../src/tools/excel_set_sheet_visibility.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,0BAA0B,mDAqBrC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { defineTool, ToolError } from "@achmadya-dev/mcp-core";
2
+ import { z } from "zod";
3
+ import { Excel } from "../excel/excel.js";
4
+ const filePathField = z.string().describe("Absolute path to the local Excel file (.xlsx)");
5
+ const setSheetVisibilityInputSchema = z.object({
6
+ filePath: filePathField,
7
+ sheetName: z.string().describe("Worksheet to show or hide"),
8
+ state: z
9
+ .enum(["visible", "hidden", "veryHidden"])
10
+ .describe("visible = shown; hidden = hidden (user can unhide); veryHidden = hidden from Excel UI unhide menu"),
11
+ });
12
+ const operationResultOutputShape = z.object({
13
+ success: z.boolean(),
14
+ message: z.string(),
15
+ });
16
+ export const excel_set_sheet_visibility = defineTool({
17
+ name: "excel_set_sheet_visibility",
18
+ description: "Show, hide, or very-hide a worksheet (state: visible, hidden, veryHidden).",
19
+ inputSchema: setSheetVisibilityInputSchema,
20
+ outputSchema: operationResultOutputShape,
21
+ handler: async (args) => {
22
+ try {
23
+ const { filePath, sheetName, state } = args;
24
+ const excel = await Excel.open(filePath);
25
+ const sheet = excel.sheet(sheetName);
26
+ sheet.raw.state = state;
27
+ await excel.save();
28
+ return {
29
+ success: true,
30
+ message: `Sheet '${sheetName}' visibility set to '${state}'`,
31
+ };
32
+ }
33
+ catch (error) {
34
+ const msg = error instanceof Error ? error.message : String(error);
35
+ throw new ToolError("Failed to set sheet visibility: " + msg);
36
+ }
37
+ },
38
+ });
39
+ //# sourceMappingURL=excel_set_sheet_visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_set_sheet_visibility.js","sourceRoot":"","sources":["../../src/tools/excel_set_sheet_visibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAE3F,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC3D,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;SACzC,QAAQ,CACP,mGAAmG,CACpG;CACJ,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC;IACnD,IAAI,EAAE,4BAA4B;IAClC,WAAW,EAAE,4EAA4E;IACzF,WAAW,EAAE,6BAA6B;IAC1C,YAAY,EAAE,0BAA0B;IACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAC5C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YACxB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,IAAa;gBACtB,OAAO,EAAE,UAAU,SAAS,wBAAwB,KAAK,GAAG;aAC7D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,IAAI,SAAS,CAAC,kCAAkC,GAAG,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_unmerge_cells: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_unmerge_cells.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_unmerge_cells.d.ts","sourceRoot":"","sources":["../../src/tools/excel_unmerge_cells.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,mBAAmB,mDAqB9B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { defineTool, ToolError } from "@achmadya-dev/mcp-core";
2
+ import { z } from "zod";
3
+ import { Excel } from "../excel/excel.js";
4
+ const filePathField = z.string().describe("Absolute path to the local Excel file (.xlsx)");
5
+ const sheetNameOptional = z
6
+ .string()
7
+ .optional()
8
+ .describe("Name of the worksheet (defaults to the first sheet)");
9
+ const unmergeCellsInputSchema = z.object({
10
+ filePath: filePathField,
11
+ sheetName: sheetNameOptional,
12
+ startCell: z.string(),
13
+ endCell: z.string(),
14
+ });
15
+ const operationResultOutputShape = z.object({
16
+ success: z.boolean(),
17
+ message: z.string(),
18
+ });
19
+ export const excel_unmerge_cells = defineTool({
20
+ name: "excel_unmerge_cells",
21
+ description: "Unmerge a previously merged range.",
22
+ inputSchema: unmergeCellsInputSchema,
23
+ outputSchema: operationResultOutputShape,
24
+ handler: async (args) => {
25
+ try {
26
+ const excel = await Excel.open(args.filePath);
27
+ const sheet = excel.sheet(args.sheetName);
28
+ const bounds = sheet.range(args.startCell, args.endCell);
29
+ sheet.raw.unMergeCells(bounds.startRow, bounds.startCol, bounds.endRow, bounds.endCol);
30
+ await excel.save();
31
+ return {
32
+ success: true,
33
+ message: `Unmerged cells ${args.startCell}:${args.endCell}`,
34
+ };
35
+ }
36
+ catch (error) {
37
+ const msg = error instanceof Error ? error.message : String(error);
38
+ throw new ToolError("Failed to unmerge cells: " + msg);
39
+ }
40
+ },
41
+ });
42
+ //# sourceMappingURL=excel_unmerge_cells.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_unmerge_cells.js","sourceRoot":"","sources":["../../src/tools/excel_unmerge_cells.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAE3F,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CAAC,qDAAqD,CAAC,CAAC;AAEnE,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,iBAAiB;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;IAC5C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,oCAAoC;IACjD,WAAW,EAAE,uBAAuB;IACpC,YAAY,EAAE,0BAA0B;IACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACvF,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,IAAa;gBACtB,OAAO,EAAE,kBAAkB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;aAC5D,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,IAAI,SAAS,CAAC,2BAA2B,GAAG,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_write_range: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_write_range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_write_range.d.ts","sourceRoot":"","sources":["../../src/tools/excel_write_range.ts"],"names":[],"mappings":"AAgGA,eAAO,MAAM,iBAAiB,mDAoF5B,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { defineTool, ToolError } from "@achmadya-dev/mcp-core";
2
+ import { z } from "zod";
3
+ import { Cell } from "../excel/cell.js";
4
+ import { Excel } from "../excel/excel.js";
5
+ import { Range } from "../excel/range.js";
6
+ const filePathField = z.string().describe("Absolute path to the local Excel file (.xlsx)");
7
+ const sheetNameOptional = z
8
+ .string()
9
+ .optional()
10
+ .describe("Name of the worksheet (defaults to the first sheet)");
11
+ const cellValueSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
12
+ const borderSideSchema = z
13
+ .object({
14
+ style: z.string().optional(),
15
+ color: z.string().optional(),
16
+ })
17
+ .optional();
18
+ const cellStyleSchema = z.object({
19
+ font: z
20
+ .object({
21
+ name: z.string().optional(),
22
+ size: z.number().optional(),
23
+ bold: z.boolean().optional(),
24
+ italic: z.boolean().optional(),
25
+ underline: z.boolean().optional(),
26
+ color: z.string().optional(),
27
+ })
28
+ .optional(),
29
+ fill: z
30
+ .object({
31
+ type: z.enum(["pattern", "gradient"]).optional(),
32
+ pattern: z.string().optional(),
33
+ fgColor: z.string().optional(),
34
+ bgColor: z.string().optional(),
35
+ })
36
+ .optional(),
37
+ alignment: z
38
+ .object({
39
+ horizontal: z.enum(["left", "center", "right", "justify", "distributed"]).optional(),
40
+ vertical: z.enum(["top", "middle", "bottom", "justify", "distributed"]).optional(),
41
+ wrapText: z.boolean().optional(),
42
+ })
43
+ .optional(),
44
+ border: z
45
+ .object({
46
+ top: borderSideSchema,
47
+ left: borderSideSchema,
48
+ bottom: borderSideSchema,
49
+ right: borderSideSchema,
50
+ })
51
+ .optional(),
52
+ numFmt: z.string().optional(),
53
+ });
54
+ const writeRangeInputSchema = z.object({
55
+ filePath: filePathField,
56
+ sheetName: sheetNameOptional,
57
+ newSheet: z
58
+ .boolean()
59
+ .optional()
60
+ .describe("Create a new sheet (blank if no values/data, or write initial data)"),
61
+ append: z
62
+ .boolean()
63
+ .optional()
64
+ .describe("Append rows to the bottom of the sheet instead of writing at startCell"),
65
+ range: z.string().optional(),
66
+ startCell: z
67
+ .string()
68
+ .optional()
69
+ .describe("Start cell (default A1); use for single-cell writes including formulas (=...)"),
70
+ values: z.array(z.array(cellValueSchema)).optional(),
71
+ data: z.array(z.record(z.string(), z.any())).optional(),
72
+ style: cellStyleSchema
73
+ .optional()
74
+ .describe("Optional style when writing a single cell via startCell + one value"),
75
+ });
76
+ const operationResultOutputShape = z.object({
77
+ success: z.boolean(),
78
+ message: z.string(),
79
+ });
80
+ function recordsToGrid(data) {
81
+ if (data.length === 0)
82
+ return [];
83
+ const keys = Object.keys(data[0]);
84
+ const grid = [keys];
85
+ for (const record of data) {
86
+ grid.push(keys.map((k) => record[k] ?? null));
87
+ }
88
+ return grid;
89
+ }
90
+ export const excel_write_range = defineTool({
91
+ name: "excel_write_range",
92
+ description: "Write data: values (2D), data (objects), append rows (append:true), create blank sheet (newSheet:true), single cell/formula (startCell + values), optional style for one cell.",
93
+ inputSchema: writeRangeInputSchema,
94
+ outputSchema: operationResultOutputShape,
95
+ handler: async (args) => {
96
+ try {
97
+ const { filePath, sheetName, newSheet = false, append = false, range, startCell = "A1", style, } = args;
98
+ let grid = args.values;
99
+ if (!grid && args.data) {
100
+ grid = recordsToGrid(args.data);
101
+ }
102
+ const excel = await Excel.open(filePath);
103
+ let sheet;
104
+ if (newSheet) {
105
+ if (!sheetName)
106
+ throw new Error("sheetName is required when newSheet is true");
107
+ sheet = excel.addSheet(sheetName);
108
+ if (!grid || grid.length === 0) {
109
+ await excel.save();
110
+ return { success: true, message: `Sheet '${sheetName}' created in ${filePath}` };
111
+ }
112
+ }
113
+ else {
114
+ sheet = excel.sheet(sheetName);
115
+ }
116
+ const worksheet = sheet.raw;
117
+ if (!grid || grid.length === 0) {
118
+ throw new Error("values, data, or append rows are required unless newSheet creates a blank sheet");
119
+ }
120
+ if (append) {
121
+ for (const rowData of grid) {
122
+ worksheet.addRow(rowData);
123
+ }
124
+ await excel.save();
125
+ return {
126
+ success: true,
127
+ message: `Appended ${grid.length} row(s) to sheet '${worksheet.name}'`,
128
+ };
129
+ }
130
+ const origin = range ? Range.parse(range).startRow : Range.parse(startCell).startRow;
131
+ const originCol = range ? Range.parse(range).startCol : Range.parse(startCell).startCol;
132
+ for (let r = 0; r < grid.length; r++) {
133
+ const row = grid[r];
134
+ for (let c = 0; c < row.length; c++) {
135
+ const cell = worksheet.getCell(origin + r, originCol + c);
136
+ Cell.set(cell, row[c]);
137
+ if (style && grid.length === 1 && row.length === 1) {
138
+ Cell.applyStyle(cell, style);
139
+ }
140
+ }
141
+ }
142
+ await excel.save();
143
+ const targetRange = range ??
144
+ `${startCell}:${Range.address(origin + grid.length - 1, originCol + grid[0].length - 1)}`;
145
+ return {
146
+ success: true,
147
+ message: `Wrote ${grid.length} row(s) to sheet '${worksheet.name}' at ${targetRange}`,
148
+ };
149
+ }
150
+ catch (error) {
151
+ const msg = error instanceof Error ? error.message : String(error);
152
+ throw new ToolError("Failed to write range: " + msg);
153
+ }
154
+ },
155
+ });
156
+ //# sourceMappingURL=excel_write_range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_write_range.js","sourceRoot":"","sources":["../../src/tools/excel_write_range.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@achmadya-dev/mcp-excel-query",
3
+ "version": "0.3.0",
4
+ "description": "Model Context Protocol (MCP) server for local Excel file (.xlsx) reading and manipulation",
5
+ "type": "module",
6
+ "author": "achmadya",
7
+ "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/achmadya-dev/mcp-excel-query.git"
11
+ },
12
+ "keywords": [
13
+ "mcp",
14
+ "model-context-protocol",
15
+ "excel",
16
+ "exceljs",
17
+ "xlsx"
18
+ ],
19
+ "main": "dist/index.js",
20
+ "bin": {
21
+ "mcp-excel-query": "./dist/index.js"
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "engines": {
30
+ "node": ">=20"
31
+ },
32
+ "dependencies": {
33
+ "@achmadya-dev/mcp-core": "^0.3.3",
34
+ "exceljs": "^4.4.0",
35
+ "zod": "4.3.6"
36
+ },
37
+ "devDependencies": {
38
+ "@jest/globals": "30.4.1",
39
+ "@types/jest": "30.0.0",
40
+ "@types/node": "22.10.0",
41
+ "jest": "30.4.2",
42
+ "ts-jest": "29.4.11",
43
+ "typescript": "5.7.2",
44
+ "@changesets/cli": "2.29.8"
45
+ },
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.build.json",
48
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
49
+ "start": "node dist/index.js",
50
+ "changeset": "changeset",
51
+ "version-packages": "changeset version",
52
+ "publish-packages": "pnpm run build && changeset publish"
53
+ }
54
+ }