@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.
- package/LICENSE +21 -0
- package/README.md +123 -0
- package/dist/excel/cell.d.ts +12 -0
- package/dist/excel/cell.d.ts.map +1 -0
- package/dist/excel/cell.js +136 -0
- package/dist/excel/cell.js.map +1 -0
- package/dist/excel/date.d.ts +6 -0
- package/dist/excel/date.d.ts.map +1 -0
- package/dist/excel/date.js +132 -0
- package/dist/excel/date.js.map +1 -0
- package/dist/excel/excel.d.ts +29 -0
- package/dist/excel/excel.d.ts.map +1 -0
- package/dist/excel/excel.js +94 -0
- package/dist/excel/excel.js.map +1 -0
- package/dist/excel/range.d.ts +15 -0
- package/dist/excel/range.d.ts.map +1 -0
- package/dist/excel/range.js +70 -0
- package/dist/excel/range.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/excel_copy_range.d.ts +2 -0
- package/dist/tools/excel_copy_range.d.ts.map +1 -0
- package/dist/tools/excel_copy_range.js +56 -0
- package/dist/tools/excel_copy_range.js.map +1 -0
- package/dist/tools/excel_copy_sheet.d.ts +2 -0
- package/dist/tools/excel_copy_sheet.d.ts.map +1 -0
- package/dist/tools/excel_copy_sheet.js +56 -0
- package/dist/tools/excel_copy_sheet.js.map +1 -0
- package/dist/tools/excel_create_file.d.ts +2 -0
- package/dist/tools/excel_create_file.d.ts.map +1 -0
- package/dist/tools/excel_create_file.js +31 -0
- package/dist/tools/excel_create_file.js.map +1 -0
- package/dist/tools/excel_create_table.d.ts +2 -0
- package/dist/tools/excel_create_table.d.ts.map +1 -0
- package/dist/tools/excel_create_table.js +73 -0
- package/dist/tools/excel_create_table.js.map +1 -0
- package/dist/tools/excel_delete_range.d.ts +2 -0
- package/dist/tools/excel_delete_range.d.ts.map +1 -0
- package/dist/tools/excel_delete_range.js +55 -0
- package/dist/tools/excel_delete_range.js.map +1 -0
- package/dist/tools/excel_delete_sheet.d.ts +2 -0
- package/dist/tools/excel_delete_sheet.d.ts.map +1 -0
- package/dist/tools/excel_delete_sheet.js +32 -0
- package/dist/tools/excel_delete_sheet.js.map +1 -0
- package/dist/tools/excel_format_range.d.ts +2 -0
- package/dist/tools/excel_format_range.d.ts.map +1 -0
- package/dist/tools/excel_format_range.js +157 -0
- package/dist/tools/excel_format_range.js.map +1 -0
- package/dist/tools/excel_get_metadata.d.ts +2 -0
- package/dist/tools/excel_get_metadata.d.ts.map +1 -0
- package/dist/tools/excel_get_metadata.js +71 -0
- package/dist/tools/excel_get_metadata.js.map +1 -0
- package/dist/tools/excel_insert_columns.d.ts +2 -0
- package/dist/tools/excel_insert_columns.d.ts.map +1 -0
- package/dist/tools/excel_insert_columns.js +44 -0
- package/dist/tools/excel_insert_columns.js.map +1 -0
- package/dist/tools/excel_insert_rows.d.ts +2 -0
- package/dist/tools/excel_insert_rows.d.ts.map +1 -0
- package/dist/tools/excel_insert_rows.js +39 -0
- package/dist/tools/excel_insert_rows.js.map +1 -0
- package/dist/tools/excel_read_sheet.d.ts +2 -0
- package/dist/tools/excel_read_sheet.d.ts.map +1 -0
- package/dist/tools/excel_read_sheet.js +147 -0
- package/dist/tools/excel_read_sheet.js.map +1 -0
- package/dist/tools/excel_rename_sheet.d.ts +2 -0
- package/dist/tools/excel_rename_sheet.d.ts.map +1 -0
- package/dist/tools/excel_rename_sheet.js +37 -0
- package/dist/tools/excel_rename_sheet.js.map +1 -0
- package/dist/tools/excel_set_data_validation.d.ts +2 -0
- package/dist/tools/excel_set_data_validation.d.ts.map +1 -0
- package/dist/tools/excel_set_data_validation.js +126 -0
- package/dist/tools/excel_set_data_validation.js.map +1 -0
- package/dist/tools/excel_set_dimensions.d.ts +2 -0
- package/dist/tools/excel_set_dimensions.d.ts.map +1 -0
- package/dist/tools/excel_set_dimensions.js +134 -0
- package/dist/tools/excel_set_dimensions.js.map +1 -0
- package/dist/tools/excel_set_sheet_visibility.d.ts +2 -0
- package/dist/tools/excel_set_sheet_visibility.d.ts.map +1 -0
- package/dist/tools/excel_set_sheet_visibility.js +39 -0
- package/dist/tools/excel_set_sheet_visibility.js.map +1 -0
- package/dist/tools/excel_unmerge_cells.d.ts +2 -0
- package/dist/tools/excel_unmerge_cells.d.ts.map +1 -0
- package/dist/tools/excel_unmerge_cells.js +42 -0
- package/dist/tools/excel_unmerge_cells.js.map +1 -0
- package/dist/tools/excel_write_range.d.ts +2 -0
- package/dist/tools/excel_write_range.d.ts.map +1 -0
- package/dist/tools/excel_write_range.js +156 -0
- package/dist/tools/excel_write_range.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAE3F,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,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,SAAS,kBAAkB,CACzB,QAA0B,EAC1B,MAAyB,EACzB,IAAY;IAEZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;YACvD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3B,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC9C,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,iDAAiD;IAC9D,WAAW,EAAE,oBAAoB;IACjC,YAAY,EAAE,0BAA0B;IACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;YAE5C,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,GAAG,CAAC,CAAC;YACvE,CAAC;YAED,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,IAAa;gBACtB,OAAO,EAAE,UAAU,WAAW,gBAAgB,WAAW,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,wBAAwB,GAAG,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|