{"_id":"@autonomylab-xyz/excel-mcp-server-json","_rev":"4-eed3437ed22e3f7957ae5e3542d17ca3","name":"@autonomylab-xyz/excel-mcp-server-json","dist-tags":{"latest":"0.14.0"},"versions":{"0.12.0":{"name":"@autonomylab-xyz/excel-mcp-server-json","version":"0.12.0","author":{"name":"negokaz"},"license":"MIT","_id":"@autonomylab-xyz/excel-mcp-server-json@0.12.0","maintainers":[{"name":"autonomylab","email":"oli.autonomylab@gmail.com"}],"bin":{"excel-mcp-server":"dist/launcher.js"},"dist":{"shasum":"61ca45dba40e0b3ce2d067a8e308e4f003e6ca14","tarball":"https://registry.npmjs.org/@autonomylab-xyz/excel-mcp-server-json/-/excel-mcp-server-json-0.12.0.tgz","fileCount":30,"integrity":"sha512-WBgvyt5ZPgTWxGEqlGDrlqBe/mvF/UkosE7kc9rpl8PSC1lOzYoPy2Uj5HCyYKqgJz4Ajox9Moo6voJNOijkrQ==","signatures":[{"sig":"MEUCIBGWht+TQbyr7+EYrZjo/9NTJ8OS5APYEAYX7TFZFzY8AiEAxdooevLrppvkg+j5+5ev6OEW3Ej/jlDkLcNNOVVd/bc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106032945},"gitHead":"43629f0c7c7f52235b4eda85b5a988540dfd7470","scripts":{"build":"goreleaser build --snapshot --clean && tsc","debug":"npx @modelcontextprotocol/inspector dist/launcher.js","watch":"tsc --watch"},"_npmUser":{"name":"autonomylab","email":"oli.autonomylab@gmail.com"},"_npmVersion":"9.7.2","description":"An MCP server that reads and writes spreadsheet data to MS Excel file","directories":{},"_nodeVersion":"18.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.13.4"},"_npmOperationalInternal":{"tmp":"tmp/excel-mcp-server-json_0.12.0_1785855382588_0.07038143348889991","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@autonomylab-xyz/excel-mcp-server-json","version":"0.12.1","author":{"name":"negokaz"},"license":"MIT","_id":"@autonomylab-xyz/excel-mcp-server-json@0.12.1","maintainers":[{"name":"autonomylab","email":"oli.autonomylab@gmail.com"}],"bin":{"excel-mcp-server-json":"dist/launcher.js"},"dist":{"shasum":"52d9841d47f37798419c98ceb458ec16eec113a5","tarball":"https://registry.npmjs.org/@autonomylab-xyz/excel-mcp-server-json/-/excel-mcp-server-json-0.12.1.tgz","fileCount":30,"integrity":"sha512-g2QG2XPIGVEZQhg2i5jukpAOZ+SaXLJVtEsfkgVkHS18NpI7m8wOisAl54sDtIUTV90BiLiuL+18rLiGUCmjAg==","signatures":[{"sig":"MEQCIGv2dPPLF8JJ5QBcCwOCxXS8Z9z5CD9ry70BmWOD4bkYAiA7be/0op/XteAFGzyXNSvaUJ2spgRlXaUAuFbhXTPBaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106033040},"gitHead":"43629f0c7c7f52235b4eda85b5a988540dfd7470","scripts":{"build":"goreleaser build --snapshot --clean && tsc","debug":"npx @modelcontextprotocol/inspector dist/launcher.js","watch":"tsc --watch"},"_npmUser":{"name":"autonomylab","email":"oli.autonomylab@gmail.com"},"_npmVersion":"9.7.2","description":"An MCP server that reads and writes spreadsheet data to MS Excel file","directories":{},"_nodeVersion":"18.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.13.4"},"_npmOperationalInternal":{"tmp":"tmp/excel-mcp-server-json_0.12.1_1785855835143_0.9159910597581875","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@autonomylab-xyz/excel-mcp-server-json","version":"0.13.0","author":{"name":"negokaz"},"license":"MIT","_id":"@autonomylab-xyz/excel-mcp-server-json@0.13.0","maintainers":[{"name":"autonomylab","email":"oli.autonomylab@gmail.com"}],"bin":{"excel-mcp-server-json":"dist/launcher.js"},"dist":{"shasum":"d984ed63260d5920ee631e54cbecfd81e5f1fa15","tarball":"https://registry.npmjs.org/@autonomylab-xyz/excel-mcp-server-json/-/excel-mcp-server-json-0.13.0.tgz","fileCount":30,"integrity":"sha512-q2JBF5DtMQR+Nyx0eLYFP/KY5eq+zPQAPFIZaCfNmrOdwC0yOwSQkFgU4QsdBfOXtu+ndYDnCYnoNqppx/lvfA==","signatures":[{"sig":"MEUCIFkT8uIfeorgORQSU4Wwe/jGrTBCK73jJquKkOzirOhuAiEAhIpRPpJDXTanF99lyHFVoH4TOtEVw18FRHOGIkKbLzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106106810},"gitHead":"697c3811ae90a2b6a000e5c79db63d1252ed739e","scripts":{"build":"goreleaser build --snapshot --clean && tsc","debug":"npx @modelcontextprotocol/inspector dist/launcher.js","watch":"tsc --watch"},"_npmUser":{"name":"autonomylab","email":"oli.autonomylab@gmail.com"},"_npmVersion":"9.7.2","description":"An MCP server that reads and writes spreadsheet data to MS Excel file","directories":{},"_nodeVersion":"18.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.13.4"},"_npmOperationalInternal":{"tmp":"tmp/excel-mcp-server-json_0.13.0_1785858029838_0.5585285510945264","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@autonomylab-xyz/excel-mcp-server-json","version":"0.14.0","description":"An MCP server that reads and writes spreadsheet data to MS Excel file","author":{"name":"negokaz"},"license":"MIT","bin":{"excel-mcp-server-json":"dist/launcher.js"},"scripts":{"build":"goreleaser build --snapshot --clean && tsc","watch":"tsc --watch","debug":"npx @modelcontextprotocol/inspector dist/launcher.js"},"devDependencies":{"@types/node":"^22.13.4","typescript":"^5.7.3"},"publishConfig":{"access":"public"},"_id":"@autonomylab-xyz/excel-mcp-server-json@0.14.0","gitHead":"4eed192ec41d5a83fbb6cdd33f11e2660892be13","_nodeVersion":"22.7.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-+TbhElooXqBswax2Q7R9ecGMqfeTcjGuIqXVCgpm66x0VSISbl+V9zQa5Ys01+61dn+lTelVwxgmifFc1c25xg==","shasum":"64f757772191a6118d9c68300c4b8594fb3cec27","tarball":"https://registry.npmjs.org/@autonomylab-xyz/excel-mcp-server-json/-/excel-mcp-server-json-0.14.0.tgz","fileCount":31,"unpackedSize":106717484,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDb3JZMZ+UjP7nQNLxEO6FcucLNfVy0KwdnXEQU7UyPpAIhAKDR2/NWOMYz+dl1ExRvxIc+nJkixREHs0BtojqWZJVk"}]},"_npmUser":{"name":"autonomylab","email":"oli.autonomylab@gmail.com"},"directories":{},"maintainers":[{"name":"autonomylab","email":"oli.autonomylab@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/excel-mcp-server-json_0.14.0_1785932543109_0.6439399889791091"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-04T14:56:22.313Z","modified":"2026-08-05T12:22:23.920Z","0.12.0":"2026-08-04T14:56:23.244Z","0.12.1":"2026-08-04T15:03:55.772Z","0.13.0":"2026-08-04T15:40:30.439Z","0.14.0":"2026-08-05T12:22:23.729Z"},"author":{"name":"negokaz"},"license":"MIT","description":"An MCP server that reads and writes spreadsheet data to MS Excel file","maintainers":[{"name":"autonomylab","email":"oli.autonomylab@gmail.com"}],"readme":"# Excel MCP Server\r\n\r\n<img src=\"https://github.com/autonomylab-xyz/excel-mcp-server-json/blob/main/docs/img/icon-800.png?raw=true\" width=\"128\">\r\n\r\nA Model Context Protocol (MCP) server that reads and writes MS Excel data.\r\n\r\n## Features\r\n\r\n- Read/Write text values\r\n- Read/Write formulas\r\n- Create new sheets\r\n\r\n**🪟Windows only:**\r\n- Live editing\r\n- Capture screen image from a sheet\r\n\r\nFor more details, see the [tools](#tools) section.\r\n\r\n## Requirements\r\n\r\n- Node.js 20.x or later\r\n\r\n## Supported file formats\r\n\r\n- xlsx (Excel book)\r\n- xlsm (Excel macro-enabled book)\r\n- xltx (Excel template)\r\n- xltm (Excel macro-enabled template)\r\n\r\n## Installation\r\n\r\n### Installing via NPM\r\n\r\nexcel-mcp-server is automatically installed by adding the following configuration to the MCP servers configuration.\r\n\r\nFor Windows:\r\n```json\r\n{\r\n    \"mcpServers\": {\r\n        \"excel\": {\r\n            \"command\": \"cmd\",\r\n            \"args\": [\"/c\", \"npx\", \"--yes\", \"@autonomylab-xyz/excel-mcp-server-json\"],\r\n            \"env\": {\r\n                \"EXCEL_MCP_PAGING_CELLS_LIMIT\": \"4000\"\r\n            }\r\n        }\r\n    }\r\n}\r\n```\r\n\r\nFor other platforms:\r\n```json\r\n{\r\n    \"mcpServers\": {\r\n        \"excel\": {\r\n            \"command\": \"npx\",\r\n            \"args\": [\"--yes\", \"@autonomylab-xyz/excel-mcp-server-json\"],\r\n            \"env\": {\r\n                \"EXCEL_MCP_PAGING_CELLS_LIMIT\": \"4000\"\r\n            }\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n<h2 id=\"tools\">Tools</h2>\r\n\r\n### `excel_describe_sheets`\r\n\r\nList all sheet information of specified Excel file.\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n\r\n### `excel_read_sheet`\r\n\r\nRead values from Excel sheet with pagination.\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `sheetName`\r\n    - Sheet name in the Excel file\r\n- `range`\r\n    - Range of cells to read in the Excel sheet (e.g., \"A1:C10\"). [default: first paging range]\r\n- `showFormula`\r\n    - Show formula instead of value [default: false]\r\n- `showStyle`\r\n    - Show style information for cells [default: false]\r\n- `format`\r\n    - Output format: `\"html\"` (default), `\"json\"`, or `\"json-object\"`\r\n    - `\"json-object\"` returns the range as an array of row objects keyed by column header. Sheet row 1 is always the header row, regardless of the requested `range` or which paging range you're on — rows are returned with blank cells included and a `_row` field for the sheet row number, plus a top-level `headers` object of header name to column letter (both preserve sheet column order). A blank header falls back to its column letter. Formula cells (including formula headers) are always reported as blank and are never evaluated, to avoid failures from formulas referencing other workbooks. Not compatible with `showStyle: true` or `showFormula: true`.\r\n\r\n### `excel_query_rows`\r\n\r\nFind rows in an Excel sheet by header-keyed filters, treating sheet row 1 as the header/schema row (independent of any range). Returns matches in the same row-object shape as `excel_read_sheet`'s `format: \"json-object\"`. Only ever returns/evaluates values — no formulas, no styles.\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `sheetName`\r\n    - Sheet name in the Excel file\r\n- `filters` (optional)\r\n    - Header name → array of match patterns (`*` = any run of characters, `?` = exactly one character). Patterns within one header are OR'd; different headers are AND'd. Omit, or pass `{}`, to match every data row.\r\n- `columns` (optional)\r\n    - Projection: only these header names are included in each returned row (plus `_row`, always included) and in the `headers` object. Omit to return every column. A header can still be filtered on via `filters` even when it isn't listed here — projection only affects what's returned.\r\n- `startRow` (optional)\r\n    - Sheet row to resume scanning from. [default: 2, the first row after the header]\r\n- `maxRows` (optional)\r\n    - Cap on rows returned in this call. [default: derived from `EXCEL_MCP_PAGING_CELLS_LIMIT`]\r\n\r\nResponse includes `headers` (header name → column letter), `rows` (each with `_row` plus one field per column), `matchedCount`, `scannedThroughRow`, and `nextStartRow` (present only when there's more sheet left to scan — re-call with `startRow: nextStartRow` to continue).\r\n\r\n### `excel_update_rows`\r\n\r\nUpdate specific columns on specific rows, found by header-keyed filters (sheet row 1 is always the header/schema row). This is an optimistic-concurrency write: the filter must match exactly `expectedMatchCount` rows, and every targeted cell on every matched row must currently equal its stated `previousValue`, or **nothing is written at all**.\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `sheetName`\r\n    - Sheet name in the Excel file\r\n- `filters` (optional)\r\n    - Same shape/semantics as `excel_query_rows`. May be omitted or `{}` to target every data row — `expectedMatchCount` is what keeps that safe, not this field.\r\n- `expectedMatchCount`\r\n    - The filter must match exactly this many rows or nothing is written. Guards against duplicate-row surprises and accidental bulk edits; on mismatch, the error reports how many rows (and which ones, up to 50) actually matched.\r\n- `changes`\r\n    - Header name → `{ previousValue, value }`, applied identically to every matched row. Only list the headers actually being modified — unlisted columns are left untouched. `previousValue` may be `null`/omitted to mean \"the cell must currently be blank\". `value` must not look like a formula (`=`-prefixed); table-mode writes never create formulas.\r\n\r\nIf any targeted cell currently holds a formula, or any `previousValue` doesn't match the cell's live value, the call fails with a JSON error body listing every mismatch/formula-target found across every matched row — verification runs for all matched rows before anything is written, so a partial match never produces a partial write. On success, the response includes `headers`, `updatedRows` (post-write values), and `updatedCount`.\r\n\r\n### `excel_screen_capture`\r\n\r\n**[Windows only]** Take a screenshot of the Excel sheet with pagination.\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `sheetName`\r\n    - Sheet name in the Excel file\r\n- `range`\r\n    - Range of cells to read in the Excel sheet (e.g., \"A1:C10\"). [default: first paging range]\r\n\r\n### `excel_write_to_sheet`\r\n\r\nWrite values to the Excel sheet.\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `sheetName`\r\n    - Sheet name in the Excel file\r\n- `newSheet`\r\n    - Create a new sheet if true, otherwise write to the existing sheet\r\n- `range`\r\n    - Range of cells to read in the Excel sheet (e.g., \"A1:C10\").\r\n- `values`\r\n    - Values to write to the Excel sheet. If the value is a formula, it should start with \"=\"\r\n\r\n### `excel_create_table`\r\n\r\nCreate a table in the Excel sheet\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `sheetName`\r\n    - Sheet name where the table is created\r\n- `range`\r\n    - Range to be a table (e.g., \"A1:C10\")\r\n- `tableName`\r\n    - Table name to be created\r\n\r\n### `excel_copy_sheet`\r\n\r\nCopy existing sheet to a new sheet\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `srcSheetName`\r\n    - Source sheet name in the Excel file\r\n- `dstSheetName`\r\n    - Sheet name to be copied\r\n\r\n### `excel_format_range`\r\n\r\nFormat cells in the Excel sheet with style information\r\n\r\n**Arguments:**\r\n- `fileAbsolutePath`\r\n    - Absolute path to the Excel file\r\n- `sheetName`\r\n    - Sheet name in the Excel file\r\n- `range`\r\n    - Range of cells in the Excel sheet (e.g., \"A1:C3\")\r\n- `styles`\r\n    - 2D array of style objects for each cell. If a cell does not change style, use null. The number of items of the array must match the range size.\r\n    - Style object properties:\r\n        - `border`: Array of border styles (type, color, style)\r\n        - `font`: Font styling (bold, italic, underline, size, strike, color, vertAlign)\r\n        - `fill`: Fill/background styling (type, pattern, color, shading)\r\n        - `numFmt`: Custom number format string\r\n        - `decimalPlaces`: Number of decimal places (0-30)\r\n\r\n<h2 id=\"configuration\">Configuration</h2>\r\n\r\nYou can change the MCP Server behaviors by the following environment variables:\r\n\r\n### `EXCEL_MCP_PAGING_CELLS_LIMIT`\r\n\r\nThe maximum number of cells to read in a single paging operation.  \r\n[default: 4000]\r\n\r\n## License\r\n\r\nCopyright (c) 2025 Kazuki Negoro\r\n\r\nexcel-mcp-server is released under the [MIT License](LICENSE)","readmeFilename":"README.md"}