xlsx-for-ai 2.15.0 → 2.17.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_macros',
569
+ description:
570
+ 'xlsx-for-ai — read, write, diff, redact, supervise .xlsx files locally.\n' +
571
+ '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' +
572
+ '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' +
573
+ 'By DELIBERATE POLICY this tool does NOT extract or execute macro source code. Surfaces presence + module name candidates only.\n\n' +
574
+ '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. ' +
575
+ 'Free tier — counts against the 10k/mo cap.\n\n' +
576
+ 'DO NOT USE WHEN: you need to actually inspect / debug VBA source — open the file in Excel (Alt+F11) on a trusted machine.',
577
+ inputSchema: {
578
+ type: 'object',
579
+ properties: {
580
+ file_path: { type: 'string', description: 'Absolute path to the .xlsx / .xlsm / .xlsb file.' },
581
+ },
582
+ required: ['file_path'],
583
+ },
584
+ },
585
+
586
+ {
587
+ name: 'xlsx_merged_cells',
588
+ description:
589
+ 'xlsx-for-ai — read, write, diff, redact, supervise .xlsx files locally.\n' +
590
+ 'This tool: list every merged-cell region with master-cell value, range, span dimensions, and kind heuristic ("header" / "horizontal" / "vertical" / "block"). Pandas reads merged cells by dropping the relationship — it sees one value in the master cell and three blanks alongside. xlsx_merged_cells is the layout-aware view: "A1:D1 is ONE cell that says Q4 2024" rather than four cells where three are mysteriously empty.\n' +
591
+ 'No other tool surfaces merges with master values rolled in: pandas drops merge metadata; openpyxl exposes ranges but not the master value alongside.\n\n' +
592
+ 'USE WHEN: parsing report templates, dashboards, or form workbooks where merges encode visual hierarchy (section titles, sub-headers, banner rows). Or auditing a workbook for accidental merges that distort downstream pandas reads. ' +
593
+ 'Free tier — counts against the 10k/mo cap.\n\n' +
594
+ 'DO NOT USE WHEN: you only need cell values and don\'t care about visual structure (use xlsx_read).',
595
+ inputSchema: {
596
+ type: 'object',
597
+ properties: {
598
+ file_path: { type: 'string', description: 'Absolute path to the .xlsx file.' },
599
+ sheet: { type: 'string', description: 'Optional: restrict to a specific sheet.' },
600
+ },
601
+ required: ['file_path'],
602
+ },
603
+ },
604
+
567
605
  {
568
606
  name: 'xlsx_workbook_views',
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.15.0",
4
+ "version": "2.17.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": {