xlsx-for-ai 2.4.0 → 2.5.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 +29 -2
  2. package/package.json +1 -1
package/mcp.js CHANGED
@@ -544,6 +544,26 @@ const TOOLS = [
544
544
  required: ['file_path'],
545
545
  },
546
546
  },
547
+
548
+ {
549
+ name: 'xlsx_styles',
550
+ description:
551
+ 'xlsx-for-ai — read, write, diff, redact, supervise .xlsx files locally.\n' +
552
+ 'This tool: surface cell formatting (number formats, fonts, fills, alignment) so an agent knows what a cell LOOKS like, not just its raw value. Default mode: per-sheet rollup of top-N number formats / fonts / fills with counts. Detailed mode (opt-in, capped at 1000 cells): per-cell breakdown for narrow queries.\n' +
553
+ 'No other tool can do this with this fidelity: pandas drops styles on read entirely. The single most valuable slice is number formats — pandas hands an LLM "45292" and the cell rendered as "2024-01-01" because format was "yyyy-mm-dd". xlsx_styles is what makes that recoverable.\n\n' +
554
+ 'USE WHEN: an LLM is about to interpret raw numbers (date serials, currency, percents, scientific notation) and you want the format hint that tells it what those numbers MEAN to a human. Or auditing a dashboard\'s typography. Or fingerprinting a template. ' +
555
+ 'Free tier — counts against the 10k/mo cap.\n\n' +
556
+ 'DO NOT USE WHEN: you only need the data (use xlsx_read which already includes basic numFmt hints in the output).',
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
+ detailed: { type: 'boolean', description: 'If true, return per-cell breakdown (capped at 1000 cells). Default false (per-sheet rollup).' },
563
+ },
564
+ required: ['file_path'],
565
+ },
566
+ },
547
567
  ];
548
568
 
549
569
  // ---------------------------------------------------------------------------
@@ -757,10 +777,17 @@ async function dispatchTool(name, args) {
757
777
  });
758
778
  }
759
779
 
760
- // All other tools (list_sheets, schema) single-file relay
780
+ // All other tools (list_sheets, schema, hyperlinks, conditional_formats,
781
+ // styles, etc.) — single-file relay. Forward any common option keys the
782
+ // routes accept so we don't silently drop them. New keys added here as
783
+ // tools start accepting them; the server tolerates extras.
784
+ const opts = {};
785
+ if (args.sheet !== undefined) opts.sheet = args.sheet;
786
+ if (args.limit !== undefined) opts.limit = args.limit;
787
+ if (args.detailed !== undefined) opts.detailed = args.detailed;
761
788
  const body = {
762
789
  file_b64: fileToB64(args.file_path),
763
- options: { sheet: args.sheet },
790
+ options: opts,
764
791
  };
765
792
  return callTool(name, body);
766
793
  }
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.4.0",
4
+ "version": "2.5.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": {