xlsx-for-ai 2.16.0 → 2.18.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 (2) hide show
  1. package/mcp.js +38 -0
  2. package/package.json +1 -1
package/mcp.js CHANGED
@@ -564,6 +564,44 @@ const TOOLS = [
564
564
  },
565
565
  },
566
566
 
567
+ {
568
+ name: 'xlsx_form_controls',
569
+ description:
570
+ 'xlsx-for-ai — read, write, diff, redact, supervise .xlsx files locally.\n' +
571
+ 'This tool: list every form control (Check Box, Button, Drop-down, List Box, Option Button, Scroll Bar, Spinner, Label, Group Box) in a workbook with the linked cell, current value, dropdown source range, and min/max/step bounds where applicable.\n' +
572
+ 'No other tool gives this in a single call: ExcelJS doesn\'t expose form controls; pandas drops them entirely; openpyxl support is partial. xlsx_form_controls reads xl/ctrlProps/ctrlProp*.xml directly + maps to sheets via the rel chain.\n\n' +
573
+ 'USE WHEN: documenting a survey workbook, scoring rubric, dashboard, or forms-as-spreadsheets template where the interactive UI carries semantic meaning. Or auditing a workbook to find which cells human users can change via a control vs. by direct typing. ' +
574
+ 'Free tier — counts against the 10k/mo cap.\n\n' +
575
+ 'DO NOT USE WHEN: just reading values (use xlsx_read).',
576
+ inputSchema: {
577
+ type: 'object',
578
+ properties: {
579
+ file_path: { type: 'string', description: 'Absolute path to the .xlsx file.' },
580
+ sheet: { type: 'string', description: 'Optional: restrict to a specific sheet.' },
581
+ },
582
+ required: ['file_path'],
583
+ },
584
+ },
585
+
586
+ {
587
+ name: 'xlsx_macros',
588
+ description:
589
+ 'xlsx-for-ai — read, write, diff, redact, supervise .xlsx files locally.\n' +
590
+ 'This tool: inspect xlsm / xlsb workbooks for VBA macro presence, vbaProject.bin size, and likely module names (ThisWorkbook / Sheet<N> / Module<N> / Class<N> / UserForm<N> via heuristic UTF-16LE scan). Returns short safety advice for the LLM to relay to the user.\n' +
591
+ 'No other tool gives this in a single call: pandas drops macros entirely; openpyxl exposes the raw vbaProject.bin bytes but no usable inspection. xlsx_macros gives the security-audit metadata an agent (or human) needs to decide "should I trust this file?" before opening.\n\n' +
592
+ 'By DELIBERATE POLICY this tool does NOT extract or execute macro source code. Surfaces presence + module name candidates only.\n\n' +
593
+ 'USE WHEN: receiving a macro-enabled workbook from an unknown sender and you want to know what to expect before opening. Or auditing a workbook population for "do any of these contain macros?" without sampling each. ' +
594
+ 'Free tier — counts against the 10k/mo cap.\n\n' +
595
+ 'DO NOT USE WHEN: you need to actually inspect / debug VBA source — open the file in Excel (Alt+F11) on a trusted machine.',
596
+ inputSchema: {
597
+ type: 'object',
598
+ properties: {
599
+ file_path: { type: 'string', description: 'Absolute path to the .xlsx / .xlsm / .xlsb file.' },
600
+ },
601
+ required: ['file_path'],
602
+ },
603
+ },
604
+
567
605
  {
568
606
  name: 'xlsx_merged_cells',
569
607
  description:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "xlsx-for-ai",
3
3
  "mcpName": "io.github.senoff/xlsx-for-ai",
4
- "version": "2.16.0",
4
+ "version": "2.18.0",
5
5
  "description": "The MCP server that makes LLMs reliable on real-world Excel spreadsheets. Thin npm client over a hosted API — read, write, diff, redact, and supervise .xlsx files from any MCP-aware agent.",
6
6
  "main": "index.js",
7
7
  "bin": {