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.
- package/mcp.js +29 -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
|
|
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:
|
|
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
|
+
"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": {
|