xlsx-for-ai 2.5.0 → 2.7.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
@@ -545,6 +545,44 @@ const TOOLS = [
545
545
  },
546
546
  },
547
547
 
548
+ {
549
+ name: 'xlsx_comments',
550
+ description:
551
+ 'xlsx-for-ai — read, write, diff, redact, supervise .xlsx files locally.\n' +
552
+ 'This tool: list every cell comment in a workbook — both legacy notes (yellow stickies, cell.note) AND modern threaded comments (multi-author conversations stored separately in the OOXML zip). Per entry: kind, sheet, cell, author, text, plus any reply thread.\n' +
553
+ 'No other tool can do this: pandas drops both comment systems on read entirely; openpyxl reads only legacy notes (not threaded comments). xlsx_comments reads both, maps personId → display name via xl/persons/person.xml, and folds reply chains into each root comment.\n\n' +
554
+ 'USE WHEN: extracting reviewer feedback / approval threads from a spreadsheet (this is where humans hide intent). Or auditing a workbook for hidden context the values themselves don\'t carry. Or building a "show me everywhere finance flagged something" report. ' +
555
+ 'Free tier — counts against the 10k/mo cap.\n\n' +
556
+ 'DO NOT USE WHEN: just reading values (use xlsx_read). Or trying to ADD comments to a workbook (xlsx_write does not write comments).',
557
+ inputSchema: {
558
+ type: 'object',
559
+ properties: {
560
+ file_path: { type: 'string', description: 'Absolute path to the .xlsx file.' },
561
+ sheet: { type: 'string', description: 'Optional: restrict to a specific sheet.' },
562
+ },
563
+ required: ['file_path'],
564
+ },
565
+ },
566
+
567
+ {
568
+ name: 'xlsx_protection',
569
+ description:
570
+ 'xlsx-for-ai — read, write, diff, redact, supervise .xlsx files locally.\n' +
571
+ 'This tool: surface every protection setting in a workbook so an agent knows what it can and cannot edit. Workbook-level (lockStructure, lockWindows), per-sheet (protected? password? hidden state?), per-action allow/block list (formatCells, sort, insertRows, pivotTables, etc.), and per-cell unlocked / hidden samples — these are the cells a human would actually be allowed to type into when the sheet is otherwise read-only.\n' +
572
+ 'No other tool can do this: pandas drops protection metadata entirely; openpyxl exposes the bool but no normalization. xlsx_protection reads sheetProtection action attrs directly from the OOXML zip (workaround for ExcelJS stripping them on round-trip).\n\n' +
573
+ 'USE WHEN: an agent is about to suggest edits to a workbook and you want to fail fast on cells / sheets the user can\'t change anyway. Or auditing a "submitted form" workbook to see which inputs the form-author intended to be fillable. ' +
574
+ 'Free tier — counts against the 10k/mo cap.\n\n' +
575
+ 'DO NOT USE WHEN: just reading values (use xlsx_read). Or trying to BREAK protection (this tool surfaces what\'s locked; it does not unlock).',
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
+
548
586
  {
549
587
  name: 'xlsx_styles',
550
588
  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.5.0",
4
+ "version": "2.7.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": {