@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,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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|