@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,70 @@
1
+ export class Range {
2
+ static letterToCol(letter) {
3
+ let num = 0;
4
+ for (let i = 0; i < letter.length; i++) {
5
+ const charCode = letter.toUpperCase().charCodeAt(i);
6
+ if (charCode < 65 || charCode > 90) {
7
+ throw new Error(`Invalid column character in letter: ${letter}`);
8
+ }
9
+ num = num * 26 + (charCode - 64);
10
+ }
11
+ return num;
12
+ }
13
+ static colToLetter(col) {
14
+ let temp = "";
15
+ let c = col;
16
+ while (c > 0) {
17
+ const rem = (c - 1) % 26;
18
+ temp = String.fromCharCode(65 + rem) + temp;
19
+ c = Math.floor((c - 1) / 26);
20
+ }
21
+ return temp || "A";
22
+ }
23
+ static address(row, col) {
24
+ return `${Range.colToLetter(col)}${row}`;
25
+ }
26
+ static toA1(bounds) {
27
+ const start = Range.address(bounds.startRow, bounds.startCol);
28
+ if (bounds.startRow === bounds.endRow && bounds.startCol === bounds.endCol) {
29
+ return start;
30
+ }
31
+ return `${start}:${Range.address(bounds.endRow, bounds.endCol)}`;
32
+ }
33
+ static parse(rangeStr) {
34
+ const trimmed = rangeStr.trim().replace(/\$/g, "");
35
+ const match = trimmed.match(/^([A-Z]+)([0-9]+):([A-Z]+)([0-9]+)$/i);
36
+ if (!match) {
37
+ const singleMatch = trimmed.match(/^([A-Z]+)([0-9]+)$/i);
38
+ if (singleMatch) {
39
+ const col = Range.letterToCol(singleMatch[1]);
40
+ const row = parseInt(singleMatch[2], 10);
41
+ return { startRow: row, startCol: col, endRow: row, endCol: col };
42
+ }
43
+ throw new Error(`Invalid A1 range or cell format: "${rangeStr}"`);
44
+ }
45
+ const startCol = Range.letterToCol(match[1]);
46
+ const startRow = parseInt(match[2], 10);
47
+ const endCol = Range.letterToCol(match[3]);
48
+ const endRow = parseInt(match[4], 10);
49
+ return {
50
+ startRow: Math.min(startRow, endRow),
51
+ startCol: Math.min(startCol, endCol),
52
+ endRow: Math.max(startRow, endRow),
53
+ endCol: Math.max(startCol, endCol),
54
+ };
55
+ }
56
+ static between(startCell, endCell) {
57
+ if (endCell) {
58
+ const start = Range.parse(startCell);
59
+ const end = Range.parse(endCell);
60
+ return {
61
+ startRow: Math.min(start.startRow, end.startRow),
62
+ startCol: Math.min(start.startCol, end.startCol),
63
+ endRow: Math.max(start.endRow, end.endRow),
64
+ endCol: Math.max(start.endCol, end.endCol),
65
+ };
66
+ }
67
+ return Range.parse(startCell);
68
+ }
69
+ }
70
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","sourceRoot":"","sources":["../../src/excel/range.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ import { startMcpServer } from "@achmadya-dev/mcp-core";
3
+ import packageJson from "../package.json" with { type: "json" };
4
+ import { excel_copy_range } from "./tools/excel_copy_range.js";
5
+ import { excel_copy_sheet } from "./tools/excel_copy_sheet.js";
6
+ import { excel_create_file } from "./tools/excel_create_file.js";
7
+ import { excel_create_table } from "./tools/excel_create_table.js";
8
+ import { excel_delete_range } from "./tools/excel_delete_range.js";
9
+ import { excel_delete_sheet } from "./tools/excel_delete_sheet.js";
10
+ import { excel_format_range } from "./tools/excel_format_range.js";
11
+ import { excel_get_metadata } from "./tools/excel_get_metadata.js";
12
+ import { excel_insert_columns } from "./tools/excel_insert_columns.js";
13
+ import { excel_insert_rows } from "./tools/excel_insert_rows.js";
14
+ import { excel_read_sheet } from "./tools/excel_read_sheet.js";
15
+ import { excel_rename_sheet } from "./tools/excel_rename_sheet.js";
16
+ import { excel_set_data_validation } from "./tools/excel_set_data_validation.js";
17
+ import { excel_set_dimensions } from "./tools/excel_set_dimensions.js";
18
+ import { excel_set_sheet_visibility } from "./tools/excel_set_sheet_visibility.js";
19
+ import { excel_unmerge_cells } from "./tools/excel_unmerge_cells.js";
20
+ import { excel_write_range } from "./tools/excel_write_range.js";
21
+ await startMcpServer({
22
+ name: "Excel Local Manager",
23
+ version: packageJson.version,
24
+ tools: [
25
+ excel_read_sheet,
26
+ excel_get_metadata,
27
+ excel_create_file,
28
+ excel_write_range,
29
+ excel_format_range,
30
+ excel_copy_sheet,
31
+ excel_rename_sheet,
32
+ excel_delete_sheet,
33
+ excel_copy_range,
34
+ excel_delete_range,
35
+ excel_unmerge_cells,
36
+ excel_create_table,
37
+ excel_insert_rows,
38
+ excel_insert_columns,
39
+ excel_set_sheet_visibility,
40
+ excel_set_data_validation,
41
+ excel_set_dimensions,
42
+ ],
43
+ });
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,cAAc,CAAC;IACnB,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,WAAW,CAAC,OAAO;IAC5B,KAAK,EAAE;QACL,gBAAgB;QAChB,kBAAkB;QAClB,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;QAClB,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,gBAAgB;QAChB,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;QAClB,iBAAiB;QACjB,oBAAoB;QACpB,0BAA0B;QAC1B,yBAAyB;QACzB,oBAAoB;KACrB;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_copy_range: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_copy_range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_copy_range.d.ts","sourceRoot":"","sources":["../../src/tools/excel_copy_range.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,gBAAgB,mDAmC3B,CAAC"}
@@ -0,0 +1,56 @@
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 copyRangeInputSchema = z.object({
11
+ filePath: filePathField,
12
+ sheetName: sheetNameOptional,
13
+ sourceStart: z.string(),
14
+ sourceEnd: z.string(),
15
+ targetStart: z.string(),
16
+ targetSheet: z.string().optional(),
17
+ });
18
+ const operationResultOutputShape = z.object({
19
+ success: z.boolean(),
20
+ message: z.string(),
21
+ });
22
+ export const excel_copy_range = defineTool({
23
+ name: "excel_copy_range",
24
+ description: "Copy a cell range to another location (optionally another sheet).",
25
+ inputSchema: copyRangeInputSchema,
26
+ outputSchema: operationResultOutputShape,
27
+ handler: async (args) => {
28
+ try {
29
+ const excel = await Excel.open(args.filePath);
30
+ const sourceWs = excel.sheet(args.sheetName).raw;
31
+ const targetWs = args.targetSheet ? excel.sheet(args.targetSheet).raw : sourceWs;
32
+ const src = Range.between(args.sourceStart, args.sourceEnd);
33
+ const tgt = Range.parse(args.targetStart);
34
+ const rowOffset = tgt.startRow - src.startRow;
35
+ const colOffset = tgt.startCol - src.startCol;
36
+ for (let r = src.startRow; r <= src.endRow; r++) {
37
+ for (let c = src.startCol; c <= src.endCol; c++) {
38
+ const srcCell = sourceWs.getCell(r, c);
39
+ const dstCell = targetWs.getCell(r + rowOffset, c + colOffset);
40
+ dstCell.value = srcCell.value;
41
+ dstCell.style = Object.assign({}, srcCell.style);
42
+ }
43
+ }
44
+ await excel.save();
45
+ return {
46
+ success: true,
47
+ message: `Copied ${args.sourceStart}:${args.sourceEnd} to ${args.targetStart} on sheet '${targetWs.name}'`,
48
+ };
49
+ }
50
+ catch (error) {
51
+ const msg = error instanceof Error ? error.message : String(error);
52
+ throw new ToolError("Failed to copy range: " + msg);
53
+ }
54
+ },
55
+ });
56
+ //# sourceMappingURL=excel_copy_range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_copy_range.js","sourceRoot":"","sources":["../../src/tools/excel_copy_range.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_copy_sheet: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_copy_sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_copy_sheet.d.ts","sourceRoot":"","sources":["../../src/tools/excel_copy_sheet.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,gBAAgB,mDA0B3B,CAAC"}
@@ -0,0 +1,56 @@
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 copySheetInputSchema = z.object({
6
+ filePath: filePathField,
7
+ sourceSheet: z.string(),
8
+ targetSheet: z.string(),
9
+ });
10
+ const operationResultOutputShape = z.object({
11
+ success: z.boolean(),
12
+ message: z.string(),
13
+ });
14
+ function duplicateWorksheet(workbook, source, name) {
15
+ const newSheet = workbook.addWorksheet(name);
16
+ newSheet.model = Object.assign({}, source.model, { name });
17
+ source.eachRow((row, rowNumber) => {
18
+ const newRow = newSheet.getRow(rowNumber);
19
+ row.eachCell({ includeEmpty: true }, (cell, colNumber) => {
20
+ const newCell = newRow.getCell(colNumber);
21
+ newCell.value = cell.value;
22
+ newCell.style = Object.assign({}, cell.style);
23
+ });
24
+ });
25
+ for (const merge of source.model.merges ?? []) {
26
+ newSheet.mergeCells(String(merge));
27
+ }
28
+ return newSheet;
29
+ }
30
+ export const excel_copy_sheet = defineTool({
31
+ name: "excel_copy_sheet",
32
+ description: "Copy an existing worksheet to a new sheet name.",
33
+ inputSchema: copySheetInputSchema,
34
+ outputSchema: operationResultOutputShape,
35
+ handler: async (args) => {
36
+ try {
37
+ const { filePath, sourceSheet, targetSheet } = args;
38
+ const excel = await Excel.open(filePath);
39
+ const source = excel.sheet(sourceSheet).raw;
40
+ if (excel.hasSheet(targetSheet)) {
41
+ throw new Error(`Target worksheet already exists: "${targetSheet}"`);
42
+ }
43
+ duplicateWorksheet(excel.workbook, source, targetSheet);
44
+ await excel.save();
45
+ return {
46
+ success: true,
47
+ message: `Sheet '${sourceSheet}' copied to '${targetSheet}'`,
48
+ };
49
+ }
50
+ catch (error) {
51
+ const msg = error instanceof Error ? error.message : String(error);
52
+ throw new ToolError("Failed to copy sheet: " + msg);
53
+ }
54
+ },
55
+ });
56
+ //# sourceMappingURL=excel_copy_sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_copy_sheet.js","sourceRoot":"","sources":["../../src/tools/excel_copy_sheet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_create_file: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_create_file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_create_file.d.ts","sourceRoot":"","sources":["../../src/tools/excel_create_file.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,iBAAiB,mDAgB5B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { defineTool, ToolError } from "@achmadya-dev/mcp-core";
2
+ import { z } from "zod";
3
+ import { Excel } from "../excel/excel.js";
4
+ const createFileInputSchema = z.object({
5
+ filePath: z.string().describe("Absolute path where the new Excel file (.xlsx) will be created"),
6
+ sheetName: z.string().optional().describe("Name of the first sheet (defaults to 'Sheet1')"),
7
+ headers: z.array(z.string()).optional(),
8
+ });
9
+ const operationResultOutputShape = z.object({
10
+ success: z.boolean(),
11
+ message: z.string(),
12
+ });
13
+ export const excel_create_file = defineTool({
14
+ name: "excel_create_file",
15
+ description: "Create a new Excel file with optional first sheet and headers.",
16
+ inputSchema: createFileInputSchema,
17
+ outputSchema: operationResultOutputShape,
18
+ handler: async (args) => {
19
+ try {
20
+ const { filePath, sheetName = "Sheet1", headers } = args;
21
+ const excel = Excel.create(filePath, { sheetName, headers });
22
+ await excel.save();
23
+ return { success: true, message: `Excel file created successfully at ${filePath}` };
24
+ }
25
+ catch (error) {
26
+ const msg = error instanceof Error ? error.message : String(error);
27
+ throw new ToolError("Failed to create Excel file: " + msg);
28
+ }
29
+ },
30
+ });
31
+ //# sourceMappingURL=excel_create_file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_create_file.js","sourceRoot":"","sources":["../../src/tools/excel_create_file.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,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;IAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC3F,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACxC,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,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,gEAAgE;IAC7E,WAAW,EAAE,qBAAqB;IAClC,YAAY,EAAE,0BAA0B;IACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;YACzD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,EAAE,OAAO,EAAE,IAAa,EAAE,OAAO,EAAE,sCAAsC,QAAQ,EAAE,EAAE,CAAC;QAC/F,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,+BAA+B,GAAG,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_create_table: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_create_table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_create_table.d.ts","sourceRoot":"","sources":["../../src/tools/excel_create_table.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,kBAAkB,mDAuD7B,CAAC"}
@@ -0,0 +1,73 @@
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 createTableInputSchema = z.object({
11
+ filePath: filePathField,
12
+ sheetName: sheetNameOptional,
13
+ dataRange: z.string(),
14
+ tableName: z.string().optional(),
15
+ tableStyle: z.string().optional(),
16
+ });
17
+ const operationResultOutputShape = z.object({
18
+ success: z.boolean(),
19
+ message: z.string(),
20
+ });
21
+ export const excel_create_table = defineTool({
22
+ name: "excel_create_table",
23
+ description: "Create a native Excel table from a data range.",
24
+ inputSchema: createTableInputSchema,
25
+ outputSchema: operationResultOutputShape,
26
+ handler: async (args) => {
27
+ try {
28
+ const excel = await Excel.open(args.filePath);
29
+ const sheet = excel.sheet(args.sheetName);
30
+ const worksheet = sheet.raw;
31
+ const bounds = Range.parse(args.dataRange);
32
+ const headerRow = worksheet.getRow(bounds.startRow);
33
+ const columns = [];
34
+ for (let c = bounds.startCol; c <= bounds.endCol; c++) {
35
+ const val = headerRow.getCell(c).value;
36
+ const name = val !== null && val !== undefined && val !== ""
37
+ ? String(val)
38
+ : `Column${c - bounds.startCol + 1}`;
39
+ columns.push({ name, filterButton: true });
40
+ }
41
+ const rows = [];
42
+ for (let r = bounds.startRow + 1; r <= bounds.endRow; r++) {
43
+ const row = worksheet.getRow(r);
44
+ const rowData = [];
45
+ for (let c = bounds.startCol; c <= bounds.endCol; c++) {
46
+ rowData.push(row.getCell(c).value ?? null);
47
+ }
48
+ rows.push(rowData);
49
+ }
50
+ worksheet.addTable({
51
+ name: args.tableName ?? `Table_${Date.now()}`,
52
+ ref: args.dataRange,
53
+ headerRow: true,
54
+ style: {
55
+ theme: (args.tableStyle ?? "TableStyleMedium9"),
56
+ showRowStripes: true,
57
+ },
58
+ columns,
59
+ rows,
60
+ });
61
+ await excel.save();
62
+ return {
63
+ success: true,
64
+ message: `Table '${args.tableName ?? "created"}' added on sheet '${worksheet.name}' at ${args.dataRange}`,
65
+ };
66
+ }
67
+ catch (error) {
68
+ const msg = error instanceof Error ? error.message : String(error);
69
+ throw new ToolError("Failed to create table: " + msg);
70
+ }
71
+ },
72
+ });
73
+ //# sourceMappingURL=excel_create_table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_create_table.js","sourceRoot":"","sources":["../../src/tools/excel_create_table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_delete_range: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_delete_range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_delete_range.d.ts","sourceRoot":"","sources":["../../src/tools/excel_delete_range.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,kBAAkB,mDAgC7B,CAAC"}
@@ -0,0 +1,55 @@
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 deleteRangeInputSchema = z.object({
10
+ filePath: filePathField,
11
+ sheetName: sheetNameOptional,
12
+ startCell: z.string(),
13
+ endCell: z.string(),
14
+ shiftDirection: z
15
+ .enum(["up", "left"])
16
+ .optional()
17
+ .describe("Use 'up' to delete full rows, 'left' to delete full columns"),
18
+ });
19
+ const operationResultOutputShape = z.object({
20
+ success: z.boolean(),
21
+ message: z.string(),
22
+ });
23
+ export const excel_delete_range = defineTool({
24
+ name: "excel_delete_range",
25
+ description: "Delete a cell range and shift remaining cells. Use shiftDirection 'up' for row deletion, 'left' for column deletion.",
26
+ inputSchema: deleteRangeInputSchema,
27
+ outputSchema: operationResultOutputShape,
28
+ handler: async (args) => {
29
+ try {
30
+ const excel = await Excel.open(args.filePath);
31
+ const sheet = excel.sheet(args.sheetName);
32
+ const bounds = sheet.range(args.startCell, args.endCell);
33
+ const shift = args.shiftDirection ?? "up";
34
+ if (shift === "up") {
35
+ sheet.raw.spliceRows(bounds.startRow, bounds.endRow - bounds.startRow + 1);
36
+ }
37
+ else {
38
+ for (let r = bounds.startRow; r <= bounds.endRow; r++) {
39
+ const row = sheet.raw.getRow(r);
40
+ row.splice(bounds.startCol, bounds.endCol - bounds.startCol + 1);
41
+ }
42
+ }
43
+ await excel.save();
44
+ return {
45
+ success: true,
46
+ message: `Deleted range ${args.startCell}:${args.endCell} (shift ${shift})`,
47
+ };
48
+ }
49
+ catch (error) {
50
+ const msg = error instanceof Error ? error.message : String(error);
51
+ throw new ToolError("Failed to delete range: " + msg);
52
+ }
53
+ },
54
+ });
55
+ //# sourceMappingURL=excel_delete_range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_delete_range.js","sourceRoot":"","sources":["../../src/tools/excel_delete_range.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_delete_sheet: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_delete_sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_delete_sheet.d.ts","sourceRoot":"","sources":["../../src/tools/excel_delete_sheet.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,kBAAkB,mDAiB7B,CAAC"}
@@ -0,0 +1,32 @@
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 deleteSheetInputSchema = z.object({
6
+ filePath: filePathField,
7
+ sheetName: z.string(),
8
+ });
9
+ const operationResultOutputShape = z.object({
10
+ success: z.boolean(),
11
+ message: z.string(),
12
+ });
13
+ export const excel_delete_sheet = defineTool({
14
+ name: "excel_delete_sheet",
15
+ description: "Delete a worksheet (cannot delete the only sheet).",
16
+ inputSchema: deleteSheetInputSchema,
17
+ outputSchema: operationResultOutputShape,
18
+ handler: async (args) => {
19
+ try {
20
+ const { filePath, sheetName } = args;
21
+ const excel = await Excel.open(filePath);
22
+ excel.removeSheet(sheetName);
23
+ await excel.save();
24
+ return { success: true, message: `Sheet '${sheetName}' deleted` };
25
+ }
26
+ catch (error) {
27
+ const msg = error instanceof Error ? error.message : String(error);
28
+ throw new ToolError("Failed to delete sheet: " + msg);
29
+ }
30
+ },
31
+ });
32
+ //# sourceMappingURL=excel_delete_sheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_delete_sheet.js","sourceRoot":"","sources":["../../src/tools/excel_delete_sheet.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,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,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,kBAAkB,GAAG,UAAU,CAAC;IAC3C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oDAAoD;IACjE,WAAW,EAAE,sBAAsB;IACnC,YAAY,EAAE,0BAA0B;IACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,EAAE,OAAO,EAAE,IAAa,EAAE,OAAO,EAAE,UAAU,SAAS,WAAW,EAAE,CAAC;QAC7E,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,0BAA0B,GAAG,GAAG,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const excel_format_range: import("@achmadya-dev/mcp-core").RegisterableTool;
2
+ //# sourceMappingURL=excel_format_range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel_format_range.d.ts","sourceRoot":"","sources":["../../src/tools/excel_format_range.ts"],"names":[],"mappings":"AAiFA,eAAO,MAAM,kBAAkB,mDAwF7B,CAAC"}