Changelog¶
All notable changes to ExcelMcp will be documented in this file.
This changelog covers all components:
- MCP Server - Model Context Protocol server for AI assistants
- CLI - Command-line interface for scripting and coding agents
- VS Code Extension - One-click installation with bundled MCP Server
- MCPB - Claude Desktop bundle for one-click installation
Entries are short and end-user-facing. Format follows Keep a Changelog; this project uses Semantic Versioning. Starting with this file, entries are compiled automatically from changesets at release time — see Release Strategy for how to add one.
[2.5.3] - 2026-10-23¶
Patch Changes¶
- #1233
ed138e3Thanks @sbroenne! - Stopping the service no longer fails or gets stuck. Exiting the CLI tray after you closed a workbook in Excel no longer shows an error.excelcli service stop, the tray's Exit, and MCP Server shutdown now always stop the service. Saved workbooks are closed, and unsaved ones stay open and visible without saving. If a workbook is busy, waiting for a prompt, or does not answer the shutdown request within the shutdown wait (at most 30 seconds), that Excel copy is left exactly as it is, made visible, and reported by process number:service stopreturns it asshutdownWarning, the tray shows it, and the MCP Server writes it to its log. Nothing is saved, discarded, or force-stopped. Saving a workbook that was closed in Excel now fails with a clear message instead of an unclear Excel error.
[2.5.2] - 2026-10-23¶
Patch Changes¶
- #1232
023b779Thanks @sbroenne! - CLI service status and stop now report Excel copies left by an earlier service without closing them, and those copies no longer block startup. Session status avoids waiting for workbook-location bookkeeping and includes the current operation's start time. Error-cell scans use whole-range checks instead of slow cell-by-cell checks when Excel reports no matching cells.
[2.5.1] - 2026-10-23¶
Minor Changes¶
- #1226
ec6d5efThanks @sbroenne! - Opening workbooks now preserves Excel AutoSave and reports its status. Use the new workbookset-auto-saveaction in MCP or excelcli to change it explicitly; enabling it can save pending edits.
Stopping ExcelMcp no longer saves pending edits automatically. Saved workbooks it opened close, while unsaved ones stay open and visible for you to review. Attached workbooks remain untouched. Save and close explicitly when a completed job should leave no workbook open.
Patch Changes¶
-
#1217
b9de64eThanks @sbroenne! - Add actions to find and attach to workbooks already open in Excel without reopening them. Discovery includes workbooks in Excel processes already managed by this host and identifies workbooks with existing sessions. Newly attached workbooks keep their AutoSave setting, report it to the user, and remain open when the service shuts down. Shutdown closes only workbooks ExcelMcp opened; it leaves Excel running when other workbooks remain and never automatically terminates Excel when the host exits. -
#1223
f99b5f8Thanks @sbroenne! - The excelcli banner now says "Automate Microsoft Excel from the command line" instead of naming an internal component. -
#1221
b56d370Thanks @sbroenne! - Range search options are optional. CLI users can request help for a single action, and range-format and filter guidance now clarifies input formats. -
#1221
b56d370Thanks @sbroenne! - PivotTable creation from ranges and the Data Model waits up to five minutes for Excel; a timeout does not cancel Excel work or roll back workbook changes. Duplicate names on the destination sheet are reported before creation. DAX evaluation includes engine details when Excel provides them, and measure listings explain where measures are stored. -
#1216
4a223c3Thanks @sbroenne! - Keep batch commands that do not use an existing workbook session independent of that workbook. Opening or creating another workbook no longer blocks, or is blocked by, work on the batch's current workbook. -
#1215
a9718a9Thanks @sbroenne! - Keep the CLI service available when requests pile up behind a busy workbook. Repeated requests to the same busy session are rejected promptly, while health checks and work on other sessions remain available. The service no longer shuts down automatically when idle; useservice stopto stop it. -
#1214
0b1688aThanks @sbroenne! - Creating, updating, and deleting Data Model relationships now releases temporary Excel objects even when inspection fails. Threaded-comment operations also release the selected cell if validation fails. These fixes reduce the risk of Excel remaining open after a workbook is closed.
[2.5.0] - 2026-10-19¶
Minor Changes¶
-
#1188
2f584fcThanks @sbroenne! - Slicer connections can now include Data Model PivotTables with separate caches when they use the same workbook Data Model connection. Regular PivotTables still need to share a PivotCache. -
#1192
70c4dedThanks @sbroenne! - Power Query loads and refreshes now return elapsed time and verified worksheet/model row counts, with clearer guidance for unsupported authentication and Analysis Services cultures. Confirmed blocking dialogs automatically show Excel and include readable dialog text in session status and timeout errors; dialog types are not identified and dialogs are not answered. Standalone window show/hide uses the same responsive visibility control. -
#1155
3633718Thanks @sbroenne! - Expose the workbook-level Power Query privacy setting through CLI and MCP, and include guidance for recovering from Formula.Firewall errors.
Patch Changes¶
-
#1178
6d47af1Thanks @sbroenne! - The GitHub release now includes native ARM64 standalone ZIP downloads for both the MCP Server and CLI. -
#1174
5bad8d7Thanks @sbroenne! - PivotTable filters now work on OLAP/Data Model row and column fields, including caption, value, and top/bottom filters. Date filters are also supported when Excel and the provider recognize the source date level. Value filters and sorting accept either the displayed measure caption or its[Measures]name. Filter commands accept placed hierarchy and level names, including the level names returned by filter reads. Semantic snapshots report member-property filter criteria as unavailable instead of claiming complete filter state. -
#1186
4fb6d8cThanks @sbroenne! - Add general settings actions to inspect and explicitly change the current Windows user's global native-query approval requirement. -
#1198
f5a1c03Thanks @sbroenne! - Improve Excel cleanup after reading Data Model tables or creating or updating measures, including failed changes. Read-only workbook checks no longer try to save during shutdown; after Save As creates a writable workbook, later edits are saved normally. Excel has more time to finish closing naturally.
excelcli service stop now waits for the shutdown reply until cancelled instead of giving up after one minute. Excel's own save and shutdown time limits still apply.
-
#1187
c73c877Thanks @sbroenne! - Session listings now identify a pending native database query approval and explain that the refresh remains pending until the user responds in Excel. -
#1158
9b6e5bbThanks @sbroenne! - Clarify that Excel's global privacy option may override the workbook's Power Query privacy setting. -
#1170
4540f1cThanks @sbroenne! - Correct Data Model column-type labels indatamodel list-columnsanddatamodel read-tablefor both the CLI and MCP. Numeric columns are no longer mislabeled as small integers, and text, date, and Boolean columns receive accurate labels. Values and loading behavior are unchanged. -
#1191
b7086a1Thanks @sbroenne! - External OLAP member searches now pass the provider's level count through astotalCountand no longer return a calculatedomittedCount, which could be wrong when the provider's count is approximate. Use the continuation token to know whether more members remain, in both MCP and the CLI. -
#1175
5bdaa75Thanks @sbroenne! -pivottablefield set-field-formatnow applies numeric and custom currency formats correctly on non-US locales without changing the shared Data Model measure. It returns the selected value field's displayed text, including in PivotTables with multiple measures. OLAP measures can also be selected by their exact caption. -
#1160
555fa32Thanks @sbroenne! - Keep usage reporting off the critical path for CLI commands and MCP startup, requests, and shutdown. The existing CLI background service sends operation telemetry after short-lived clients exit, without client-side setup or exit waits. CLI reports measure service execution; commands that never reach the service are not reported. Pending reports may still be lost when the service or MCP Server exits. -
#1190
582354bThanks @sbroenne! - Keep Excel workbooks and unsaved changes open when a wait expires or the caller cancels. Reveal the affected Excel window when possible, report pending work and late outcomes, and allow the same session to be reused once Excel is ready. Add save-in-place through CLIsession saveand MCPfileactionsave, and give data loads and model refreshes a 30-minute default wait. -
#1177
70eadd1Thanks @sbroenne! - Report unexpected Excel errors during optional property reads instead of silently returning missing data. Failed results now remain failures even if success was set earlier, consistently through the MCP Server andexcelcli. -
#1161
75b1fe2Thanks @sbroenne! -excelcli service statusandexcelcli session listnow report a stopped service promptly instead of waiting two seconds, while continuing to wait for a service that is starting. -
#1199
b97d57cThanks @sbroenne! - Window arrangement now verifies the requested layout and reports whether Windows brought Excel to the foreground. A focus refusal no longer turns a successful placement into an error. -
#1177
70eadd1Thanks @sbroenne! - Document-property reads now report unreadable built-in values throughvalueAvailableandvalueErrorinstead of failing the entire listing. Property names, types, and scopes remain available, and a failed value read is not mistaken for proof that the value is undefined. Other unexpected native failures still fail the command. -
#1188
2f584fcThanks @sbroenne! - When an Excel operation times out with a confirmed blocking dialog, report that Excel was waiting for input and include its readable title and message labels automatically for troubleshooting. Unavailable or partial text is marked; input values are not read and the dialog is not answered. Timeout recovery retains the session and unsaved workbook without saving, closing, or rolling back the operation. -
#1177
70eadd1Thanks @sbroenne! - The VS Code extension, CLI plugin PowerShell wrapper, and repository scripts now require PowerShell 7.4 or later instead of Windows PowerShell 5.1. The extension explains how to install or upgrade PowerShell when needed, and the CLI wrapper preserves quoted JSON and other arguments using native argument handling. -
#1180
4d0de2bThanks @sbroenne! - Add Power Query tracing controls, trace-file summaries, and refresh trace output for Excel CLI and MCP.
[2.4.1] - 2026-10-13¶
Patch Changes¶
-
#1149
ff09f92Thanks @sbroenne! - Prevent CLI and MCP duration telemetry from sending the computer name. Metrics now use the same pseudonymous instance label as other usage records. -
#1144
1cab4b2Thanks @sbroenne! - ExcelMcp now stores a random telemetry ID shared by the CLI and MCP Server. When Azure telemetry is active at first use, a one-time migration event helps preserve weekly usage counts. Delete%LOCALAPPDATA%\ExcelMcp\telemetry-user-idand restart the MCP Server to reset the ID. -
#1148
e9f6919Thanks @sbroenne! - Power Query creation and updates now identify privacy-blocked failures correctly and explain which query changes remain in the workbook. MCP and CLI errors also include the inspected query and load state, so callers can recover without accidentally repeating creation or assuming failed updates were undone.
[2.4.0] - 2026-10-13¶
Minor Changes¶
-
#1130
9f1b2e2Thanks @sbroenne! -pivottable readnow includes a bounded snapshot of selected members, field filters, and value settings. OLAP hierarchies report their displayed caption and the selected members from every level. The result clearly marks unavailable or truncated details and can target a specific worksheet when PivotTable names repeat. -
#1143
90db1a4Thanks @sbroenne! - Power Query refresh-all now refreshes dependent PivotTables by default, with a query-only option. Added workbook-level refresh-all for all connections and PivotTables. -
#1145
809a322Thanks @sbroenne! - Create new worksheet-source PivotTables using an existing report's cache with paired sharing options in the CLI and MCP. Reports with the same source can then connect to one slicer and share calculated fields;readandlistexpose their native workbook-localcacheIndex. The PivotTable walkthrough now includes a complete shared-slicer example and clarifies calculation and refresh limitations.
Patch Changes¶
- #1138
d933345Thanks @sbroenne! - Fix PivotTable reads and report-filter results incorrectly treating an OLAP All member named[AllMember]as a single selected member. Both MCP and CLI now identify single-selection All state from the hierarchy metadata exposed by Excel, regardless of the server's member naming.
[2.3.12] - 2026-10-12¶
Minor Changes¶
- #1131
6fcdae6Thanks @sbroenne! - Inspect hidden workbook information using Excel's available Document Inspector checks through MCP orexcelcli. Explicitly remove findings from one selected category, with clear warnings about category-wide deletion and incomplete inspection coverage.
Patch Changes¶
- #1128
fb80f83Thanks @copilot-swe-agent! - Report a failure when adding a PivotTable value field leaves the summary blocked with#SPILL!, instead of reporting success. PivotTable read and list results now expose the layout problem. Field changes remain available for inspection and are not automatically undone.
[2.3.11] - 2026-10-12¶
Major Changes¶
- #1122
2ee7f73Thanks @sbroenne! - Consistent error output: MCP andexcelclifailure replies now use onlyerrorMessagefor the error text. Update consumers that read the removederrorfield.
Patch Changes¶
-
#1126
eebcd9eThanks @sbroenne! - GitHub releases no longer include a separate Agent Skills ZIP. Report-formatting guidance remains available through the Excel MCP and CLI plugins and the VS Code extension. -
#1127
d4d7fdbThanks @sbroenne! - OLAP report filters now preserve their selection mode for single-member changes, report requested and actual filter state separately, and support a bounded read-only state check. External schema discovery now explains how to prepare Excel's active connection session and when the provider cannot support discovery.
[2.3.10] - 2026-10-12¶
Minor Changes¶
-
#1106
22438fdThanks @sbroenne! - Add PivotTable sorting by a selected Values field, visibility of items with no data, custom blank and error text, selectable subtotal functions, calculated items, and additional layout and printing controls. Both MCP andexcelcliexpose the same controls, with explicit limits for OLAP and Data Model reports. -
#1105
2a07f13Thanks @sbroenne! - External OLAP connections can now list dimensions, hierarchies, levels, and bounded member searches using Excel's existing connection session.
Member searches page in provider unique-name order over a bounded list of up to 10,000 entries. Larger levels fail explicitly instead of scanning without a limit. Paging tokens keep fixed-size fingerprints of the search settings and member list, so long search text does not produce an unusable token and a changed list cannot silently skip or repeat entries.
Patch Changes¶
-
#1115
13c0371Thanks @sbroenne! - Fix MCP tool calls from Claude Code in Claude Desktop being rejected. The MCP Server now ignores inputs that do not apply to the chosen action when they are empty or set to their advertised default. Real values sent to the wrong action are still rejected with a message naming the input. -
#1104
0950171Thanks @sbroenne! - VBA listing now shows procedure kinds and line ranges, and bounded reads can return one procedure or up to 500 lines at a time. A new guarded procedure replacement action edits only the selected procedure when its source has not changed since it was read.
Procedure replacement preserves surrounding comments and blank lines. New read-only actions search VBA source with limited results, flag missing library references, and report project access, password protection, and execution mode without changing Excel settings.
-
#1091
d15b720Thanks @beresfordsalmon! -excelclino longer pauses while telemetry starts and stops:--help,--versionand the background service skip telemetry setup, and the telemetry library's own health reports, delivery counters and Live Metrics connection are turned off. Usage telemetry is unchanged. -
#1112
b2e03e0Thanks @sbroenne! - Fix adding existing external cube measures to PivotTables, including measure names containing dots or escaped closing brackets. Explain which field changes must be made on the cube server rather than in the workbook Data Model.
Return actual OLAP field captions and positions, and apply automatic subtotals using hierarchy names. Preserve compound DAX formulas when changing an aggregation instead of silently replacing their calculation.
Report completed and uncertain hierarchy levels when a subtotal update fails, without claiming that partial changes were rolled back.
-
#1110
5905840Thanks @sbroenne! - Fix incorrectly cropped range and sheet screenshots on scaled Windows displays, without changing the application's display settings. Canceled captures remain reported as canceled even if restoring display settings also fails, with both errors retained. -
#1113
55aecaaThanks @sbroenne! - Both the CLI and MCP Server now support turning telemetry off or viewing approved operation telemetry in a local OpenTelemetry dashboard without Azure access. Contributor builds remain off by default, and released packages keep their existing Azure destination unless explicitly overridden. -
#1112
b2e03e0Thanks @sbroenne! - Calculated-member creation no longer diagnoses generic Excel or provider failures as formula syntax errors. Errors preserve the underlying Excel exception and direct callers to inspect calculated members before retrying; unknown member types are rejected before changing the workbook.
Calculated-member guidance preserves qualified measure names and no longer suggests adding members or sets to Values. PivotChart creation failures retain the created chart, its identity, and the underlying failure instead of deleting it or claiming rollback; PivotChart title reads release the acquired title reference.
OLAP Show Values As readback mismatches now report verification failure rather than claiming Excel ignored the write. Recovery guidance warns that displayed values may already have changed and directs callers to inspect the data; no automatic rollback is performed.
-
#1106
22438fdThanks @sbroenne! - OLAP and Data Model PivotTable report filters (#1096): select one or multiple members, or clear the selection to show all, on a specific PivotTable. -
#1103
5f8521cThanks @sbroenne! - MCP calls now check action-specific required inputs consistently before execution and report incompatible parameters using the tool's advertised names. Tool contract checks cover generated and specialized tools to prevent definitions from drifting from the running server.
[2.3.9] - 2026-10-09¶
Minor Changes¶
- #1088
de1f950Thanks @sbroenne! - Inspect the workbook connection of a PivotTable and request a native connection change for one external PivotTable through both the CLI and MCP. Select the worksheet and PivotTable name to avoid changing a similarly named table on another sheet. The operation keeps the existing PivotTable and leaves connection deletion and refresh as separate steps. Excel and the provider determine whether an OLAP connection change is supported.
Patch Changes¶
- #1086
3803d7bThanks @sbroenne! - Allow more time for published packages to become available before updating the MCP Registry listing.
[2.3.8] - 2026-10-08¶
Minor Changes¶
-
#1083
47f8cc9Thanks @sbroenne! - Inspect sign-in settings, set selected account-hint and sign-in modes, or remove a selected Power BI/Analysis Services connection's saved account hint through MCP or CLI. Account and secret values are not returned. Passwords, tokens, server impersonation, and unspecified settings are preserved; the actions do not clear shared credentials, sign in or out, refresh, or save automatically. -
#1083
47f8cc9Thanks @sbroenne! - Open existing SharePoint and OneDrive for Business workbooks directly from their HTTPS file URLs in MCP and excelcli, without syncing or downloading a separate copy first. Visible Excel handles sign-in and editing permissions; cloud AutoSave is disabled so explicit save and discard behavior stays consistent with local workbooks.
Workbook information now reports the live AutoSave status through autoSaveOn. Older Excel versions without AutoSave report it as disabled and can still open cloud workbooks; unexpected AutoSave access errors remain failures.
Patch Changes¶
-
#1083
47f8cc9Thanks @sbroenne! - Prevent simultaneous shutdown requests from stopping the service while a busy workbook is retained for recovery. -
#1083
47f8cc9Thanks @sbroenne! - MCP and CLI session listings now distinguish an open Excel dialog from a busy query and explain when to check Excel for a prompt. Detection works without calling Excel, includes dialogs hosted in another process, and never reads credentials or responds to prompts. Save and close remain blocked until Excel is ready. -
#1083
47f8cc9Thanks @sbroenne! - Retain the workbook and service when Excel rejects the final shutdown save as busy, preserving the original COM error for inspection and retry. Remove sessions whose Excel process has exited from the daemon's idle count so abandoned sessions do not prevent idle shutdown. -
#1083
47f8cc9Thanks @sbroenne! - Keep the workbook and session usable when a refresh starts between the initial readiness check and closing. Retry closing after the refresh completes; any save already completed before the refusal remains saved. -
#1083
47f8cc9Thanks @sbroenne! - Fix Power BI/MSOLAP connection inspection and refresh when Excel does not expose background-query settings. Save, Save As, and close now check Excel's live refresh state, keep unfinished work open, and report busy errors without incorrectly blaming a file lock.
Require confirmed Excel process ownership during startup, retrying temporary identity-capture failures and rejecting startup before opening or creating a workbook if ownership cannot be confirmed.
Allow a started readiness inspection to finish within the session operation timeout, so an idle large workbook is not permanently blocked from saving or closing by the short queue deadline.
Refuse service shutdown when readiness blocks saving, retaining the workbook and service for recovery instead of disposing unsaved edits. Product CLI stop respects refusal and pending-request timeouts rather than force-stopping the owned processes.
- #1083
47f8cc9Thanks @sbroenne! - Reject browser pages and text responses masquerading as Excel workbooks instead of reporting a successful open. Unsupported SharePoint links now explain how to obtain a direct workbook address or use an existing local workbook.
[2.3.7] - 2026-10-08¶
Patch Changes¶
- #1081
872a568Thanks @sbroenne! - Formula blocks can mix in numbers, true/false, and blanks (#1072):range set-formulasandrange validate-formulasnow accept JSON numbers,true/false, andnull(an empty cell) next to formulas and text, both inline informulasand in aformulasFile. Numbers keep their exact value in any Excel language, andvalidate-formulastreats these constants as valid instead of reporting them as errors.
[2.3.6] - 2026-10-07¶
Patch Changes¶
-
#1078
c38fdacThanks @sbroenne! - Clarify the Excel MCP and CLI plugin and npm package descriptions so users can tell which integration fits their workflow and see the desktop Excel requirement. -
#1080
7374c25Thanks @sbroenne! -set-valuesno longer blanks other cells when one value starts with=(#1065). Writing a mix of numbers, text, dates, and formulas now keeps every value: only the cells starting with=become formulas. Before, every other cell in the range was silently cleared while the command reported success.
get-formulas no longer reports text that starts with = as a formula. Cells holding text such as '=abc now return an empty formula and their text as the value. The set-values result message now reads Wrote N formula(s); other cells kept as values when formulas are written.
[2.3.5] - 2026-10-07¶
Patch Changes¶
- #1076
39f20a1Thanks @sbroenne! - Consistent command and timeout names (#1066):excelcli batchnow accepts the same command group names as the CLI (calculationmode,datamodelrelationship,worksheetstyle). Timeouts are named--timeout-secondsin the CLI,timeoutSecondsin batch JSON, andtimeout_secondsin MCP. MCPfileandfile_readnow takefile_pathinstead ofpath. Mistyped commands or arguments now return a list of the valid choices. These are breaking changes; see Breaking Changes.
[2.3.4] - 2026-10-07¶
Patch Changes¶
-
#1070
fb5b8a1Thanks @sbroenne! - Charts can now use data made of separate cell blocks on one sheet, such as labels in M4:M29 and values in O4:S29 (M4:M29,O4:S29), when creating a chart or changing its source. Bad input for charts, drawing objects, PivotTables, slicers, timelines and conditional formats is now rejected before anything is added to the workbook. If Excel still fails after creating the object, the error now names what was left behind and where, instead of showing a bare Excel error code. -
#1069
6126f0bThanks @sbroenne! - Power Queryrefresh-allnow works on workbooks that contain parameter or connection-only queries: it skips them, refreshes every loaded query, and keeps going when one query fails. The result lists which queries were refreshed, skipped, and failed (with each failure's error), and reportssuccess: falsewhen any query failed.excelclinow exits with code 1 whenever a command's result reportssuccess: false, matching how the MCP Server flags the same result as an error.
[2.3.3] - 2026-10-06¶
Patch Changes¶
- #1062
b1256d3Thanks @sbroenne! - Add a bounded workbook overview with worksheet, table, and named-range metadata plus optional limited value and formula previews.
[2.3.1] - 2026-10-05¶
Major Changes¶
- #1059
2d459dcThanks @sbroenne! - MCP tools that target an open workbook now useworkbook_session_idinstead ofsession_idin inputs and results. This works around a Claude Desktop bridge issue that can drop inputs namedsession_id. CLI session names are unchanged.
Patch Changes¶
- #1058
54115a6Thanks @sbroenne! - Protected workbooks now use the signed-in user's Excel editing permissions instead of always opening read-only. Workbook changes reject genuine read-only access, and saves and Save As report an error when Excel does not accept the save, leaving the session open for inspection.
[2.3.0] - 2026-10-05¶
Minor Changes¶
- #1052
880eee5Thanks @sbroenne! - Give read-only MCP actions dedicated tools with accuratereadOnlyHintmetadata. Separate workbook session and worksheet listing from their write tools, and report the package's informational version in MCP server metadata.
[2.2.2] - 2026-10-05¶
Patch Changes¶
- #1050
57e3423Thanks @sbroenne! -vba runnow reports its requested execution timeout as a timeout rather than a cancellation. Anonymous operation analytics also distinguish timeouts from cancellations.
[2.2.1] - 2026-10-04¶
Patch Changes¶
-
#1044
7b1c095Thanks @sbroenne! - Install the Excel plugins in Claude Code: the plugin repository now also publishes a Claude Code marketplace. Runclaude plugin marketplace add sbroenne/mcp-server-excel-plugins, thenclaude plugin install excel-mcp@mcp-server-excel-plugins(orexcel-cli@mcp-server-excel-plugins). -
#1049
10c368eThanks @sbroenne! - Restore a small Excel CLI plugin skill that helps coding agents find and launch the npx wrapper for ordinary workbook requests. Command details still come from native CLI help; the former large skill reference collection is not restored.
[2.2.0] - 2026-10-04¶
Major Changes¶
-
#981
2cbab76Thanks @sbroenne! - Replacecopy,copy-values, andcopy-formulaswith onerangecopyaction requiringpaste_kind(CLI--paste-kind, batch JSONpasteKind). Select all, values, formulas, formats, or validation, with native transpose and skip-blank options. Formatting/validation paste preserves cell content; content overwrite checks cover the actual expanded/repeated destination and exclude skipped source blanks. All copy kinds require unmerged rectangular geometry under either overwrite policy. Return resolved paste bounds and clear the owned application's copy mode after success or failure. -
#974
2520d40Thanks @sbroenne! - Latest-server launches from Claude Desktop: The MCPB now configuresnpx -y @sbroenne/mcp-server-excel@latestdirectly instead of bundling a fixed executable. Node.js with npm/npx must be available on PATH; no separate .NET installation is needed. Existing binary-bundle users must install the new bundle once. Server versions are resolved on launch using normal npm caching; running workbook sessions are not automatically restarted.
Installation guides and ready-to-use MCP configurations now consistently use @latest and explain requirements, updates, removal, and safe CLI service restarts.
Minor Changes¶
-
#981
2cbab76Thanks @sbroenne! - Find cells by kind:range get-special-cellsfinds all formulas, constants, blank cells, errors, or visible cells in the requested range. It returns complete matching areas and an exact cell count, without a preview limit, through both Excel MCP and excelcli. -
#981
2cbab76Thanks @sbroenne! - Addrange_formatget-format(excelcli rangeformat get-format) to inspect every requested cell's stored formatting, displayed conditional formatting, or both. Results preserve individual fonts, colors and themes, gradient stops, borders, alignment, number formats, protection, and dimensions, and identify mixed properties without sampling or changing selection. -
#981
2cbab76Thanks @sbroenne! - Configure and inspect native worksheet protection permissions, protected components, and selection restrictions. Report UI-only automation permission as runtime-only. Replace cell-lock actions with exact-scope protection writes and complete per-cell lock/formula-hiding inspection, without mixed-state defaults. -
#981
2cbab76Thanks @sbroenne! - Replace mode-only calculation actions with native settings read/write, iteration controls, and explicit workbook precision-as-displayed permission. Add full recalculation and dependency rebuild. Rename the former workbook scope to application to accurately describe all open workbooks in the owned Excel process. Report actual native calculation state without assuming unavailable state is done. Reject missing or blank sheet/range calculation targets asInvalidInputfailures instead of successful requests containing a nested failure. -
#981
2cbab76Thanks @sbroenne! - Add workbook cell-style listing, complete native inspection, creation from one stored source cell, and custom-style updates/deletion. Updates can affect all existing users; omitted inclusion flags are preserved. Built-in styles are inspectable but read-only. Cell styles expose six native border positions; inside borders remain a range-formatting operation.
Correct range get-style to report Excel's actual built-in/custom status instead of assuming every registered style is built-in.
-
#981
2cbab76Thanks @sbroenne! - Add selected-series reads and primary/secondary axis assignment, native error bars, per-point material and marker formatting, and actual chart image export through MCP and CLI. Fix secondary axis titles and number formats targeting a primary axis. Report unavailable native getters explicitly and reject unsupported marker transparency/outline-weight edits and PivotChart per-series mutations. Failed image exports remove new empty or partial output while preserving an existing destination image. -
#981
2cbab76Thanks @sbroenne! - Add native duplicate removal with explicit key columns, header handling, and blank-aware counts. Add native delimited and fixed-width text splitting with qualifiers, field conversions, number separators, and full destination checks before replacing existing content, including trailing empty fields. -
#981
2cbab76Thanks @sbroenne! - Add native drawing grouping, ungrouping, selected-object alignment and equal-gap distribution, duplication with point offsets, and front-to-back order changes through MCP and CLI. Read actual names, geometry, stacking positions and complete group membership. Reject unsupported drawing types, protected drawing edits and duplication of macro-bound objects. -
#981
2cbab76Thanks @sbroenne! - Add native directional filling, AutoFill patterns, and DataSeries generation with protected destinations to MCP and CLI. Formula reads and writes now support explicit native R1C1 notation while retaining A1 as the default. -
#981
2cbab76Thanks @sbroenne! - Replacerange_format/rangeformatactionsformat-rangeandformat-rangeswith oneformataction takingrangeAddressesand typedformatOptions. The old actions and scalar formatting inputs are removed.
Add independent edge, inside, and diagonal borders; theme colors and tints; native underline kinds, font effects and theme fonts; indentation, shrink-to-fit, reading order, fill alignment, and center-across-selection. Validate all targets, protection, and known invalid options before writing. Omitted settings preserve native state; native failures do not promise rollback.
-
#981
2cbab76Thanks @sbroenne! - Add native precedent/dependent graph inspection to MCP and CLI. Return all reachable native worksheet relationships, current formulas/values, cycles, and unresolved lookups without changing selection or opening external files. Explicit coverage explains missing cross-sheet, external, and dynamic references; an ambiguous native lookup is never reported as proven empty coverage. -
#981
2cbab76Thanks @sbroenne! - Extend worksheet page setup with native print areas, repeated titles, point margins, headers/footers, paper, page order, fixed zoom and printing options. Add complete current-print-scope page-break reads and explicit replacement of all manual worksheet breaks. Both entry points support these settings; no physical printing or modal preview is performed. -
#981
2cbab76Thanks @sbroenne! - Add native PivotTable Show Values As calculations independently of aggregation, with explicit base-field/item selection and complete per-instance Values reads through Excel MCP and excelcli. -
#981
2cbab76Thanks @sbroenne! - Add native PivotTable label/value/date/top-bottom filters, selected parent-item expansion, complete layout and repeated-label reads, PivotTable style controls, and isolated worksheet range/table source replacement through MCP and CLI. Protect unrelated PivotTables and slicers sharing caches, and reject unsupported external/OLAP mutations before changing data. -
#981
2cbab76Thanks @sbroenne! - Addrangeget-spill-infoto inspect every requested cell's native dynamic-array source, result, ordinary, or blocked state through both the MCP Server andexcelcli. Include actual source formulas and established result extents without recalculating, changing selection, sampling, or inventing blocked extents. Unsupported Excel sessions fail explicitly. -
#981
2cbab76Thanks @sbroenne! - Add native workbook table-style listing, complete element inspection, cloning, custom updates, and deletion through both entry points. Inspect all native table/Pivot/slicer/timeline elements, including unset formats. Change supported font emphasis, theme colors, solid fills, outer/inside borders, stripe sizes, availability, or clear selected elements without replacing other definitions. Built-in styles are read-only; custom changes can affect existing users.
Cell-style capture now works from an inactive visible worksheet and restores the previous view. Hidden source sheets are rejected without changing visibility.
-
#981
2cbab76Thanks @sbroenne! - Add native date timelines, complete selected-control reads, shared-PivotCache connections, and typed layout/style updates for slicers and timelines. Date selections affect all connected PivotTables. Preserve separate ordinary/timeline caches and include timeline date state in existing slicer listings. -
#981
2cbab76Thanks @sbroenne! - Add complete native workbook theme color/font inspection and Office theme application through MCP and CLI, with explicit native read limitations and workbook-wide theme-sensitive formatting consequences. -
#981
2cbab76Thanks @sbroenne! - Read active sheet, selection, cell, and chart context from every window owned by the session workbook without changing activation or showing hidden sessions. Inspect or change visibility of exact whole-row and whole-column scopes while preserving stored dimensions. Visibility reads include native size, outline, and worksheet filter context without guessing why a dimension is hidden. -
#981
2cbab76Thanks @sbroenne! - Add selected conditional-formatting rule updates, deletion, and native priority controls with stale-selection checks through Excel MCP and excelcli. Updates retain the rule type and unrelated rules. Creation supports priority and stop-if-true. Correct native above/below-average comparison mappings. -
#981
2cbab76Thanks @sbroenne! - Replace separate Table comparison/value filters with shared typed native filter options, preserving native operators, arrays, both criteria and inactive columns. Add ordinary-range filters and native advanced criteria-range filtering with protected copy output and explicit worksheet-wide advanced-filter clearing. Ordinary filters reject existing advanced row filtering until it is explicitly cleared with authorization, preserving the original hidden rows and filter state.
Patch Changes¶
-
#1016
7e6c1a0Thanks @sbroenne! - Reject bar-only label positions on line and scatter series before changing any targeted series, including combination charts. Invalid requests no longer leave labels enabled or earlier series partially changed through MCP or excelcli. -
#1016
7e6c1a0Thanks @sbroenne! - Apply and read chart-axis number formats containing English named colors on regional Excel installations, preserving decimal conditions and literal dollars. -
#1016
7e6c1a0Thanks @sbroenne! - Resolve chart series source ranges before adding a series. Missing sheets and invalid ranges now fail without adding a partial series or treating the reference as a literal chart value through MCP or excelcli.
Resolve unqualified series sources from the chart worksheet and sheet-qualified sources from the chart workbook, independent of the active worksheet or workbook.
- #999
f03a948Thanks @sbroenne! - Make accepted chart settings discoverable in CLI help and MCP descriptions, return actual plotted series and values when reading regular charts or PivotCharts, and target secondary axes correctly for titles and number formats. Clarify slicer scope and provide actionable recovery when definition-only Power Query stages prevent batch refresh.
Preserve existing validation rules when type, operator, or error-style inputs are invalid. Report failed Data Model metadata reads and requested measure-format failures instead of inventing empty results or substituting General. Keep model-refresh error details without misdiagnosing unsupported functionality, and correct percentage-label and legacy axis-selector guidance.
Identify the actual measure format during readback instead of misreporting Decimal as Percentage or hiding format-read failures as General.
Advertise only writable chart data-label positions in CLI help and MCP discovery; Excel's read-only Mixed state is not an input option.
Keep mixed-style range inspection working when Excel reports no single style, without changing individual cell styles. Required metadata helpers still reject missing objects with explicit argument errors.
Propagate native cell-style read failures through normal error handling instead of hiding them as successful Normal results; only null/DBNull mixed-style values use the existing fallback.
-
#1016
7e6c1a0Thanks @sbroenne! - Return conditional-format bold and italic settings even when Excel cannot read the rule's unset font color, through both MCP and excelcli. -
#1016
7e6c1a0Thanks @sbroenne! - Reject invalid conditional-formatting colors before creating a rule. Ordinary rule, color-scale and data-bar color errors no longer leave partially created rules behind through MCP or excelcli. -
#1016
7e6c1a0Thanks @sbroenne! - Reject negative connection refresh intervals before changing other connection settings. -
#982
180722bThanks @sbroenne! - Data Model slicers (#980): Creating and listing slicers now shows their actual items and selections. Select items by their displayed captions to filter connected PivotTables, replace or add to a selection, or clear the filter; invalid items return an error without changing the selection.
Slicer creation checks cancellation before creating each cache or visual, and connected-PivotTable scans observe cancellation. Cancellation stops further work; it does not undo changes already made.
Regular PivotTable and Table slicers also replace an existing single-item filter correctly, without accidentally selecting extra items.
-
#1003
b9e8352Thanks @sbroenne! - DAX measures on decimal-comma computers (#978): Creating or updating a Data Model measure no longer fails or silently changes numbers such as-1, MONTHinto-1.when Windows uses a comma as the decimal mark. Spaces are added around commas that touch numbers, which keeps the DAX meaning, and the result message says so. Measure readback now returns the DAX stored in the model, with decimal points, after a workbook is reopened. -
#1016
7e6c1a0Thanks @sbroenne! - Validate drawing and sparkline colors before creating or changing objects, and reject Forms-control bindings on other objects or unsupported control subtypes before creation or updates. Invalid MCP and excelcli requests no longer leave orphaned objects or partially changed names, geometry, text, or sparkline sources. -
#1016
7e6c1a0Thanks @sbroenne! - Report Data Model measure formats using Excel's actual format type. Decimal measures are no longer incorrectly reported as percentages when reading their format details through the MCP Server or CLI. -
#1026
0364d61Thanks @sbroenne! - VS Code extension packages no longer include developer-only instruction files. -
#1016
7e6c1a0Thanks @sbroenne! - Report an expired service connection budget as a contextual timeout instead of an unhandled generic timeout during CLI daemon startup, and preserve caller cancellation. -
#1016
7e6c1a0Thanks @sbroenne! - Reject unsupported window layout presets before changing Excel's visibility, window state, or position. -
#985
02f0b61Thanks @sbroenne! - Replace broad Excel agent skills with separate MCP and CLI report-formatting skills. Preserve optional presentation conventions and move general workflows and recovery guides into documentation without changing existing website URLs. Plugin identities remain unchanged; standalone old skills require replacement after the updated packages are published. -
#970
fbd9f26Thanks @sbroenne! - The VS Code extension now includes a native ARM64 Excel server in its Windows ARM64 package instead of the x64 server. Its welcome message also explains automatic server startup, without requiring a manual start command. -
#1016
7e6c1a0Thanks @sbroenne! - Fix Data Model PivotTable label sorting through MCP and excelcli. Sorting now uses the underlying Excel level's unique name instead of reporting success while leaving labels in their original order. -
#1016
7e6c1a0Thanks @sbroenne! - Include the source type in PivotTable slicer creation, selection, and listing results. -
#1016
7e6c1a0Thanks @sbroenne! - Correct regular PivotTable value-field renaming to update the displayed value caption rather than the hidden source field. Preserve literal dollar signs in PivotTable number formats instead of substituting the regional currency. -
#973
803deffThanks @sbroenne! - Protected range writes by default (#950): Value/formula writes and content copies now refuse to replace occupied cells, including formulas displaying blank, and report up to 10 conflicting addresses before making any writes. Intentional updates must explicitly select MCPoverwrite_policy: "allow"or CLI--overwrite-policy allow; existing update scripts need this option.
Protected copies check their complete expanded or repeated destination and stop if it cannot be safely inspected. This safeguard does not provide undo, rollback, or protection against interactive Excel edits.
-
#1016
7e6c1a0Thanks @sbroenne! - Remove obsolete source columns when refreshing or updating worksheet-loaded Power Queries, while preserving calculated table columns and neighboring cells. Existing tables loaded by earlier versions receive the corrected refresh setting too. -
#969
1875610Thanks @sbroenne! - Accurate range search results (#949): Find now returns at most 10 matching cells by default, with the exact total, the number returned, and an explicit indication when matches were left out. Both MCP and CLI support a configurable positive match limit; exact counting still searches all matches.
CLI search and replace options now correctly accept JSON objects.
-
#1016
7e6c1a0Thanks @sbroenne! - Allow saved.xlsbworkbooks to be reopened through MCP and the CLI. Previously, Save As supported the binary format but opening its output rejected the file extension. File validation now also accepts.xlsband.xlsworkbooks and checks their openability through a read-only Excel open. -
#1016
7e6c1a0Thanks @sbroenne! - Restore Excel's default status bar instead of displaying the literal text FALSE. -
#1016
7e6c1a0Thanks @sbroenne! - Restore minimized Excel windows to their previous normal or maximized state when showing or bringing them to the foreground. Report refused foreground activation instead of returning success without the requested result. -
#976
e74376eThanks @sbroenne! - Remove regional separator rewriting when creating and updating DAX measures, fixing expressions such as DIVIDE(SUM(SalesTable[Amount]), 1000). Native DAX separators are preserved. On decimal-comma Windows, spaces are added around commas that touch numbers so Excel keeps the formula's meaning, and the result message reports the adjustment. Remote formatting remains opt-in. Fix General and named-date formats for cells, and preserve chart-axis currency symbols and date/time meaning when applying US format codes through MCP or excelcli. -
#971
9204af0Thanks @sbroenne! - List every valid action in native CLI command help. Keep separate CLI and MCP skills focused on workflows and recovery, remove duplicated command catalogs and overlapping guides, and preserve optional report and financial-model formatting advice. Clarify when temporary manual calculation is useful and restore the workbook's prior mode after success or failure. -
#1016
7e6c1a0Thanks @sbroenne! - Validate every appended table row against the table's column count before writing cells. MCP and excelcli now reject incomplete or oversized rows without silently dropping values, expanding the table, or changing calculation mode. -
#1016
7e6c1a0Thanks @sbroenne! - Reject invalid cell validation types, operators, and error styles before removing existing rules. Honor explicit false message settings and use the documented defaults when validation flags are omitted, including retaining custom error titles and messages when error alerts are enabled by default. -
#1016
7e6c1a0Thanks @sbroenne! - Validate worksheet names against Microsoft's documented restrictions before mutation. If Excel rejects a name beyond those checks after creating or copying a sheet, return an error identifying the sheet left in the workbook rather than removing it.
Reject blank existing worksheet names as invalid input before dispatching rename, copy, copy-to-file, or move-to-file operations.
[2.1.2] - 2026-10-01¶
Patch Changes¶
-
#960
9c7d834Thanks @sbroenne! - Clarify that the VS Code extension includes its own Excel MCP server and does not require a separate Node.js or .NET installation. The MCP and CLI skills now distinguish the Windows and Excel requirements from Node.js needed whenever running through npx, and network access needed for package downloads and update checks. -
#963
611ee7eThanks @sbroenne! - MCP session identifiers now consistently usesession_idin list entries and errors as well as open/create results and inputs. Calls using the oldsessionIdinput are rejected; CLI output naming is unchanged. Tool descriptions and both Excel skills now explain safe saving, calculation modes, dependent-call ordering, and destructive actions with no tool-level undo.
Destructive-action guidance no longer prescribes unsolicited workbook copies. Calculation guidance now states that restoring the prior mode is best-effort and can fail without failing the write.
- #960
9c7d834Thanks @sbroenne! - Improve the VS Code extension's first-run guidance, setup diagnostics, and launch-time checks for desktop Excel and the bundled server. Include the server version so VS Code can refresh tools after an update. Publish separate Windows x64 and ARM64 extension packages, keeping the existing x64 server through Windows emulation on ARM64. Refresh the Marketplace README to explain real Excel automation, the bundled skill, requirements, and local workbook access in remote workspaces.
Point Getting Started to the user guides rather than installation instructions, and clarify server startup and approval steps in the installation guide.
Keep the MCP server available if saving the optional first-run welcome preference fails, and report that the help may appear again.
-
#964
dee86adThanks @sbroenne! - Removed the optional global installation scripts from both Copilot plugins. Use the existing npx launch commands without changing PATH or adding a separate global MCP configuration. The CLI plugin retains its Windows launcher for quoted JSON arguments, and installation guidance now matches the npm-based setup. -
#959
a8c3317Thanks @sbroenne! - Both Excel skills now use consistent clarification and permission rules: clear requests proceed without repeated approval, audits and proposals remain read-only, and known visibility preferences are reused. Leaving a workbook open no longer implies showing Excel. Guidance preserves exact MCP input and CLI flag names, explains temporary Power Query evaluation changes, distinguishes required from optional workflow steps, and corrects stale CLI reference, screenshot, and workbook-property advice.
[2.1.1] - 2026-09-30¶
Patch Changes¶
-
#958
2c3f356Thanks @sbroenne! - Native Windows ARM64 npm packages: The MCP server and CLI now use native ARM64 executables when run with ARM64 Node.js, without changing existingnpxcommands. x64 Node.js continues to use the x64 packages. -
#955
a5c4b9fThanks @sbroenne! - Both Excel skills now include guidance for creating readable reports and applying requested formatting while preserving existing templates. The guidance covers number formats, layout, optional financial conventions, and checking calculated results without automatically restyling unrelated workbook content.
[2.1.0] - 2026-09-30¶
Patch Changes¶
- #937
d463dfdThanks @sbroenne! - More reliable MCP tools: Use the official SDK for registration, schemas, injected services, and asynchronous calls. Tool failures now set the real MCP error flag and provide structured results. Every tool now advertises an output schema generated from its action result contracts, including typed session-list entries and screenshot failure messages, so clients can understand the returned fields without parsing prose. Unknown, misspelled, wrongly typed, and action-inapplicable arguments are rejected rather than silently ignored.
Cancellation now reaches workbook startup and reclaims its eventual session without closing unrelated workbooks. Shutdown cannot publish a late session after its owner has stopped. Normal shutdown still attempts to save open workbooks; explicitly closing without saving still discards edits. Expected client cancellation no longer writes a misleading warning stack trace, while unexpected handler failures remain logged.
Removed Gemini-specific schema rewriting and generated guide prompts. Shared guides remain in the skills. Server instructions and skill guidance are now task-focused, without forced formatting, Table creation, or presentation menus. Restored detailed parameter documentation in generated tool schemas and corrected input names, query-loading guidance, and stale skill examples. Bulk-write guidance preserves the previous calculation mode, and chart feedback no longer requires screenshots on unavailable desktops. Consent guidance now distinguishes client confirmation from server-side elicitation, which is not implemented.
Regular PivotTable calculated fields are now recognized as numeric, allowing them to be added to Values with Sum. Skills distinguish aggregate calculations from per-row revenue, require complete slicer inputs, and explain recovery when a failed Power Query load leaves its query behind. The CLI batch example stops on failure and explicitly discards only the failed job's own unsaved changes. Both skills now include native examples, a complete guide index, and less repeated guidance; the CLI command catalog is split into smaller linked pages.
[2.0.14] - 2026-09-29¶
Patch Changes¶
-
#932
efbd1d5Thanks @sbroenne! - Reliable CLI pipelines and named-range text: CLI options now accept the documented standalone-stdin marker, including--values -and--input -. Named-range writes also preserve dotted identifiers such as2.0.13as text instead of interpreting them with the machine's regional number format. -
#933
741114fThanks @sbroenne! - Simpler plugin startup: The Excel MCP and CLI plugins now use the published npm packages throughnpx. Node.js 18 or later is required, and the old GitHub Release downloader has been removed.
[2.0.13] - 2026-09-29¶
Patch Changes¶
-
#930
0710d45Thanks @sbroenne! - Clearer VBA failure reporting: Unsupported workbook formats, missing or duplicate modules, and blocked VBA project access now retain distinct failure categories. Macro execution remains independent of VBA project trust, and Excel execution failures are no longer confused with prerequisites. -
#931
0c31783Thanks @sbroenne! - Package generation now preserves the original installation error when recovery also fails, reports retained recovery backups, and treats post-install backup cleanup failures as warnings. The Excel MCP calculation guidance now uses the real named MCP arguments.
[2.0.12] - 2026-09-29¶
Major Changes¶
- #903
cf69114Thanks @sbroenne! - Remove the obsolete full Power Query formula field:PowerQueryInfo.Formulais no longer available. Query lists continue to return boundedFormulaPreviewvalues; use the Power Queryviewaction to retrieve complete M code.
Patch Changes¶
-
#903
cf69114Thanks @sbroenne! - Return a clear not-found result when deleting a missing OLAP calculated member. -
#926
ee80d68Thanks @sbroenne! - Safer Excel sessions and connection output: Queued operations now expire without running later or closing a healthy session, connection details redact credentials, one-cell reads return correctly, refresh cancellation is reported, and Excel COM objects are released more reliably. -
#928
259b3f8Thanks @sbroenne! - Install reusable CLI and MCP skills fromsbroenne/mcp-server-excel-plugins. The source repository now keeps templates and authored guidance only; complete skills are generated for packaging. Existing installed skills remain installed, but the old source-repository install command does not redirect automatically. -
#903
cf69114Thanks @sbroenne! - Consistent number formats across regional settings: Range formatting, chart axes, and PivotTable value fields now use the same US-style format codes through both the CLI and MCP Server, without corrupting decimal places or comparison thresholds in custom formats. Locale-specific date letters inside quoted or escaped literal text no longer prevent regional decimal translation. Excel continues to display numbers using the user's regional separators.
Clean screenshot edges: Range captures now account for Excel's per-cell pixel rounding, preventing blank strips at some window sizes and zoom levels.
Reliable Excel shutdown: Release unused automation metadata before closing Excel to avoid stalled cleanup, and report session save and cleanup failures instead of silently ignoring them. All sessions still receive a teardown attempt when one auto-save fails. Normal post-Quit cleanup keeps its existing total time limit and targets only the session's verified Excel process.
Public command parity: Range value, formula-read, and clear commands now accept an empty sheet name when the range address is a workbook named range. Setting an empty chart title now hides the title as documented.
-
#923
83f7246Thanks @sbroenne! - Stop Data Model and Power Query evaluation promptly when the operation timeout expires, while preserving temporary Power Query cleanup. -
#920
397dd77Thanks @sbroenne! - Excel-backed file validation:file testandexcelcli session testnow validate ordinary workbooks by briefly opening them read-only in Excel instead of inspecting internal workbook XML. The validation open honors the existing MCP timeout, and the CLI command now supports the same--timeoutoption. -
#896
d0f8e36Thanks @copilot-swe-agent! - Unstyled tables can be listed and read again: Thetable listandtable readactions now handle Excel tables that have no table style applied. No-style values are returned as an empty string, while applied style names are preserved. -
#879
6b64c5cThanks @copilot-swe-agent! -screenshot(capture-sheet)now includes embedded charts outside the worksheet's used cells. -
#885
4e2fb12Thanks @copilot-swe-agent! - More actionable failure reporting: Missing worksheets, named ranges, and Power Query load targets now retain a safe input or workbook-state category. Writes blocked by merged cells are also identified instead of appearing as unclassified failures in usage analytics. -
#895
e94159fThanks @copilot-swe-agent! - Localized Excel table names: Table operations now accept non-ASCII names that Excel allows, such as表1andテーブル1, instead of rejecting them before Excel checks the name. -
#928
259b3f8Thanks @sbroenne! - Retry transient Windows sharing failures while replacing CLI daemon tracking state so concurrent cleanup and startup do not leave a locked runtime behind. -
#928
259b3f8Thanks @sbroenne! - Preserve unrelated Copilot settings when installing the MCP plugin globally. Plugin downloads now stop if the shared installation lock cannot be acquired, and update their cached state without exposing partially written JSON. The optional CLI installer repairs missing launchers without overwriting their existing partner and supports installation paths containing apostrophes or non-ASCII characters. Failed launcher writes restore the previous installation, or retain recovery backups and report both errors if automatic restoration is blocked. -
#887
f00aa35Thanks @copilot-swe-agent! - CLI usage analytics: Anonymous operation telemetry now includes CLI commands, and every invocation identifies whether it came fromexcelclior the MCP Server.
[2.0.10] - 2026-09-27¶
Minor Changes¶
- #812
c342820Thanks @sbroenne! - Install the MCP Server and CLI with npm: Runnpx -y @sbroenne/mcp-server-excelornpx -y @sbroenne/excelcli --helpto use the self-contained Windows tools without installing .NET or downloading executables manually.
[2.0.9] - 2026-09-27¶
Patch Changes¶
-
#882
9f0b0a6Thanks @copilot-swe-agent! - Localized Excel Table formats survive save: Opening and saving a workbook no longer rewrites locale-specific number formats on Excel Table columns. Japanese (ja-JP) built-in date and negative-number formats now stay exactly as they were. -
#877
953b108Thanks @copilot-swe-agent! - Working Power BI Desktop and MCP Registry links: The MSOLAP prerequisite guidance shown by the MCP Server and CLI (and the matching pages on excelmcpserver.dev) pointed at a Power BI Desktop download URL that no longer resolves. It now links to the current download page, and the MCP Registry and .NET COM interop links in the docs were refreshed the same way.
[2.0.8] - 2026-09-12¶
Patch Changes¶
-
#872
9c4f400Thanks @sbroenne! - MCP session-bound tools now defensively accept a top-levelsessionIdfrom client bridges that rewrite the canonicalsession_idargument. The published schema still usessession_id, and conflicting or malformed identity values return a privacy-safe input error. -
#868
b7f23afThanks @sbroenne! - MCP calls missing a required session ID now explain where to supplysession_idinstead of returning a generic tool error. File close and session-based worksheet errors use the same public parameter name, including when the supplied ID is not a string. This improves diagnosis but does not repair client bridges that drop arguments. -
#870
160edf1Thanks @sbroenne! - CLI and MCP now preserve categories for wrapped Excel errors and known VBA and Data Model prerequisites without guessing the cause of unknown failures. Empty macro procedure names are rejected before execution, and Power Query evaluation retains the existing query error categories after cleaning up its temporary objects.
DAX execution errors now identify the failing operation while preserving the underlying Excel error, including when Excel returns only an error code.
- #869
4f46abbThanks @sbroenne! - Older Excel formula compatibility (#750): Formula reads and writes now use the legacy API when Excel does not support modern formulas, in both CLI and MCP. Modern Excel keeps dynamic arrays; older Excel retains its single-value implicit-intersection behavior. Invalid formulas and protected-cell errors are not retried.
[2.0.6] - 2026-09-02¶
Minor Changes¶
- #844
09694d8Thanks @sbroenne! - Safer table creation (#838): Preview merged cells, header problems, nearby excluded columns, formula sorting risks, and the effective table range before creating a table. Table creation now blocks deterministic problems while leaving uncertain warnings for review. Large-range merge discovery is bounded, and formula risk analysis reports when an oversized range was skipped.
Patch Changes¶
-
#843
d2c9932Thanks @sbroenne! - Range reads now explain formula errors.get-valuesandget-formulasreturn canonical Excel names such as#REF!and#N/A, plus affected cells, formulas, raw error codes, and suggested fixes. -
#829
7bddb7dThanks @sbroenne! - Release changelogs now include the version being shipped. VS Code and MCPB packages receive the newly generated changelog, and each release tag points to the metadata commit containing that release's entry instead of the previous version's changelog. -
#845
748a33bThanks @sbroenne! - Stale-build cleanup now preserves unsaved CLI session changes when a shutdown reply is lost. Session and pipe cleanup use one exact-process exit policy, giving an already-shutting-down daemon and its tracked Excel processes time to save and exit before bounded forced cleanup. -
#841
33a1a71Thanks @sbroenne! - Merged-cell writes now fail clearly instead of reporting false success (#831).set-valuesandset-formulasidentify affected merged ranges and explain whether to write to the top-left cell or unmerge the range.
[2.0.5] - 2026-08-28¶
Patch Changes¶
- #826
be26b87Thanks @sbroenne! - Separate expected results from product failures in anonymous reliability reporting. MCP telemetry now records only fixed outcome and failure-class labels, keeps unknown failures visible, and preserves structured recovery categories across MCP and CLI responses.
[2.0.4] - 2026-08-28¶
Patch Changes¶
-
#816
3684583Thanks @sbroenne! - Publish transparent usage analytics. A weekly privacy-checked public report now shows overall use, feature adoption, errors by release, and broad problem trends with a clearly labeled GitHub Copilot interpretation. -
#816
3684583Thanks @sbroenne! - Prevent exception details from entering telemetry. Crash analytics now keep only safe error classifications; exception messages and stack traces are discarded both in the MCP Server and by an Azure ingestion privacy filter. Automatic framework trace logs are also blocked. -
#825
654ac27Thanks @sbroenne! - Improve the VS Code extension's metadata and development guidance. The Chat Skills table now shows the skill name and description instead of empty placeholders, package validation prevents incomplete Marketplace metadata, and skill installation guidance now reflects the extension's actual bundled files.
[2.0.3] - 2026-08-27¶
Patch Changes¶
-
#818
cfcd7a5Thanks @sbroenne! - Fix worksheet screenshots failing when usingcapture-sheet, and report failed MCP tool operations accurately in privacy-safe usage telemetry. -
#819
288cceaThanks @sbroenne! - Clearer documentation and command help:excelcli --helpnow presents a concise command index, tool descriptions point to valid commands, and public documentation accurately explains privacy, packaging, breaking changes, and installation workflows.
[2.0.2] - 2026-08-26¶
Patch Changes¶
- #815
9a13dbaThanks @sbroenne! - ExcelMcp now reports calculation, range, file, Data Model, VBA timeout, and window errors consistently across CLI and MCP. PivotTable chart creation now produces genuinely linked PivotCharts, and worksheet view controls include formula display. Local builds and plugin bundles now report the current released version instead of stale1.7.xmetadata.
[2.0.1] - 2026-08-24¶
Patch Changes¶
-
#811
d43a165Thanks @sbroenne! - Reliable Agent Plugin packages: ExcelMcp plugins now use the host-provided persistent cache, preserve CLI pipeline output, and ship current installation and tool examples. -
#809
cbbc529Thanks @sbroenne! - Reliable MCP Registry releases (#808): Releases now stamp and verify both MCP Registry version fields, and report publishing failures instead of hiding them. -
#813
3ad8ca3Thanks @sbroenne! - Verified plugin runtime downloads: The ExcelMcp Copilot plugins now check downloaded and cached Windows runtime ZIPs against SHA-256 checksums published with the exact GitHub release before extraction.
[2.0.0] - 2026-08-21¶
Major Changes¶
-
#807
f9a25d1Thanks @sbroenne! - Canonical file lifecycle (#798, #799): CLI and MCP now expose the same list/open/create/close/test workflow. Standalone CLI save and the MCPclose-workbookno-op are removed; file testing shares one result model with openability and deterministic IRM/AIP read-only requirements. IRM detection now requires the rights-management data-space marker, so ordinary password-encrypted OOXML files are not incorrectly forced into read-only mode. -
#807
f9a25d1Thanks @sbroenne! - Compact, truthful Power Query reads (#787, #800):powerquery listnow returns bounded M previews and exact worksheet/Data Model load state without serializing full formulas. Usepowerquery viewfor full M code. List inspection errors now fail explicitly instead of silently omitting queries. The publicPowerQueryInfo.Formulagetter and setter remain available for source and binary compatibility, but are obsolete and excluded from list JSON.
Patch Changes¶
-
#807
f9a25d1Thanks @sbroenne! - Canonical public inputs (#782, #783, #784, #801): CLI, batch JSON, and MCP now use integer seconds for timeouts, validate the same supported ranges, and resolve inline-or-file content aliases once at shared dispatch. Manual session open/create now enforces its documented 10-3600 second operation timeout. -
#807
f9a25d1Thanks @sbroenne! - Exact Power Query and connection cleanup (#786, #796, #797): Power Query load detection, refresh, unload, delete, Data Model lookup, and evaluate cleanup now use exact case-insensitive mashupLocationidentity instead of substring or display-name matching. Connection delete/load-to removes only QueryTables owned by the exact WorkbookConnection, preserving similarly named and unrelated workbook objects. Queries loaded to both a worksheet and the Data Model now refresh both destinations instead of leaving model data stale. Evaluate removes Excel-generatedConnection/Connection1artifacts before save and returns an actionable error if cleanup fails. -
#803
4e67044Thanks @sbroenne! - Accurate skill versions in every distribution (#791): plugin, Agent Skills ZIP, and VS Code extension builds now stamp their resolved package version into generated skill metadata instead of copying a stale sourceVERSIONfile. Manual distributable builds must pass-Version, preventing silently mislabeled packages. -
#807
f9a25d1Thanks @sbroenne! - Safer CLI cleanup (#789): builds and test workflows now stop only the CLI daemon and Excel processes owned by their selected pipe, preserving unrelated Excel sessions. Daemon lifecycle locks use disjoint, case-insensitive hashed pipe identities so case variants, suffixes, special characters, and long names cannot collide. When cleanup sources are newer than the installed build output, pre-build cleanup uses an isolated current client so the owned daemon cannot lock the rebuild. -
#807
f9a25d1Thanks @sbroenne! - Strict generated action contracts (#781, #788): CLI direct commands, CLI batch, and MCP now reject unknown enum values and parameters that do not apply to the selected action. Power Query load destinations accept the documentedworksheet,data-model, andbothaliases without falling back to an unintended load mode. -
#807
f9a25d1Thanks @sbroenne! - Truthful CLI daemon status (#785):service statusnow distinguishes stopped, running, and unresponsive daemons, whilesession listreturns an empty list only for confirmed empty states. Both commands probe the configured service before consulting daemon mutex state, so externally hosted services remain visible. Shared control-command and startup readiness timeouts tolerate slow daemon startup without converting transport failures into successful stopped or empty results.
[1.10.9] - 2026-08-20¶
Patch Changes¶
- #779
f3f80acThanks @sbroenne! - Copilot plugins: arguments with quotes now survive, and a cached runtime keeps working offline. Two defects made the publishedexcel-cliandexcel-mcpplugins fail in normal use.
Every documented inline JSON example — --values '[["Name","Amount"]]' — was silently corrupted to [[Name,Amount]] when invoked through the plugin's own wrapper or the generated excelcli PATH shim, because Windows PowerShell rebuilds the command line for native executables and drops embedded double quotes. The wrapper now builds the command line itself using the standard MSVCRT quoting rules and hands it to the process verbatim, and the .cmd shim resolves the executable first so %* is passed through untouched.
Separately, the bootstrap aborted whenever the GitHub release API was unreachable — even with the correct runtime already downloaded and extracted — so a rate limit or an offline machine stopped the MCP server from starting at all. A failed update check now falls back to the cached runtime and warns on stderr, and an already-extracted runtime is resolved before any download is considered, so reclaiming the cached .zip no longer requires the network. With nothing usable cached, the failure stays loud.
- #790
3aa557cThanks @sbroenne! - Harden the plugin runtime bootstrap against corrupt caches, concurrent installs, and rate limits.
Follow-up to the offline-fallback fix. download.ps1 for both excel-cli and excel-mcp now:
- Validates the cached archive instead of merely testing for its presence. A truncated download used to wedge the plugin permanently: the release tag still matched, so no download was attempted, yet extraction failed on every subsequent run. Recovery required manually deleting the cache. The archive is now opened and checked before it is trusted.
- Downloads to a temp file and renames into place, so an interrupted transfer can never leave a partial archive that a later run mistakes for a complete one.
- Extracts into a staging directory and swaps it in, rather than deleting the release directory first. This also fixes a destructive failure mode:
Remove-Item -Recursedeletes every sibling file before it reaches a locked executable and fails, leaving a half-destroyed install. The executable is now probed for a lock before anything is removed, and a runtime that is currently in use is kept rather than partially overwritten. - Retries once with a fresh download if an install fails, instead of failing permanently.
- Serializes installs with a named mutex, so concurrent sessions cannot race on the same archive and release directory.
- Verifies the resolved runtime's version from the version stamped into the file. Running the runtime with
--versionwas deliberately avoided: it performs its own network update check, which is exactly wrong inside a bootstrap that must work offline. - Sends
GITHUB_TOKEN/GH_TOKENas a bearer token when present. Unauthenticated GitHub API access is 60 requests/hour per source IP, a budget shared by everyone behind a corporate NAT and routinely exhausted — the most common cause of release metadata being unreachable. -
Re-checks for updates on a time window for non-Copilot installs. Outside a Copilot session the session id is the constant
"standalone", so it always equalled the previously recorded one and the freshness check never fired again. PATH and shim installs were pinned forever to whatever they first downloaded, despite the docs promising the newest runtime. -
#794
f05294fThanks @sbroenne! - Theexcel-cliandexcel-mcpplugin bootstraps now come from one shared template, so they stay in sync without hand-maintained drift. -
#780
368dd52Thanks @sbroenne! - Accurate plugin documentation and a VERSION file for the CLI plugin. The MCP server's--helpbanner claimed "22 tools with 195+ operations" while the server actually registers 31 tools with 326 operations. The repo already derives those numbers from code and enforces them across 16 documents on every commit; the banner was simply not one of them, so it drifted unnoticed.
Rather than correcting the literal, the banner now derives both numbers by reflecting over the live [McpServerTool] registration, so it can no longer disagree with the server's own tools/list response. The doc-count guard was extended to fail if anyone reintroduces a hard-coded count there — including a count that happens to be correct on the day it is written.
The excel-cli plugin shipped without the VERSION file its excel-mcp counterpart carries, because the build never passed a version through for the CLI skill and only rewrote a VERSION that already existed instead of creating one. Both plugins now get a stamped VERSION, and the build fails if any packaged skill is missing one or carries the wrong version.
Two skill instructions were misleading in ways that produce visibly wrong output. The number-format table showed rendered results as though separators were fixed, but Excel renders them per the user's Windows regional settings — $#,##0.00 shows $1.234,56 on a German machine — so the skill now explains that format codes are written in US notation while the rendering is locale-dependent, and warns against "fixing" the code. The formatting workflow also stopped at applying a number format, which leaves date and currency columns showing ##### because formatted values are wider than the raw ones; auto-fitting columns is now a required step.
Finally, the CLI skill assumed excelcli was on PATH while the plugin's global shim is explicitly opt-in, so an agent following the skill hit command-not-found. The preconditions now state the requirement plainly and give the ways to satisfy it.
- #793
c6e5561Thanks @sbroenne! - Screenshots no longer include a strip of Excel window chrome (#777): captured images picked up a few pixels of the scroll bar and sheet tab strip along the bottom of every tile, which showed up as a grey band at each seam of a stitched screenshot of a tall or wide range. The capture now measures the actual worksheet grid area instead of Excel's reported workspace size, and sizes tiles so they line up seamlessly.
[1.10.8] - 2026-08-19¶
Patch Changes¶
- #773
e60c600Thanks @sbroenne! - Fixed broken documentation links on NuGet.org — the MCP Server and CLI package pages linked to the installation guides, feature reference, and privacy policy using relative paths. NuGet.org resolves those against the package itself rather than the repository, so every one of them returned a 404 for anyone reading the package page. They now point at absolute repository URLs and work from NuGet.org, GitHub, and inside the shipped skill packages alike.
The documentation site is unaffected: those links still resolve to the site's own pages, and a new audit check fails the build if a published page ever starts sending readers to GitHub for content the site hosts itself.
-
#776
b2eab4cThanks @sbroenne! - Portable Agent Plugins: Published Excel MCP and CLI plugins now conform to Agent Plugins 1.0, use standard skill discovery, and use portable rootmcp.jsonconfiguration. -
#774
3f51870Thanks @sbroenne! - Accurate documentation-site dates and accessibility fixes: the sitemap now reports each page's real last-changed date instead of the date the site was built, so search engines no longer see all 52 pages change on every deploy. The site logo also gained the alt text and image dimensions it was missing, the loading indicator and search box gained accessible names, and the build now fails if any of those regress. -
#778
3a7abdcThanks @sbroenne! - Screenshots now photograph the live Excel window (#777) —screenshot captureandcapture-sheetused to render the image inside Excel by inserting a temporary chart into the worksheet. On a protected sheet Excel refuses that insert, so capture failed with a bareCOMException 0x800A03EC. Capture now takes a real picture of the Excel window instead.
What this changes for you:
- Protected sheets can be captured.
- Your clipboard is no longer overwritten, and the workbook is never modified or dirtied by taking a screenshot.
- Captures are faster, since the old chart create/paste/export retry ladder is gone.
- Ranges larger than the Excel window are zoomed to fit and, if still too large, captured in several passes and stitched together; extremely large ranges are truncated to their top-left portion and the result message says so.
Capture now requires an interactive desktop session — it will fail on a locked desktop or a disconnected Remote Desktop session.
[1.10.7] - 2026-08-15¶
Minor Changes¶
- #769
37aa032Thanks @sbroenne! - Documentation site overhaul — focused feature pages instead of one long reference, five new task guides (refresh Power Query, automate PivotTables, query the Data Model with DAX, run VBA macros, and how COM automation compares to file-parser libraries), and the 24-file expert reference corpus that previously shipped only inside the agent skills is now published on the web.
The site also gained a machine-readable layer for AI assistants: /llms.txt, /llms-full.txt, a Markdown mirror of every page (append index.md to any URL), /tools.json describing all 31 tools and 326 operations, FAQ structured data, and an explicit AI-crawler policy in robots.txt.
Distribution metadata was corrected and locked down: the Claude Desktop bundle description and the CLI NuGet description advertised outdated tool and operation counts, and the NuGet package pages now link to the documentation site. scripts/check-doc-counts.ps1 guards both, so those counts and links cannot silently rot again.
Patch Changes¶
- #770
d526b22Thanks @sbroenne! - More reliable CLI automation (#764, #765, #766, #767): the CLI now rejects unknown options, reports all missing required parameters together, keeps visible sessions genuinely visible, and cleans up Excel when a timed-out daemon is forced to stop. Python in Excel polling now respects the session timeout, while the generated CLI skill ships complete live command help and shared domain guidance.
[1.10.6] - 2026-08-15¶
Minor Changes¶
-
#768
8c34c73Thanks @sbroenne! - Excel what-if analysis: Added native Goal Seek, scenario lifecycle and summary reports, plus one- and two-variable data tables to both the MCP Server and CLI. Solver remains explicitly excluded because it requires user-enabled VBA add-in configuration. -
#768
8c34c73Thanks @sbroenne! - Worksheet drawing objects and sparklines: The MCP Server and CLI can now create, inspect, format, update, and delete images, AutoShapes, text boxes, connectors, safe Forms controls, and line/column/win-loss sparklines. ActiveX/OLE controls and macro assignment remain intentionally excluded. -
#768
8c34c73Thanks @sbroenne! - Expanded worksheet and workbook automation: Added worksheet protection, comments, images, shapes, page setup, workbook protection, and workbook view options to both the MCP Server and CLI. -
#768
8c34c73Thanks @sbroenne! - Data Model connection metadata: Adddatamodel read-connectionfor embedded model connection details and enrichread-tablewith source connection and typed column data-type metadata. Calculated-column, refresh-timestamp, and live refresh-status COM limitations are now documented explicitly. -
#768
8c34c73Thanks @sbroenne! - Workbook lifecycle automation: Manage built-in and custom document properties, inspect workbook metadata, save or copy workbook formats, publish PDF/XPS files, and discover, update, or break external Excel links through both MCP and CLI. -
#768
8c34c73Thanks @sbroenne! - XML map automation: Add XML map lifecycle, XPath range mapping, and safe in-memory XML import/export through both the MCP Server and CLI. -
#768
8c34c73Thanks @sbroenne! - Expanded local import and collaboration automation: manage text/CSV and legacy HTML QueryTables, inspect or cancel connection refreshes, and create, reply to, list, or delete threaded cell comments through both MCP and CLI. -
#768
8c34c73Thanks @sbroenne! - Expanded PivotTable and chart automation: configure PivotCaches, manually group items, drill into source rows, build combo charts, control plotting and embedded-chart behavior, and apply chart-area or series material formatting through both MCP and CLI. -
#768
8c34c73Thanks @sbroenne! - Expanded worksheet navigation and organization: control frozen or split panes, zoom, gridlines, headings, row/column outlines, and internal or updatable hyperlinks through both MCP and CLI.
[1.10.5] - 2026-08-07¶
Patch Changes¶
- #760
09d6130Thanks @sbroenne! - Clear Python in Excel availability errors (#753):pythoninexcel set-formulaandget-resultnow explain when the current Excel session cannot use Python in Excel instead of reporting success or exposing a raw#NAME?worksheet error.
[1.10.4] - 2026-08-07¶
Patch Changes¶
- #757
8f7340aThanks @copilot-swe-agent! - Reliable conditional-format rules over MCP (#757):conditionalformat add-rulenow accepts schema-typed boolean and integer options without JSON deserialization errors.
[1.10.2] - 2026-07-26¶
Minor Changes¶
- #745
eabdeb3Thanks @sbroenne! - Conditional formatting: full support for visual rule types (#743).add-rulecan now create colorScale, dataBar, iconSet, top10, aboveAverage, timePeriod, uniqueValues and blanksCondition rules via discrete, LLM-friendly parameters (e.g.colorScaleMinColor,dataBarDirection,iconSetId,rank,aboveBelow,datePeriod).list-rulesandlist-worksheet-rulesnow report each visual rule's type-specific configuration — color-scale stops, data-bar settings, icon-set thresholds, top/bottom, above/below and date period — with colors as#RRGGBB, so visual rules can be fully inspected and round-tripped.
Patch Changes¶
- #742
2bffe1dThanks @sbroenne! - Release automation: make the changelog commit-back reliable. The post-release step that writesCHANGELOG.mdback tomainnow opens a short-lived PR and merges it with an admin bypass, instead of pushing directly tomain, fixing a case where the direct push was unexpectedly rejected.
[1.10.1] - 2026-07-23¶
Patch Changes¶
-
#740
59ebf29Thanks @sbroenne! - Fixconditionalformat addthrowing onborderStyle/borderColor(#737). Writing border formatting on a conditional-format rule threwCOMException: Unable to set the LineStyle property of the Border class. Root cause:FormatCondition.Bordersis a 4-item collection indexed 1-4 (left/top/bottom/right), unlikeRange.Borderswhich uses thexlEdgeLeft/Top/Bottom/Rightconstants (7-10) — writing (and reading) via those out-of-range indices silently returned an unbound placeholder that threw on write and reported blank values on read. Both the write path (add) and the read path (list-rules/list-worksheet-rules) now use the correct 1-4 indices, so border style and color round-trip correctly. -
352b1daThanks @github-actions! - Release automation: reliably commit the changelog back tomain. The post-release step now pushes the compiledCHANGELOG.mdupdate directly tomainusing an adminRELEASE_PAT, instead of opening achore/changelog-vXPR. On this user-owned repo the GitHub Actions bot can't be a branch-protection bypass actor, so that PR could never satisfy the required status checks and piled up open — leaving several releases with a stale/missing CHANGELOG onmain. The direct push (as a ruleset bypass actor) removes the stuck-PR failure mode entirely.
[1.10.0] - 2026-07-23¶
Minor Changes¶
- #734
8988f67Thanks @sbroenne! - Read existing conditional formatting rules (#730): theconditionalformattool now supportslist-rules(per range) andlist-worksheet-rules(entire sheet). Both return each rule's type, operator, formulas, applies-to range, priority, and formatting (interior/font/borders) with colors as#RRGGBBhex strings, in priority order — enabling round-trip safety, debugging, migration, and audit workflows before modifying or clearing rules.
Patch Changes¶
-
#713
25473acThanks @github-actions! - Release automation: auto-merge the changelog PR. The post-release step that opens thechore/changelog-vXPR now also merges it (queued auto-merge, falling back to an immediate squash merge). Previously the PR was only created and left open until a maintainer merged it by hand, which caused several releases to sit with a stale/missing CHANGELOG onmain. -
#714
7cad2f4Thanks @sbroenne! - Faster commits for docs-only changes. The pre-commit hook now treats thegh-pages/documentation website as docs and skips the Release build, smoke tests and all release-packaging gates when a commit touches only documentation (Markdown,docs/,gh-pages/, changesets). Code commits still run the full validation suite, so nothing that ships is left unchecked — documentation edits just no longer wait minutes for binary/packaging gates that cannot be affected by them. -
#729
6f74c60Thanks @sbroenne! - Further reduced Log Analytics ingestion cost for MCP Server telemetry. Application Insights heartbeat (HeartbeatState) and performance counter telemetry (Requests/Sec,Private Bytes,% Processor Time, etc.) are no longer ingested, despite the Application Insights SDK providing no in-process way to disable them in this version — they accounted for roughly a third of remaining telemetry ingestion volume. A Log Analytics ingestion-time transform (Data Collection Rule) now drops these rows server-side, plus the previously-missedhttp.client.request.durationHTTP-client metric. This Data Collection Rule is now defined ininfrastructure/azure/appinsights-resources.bicep(previously only configured manually in Azure, at risk of being lost on redeployment). -
#727
163d9b2Thanks @sbroenne! - Automated Excel integration testing. A cost-optimized self-hosted Windows runner now executes the real Excel integration suite for ready pull requests, including VBA and session tests. Targeted manual runs support surgical feature validation during development, while only the full-suite check satisfies the merge gate. The runner starts on demand and is deallocated after testing. Formula reads now report correct worksheet coordinates and actionable suggestions for cell errors, and locked or invalid workbook paths are rejected before Excel starts. -
#722
8e6d9f1Thanks @sbroenne! - More reliable Python in Excel results.pythoninexcel get-resultnow detects when the Microsoft-hosted Python backend has finished computing by reading Excel's calculation state and the cell's#BUSY!placeholder directly, instead of guessing based on whether the value looked "stable" across repeated reads. The old heuristic could lock onto a stale placeholder and return the wrong value, which is why it needed retry loops to be dependable. A singleget-resultcall now converges deterministically, and the default wait was raised from 15s to 30s to comfortably cover cold-start round-trips. -
#725
2b2b5dfThanks @sbroenne! - Reduced MCP Server telemetry noise and cost. The MCP Server no longer reports the .NET runtime's built-in HTTP-client connection-pool metrics (http.client.open_connections,http.client.active_requests,http.client.connection.duration,http.client.request.time_in_queue,http.client.request.duration) to Application Insights. These were emitted automatically by the telemetry SDK regardless of actual traffic and accounted for the large majority of telemetry ingestion volume, without providing any useful signal for this tool.
[1.9.5] - 2026-07-14¶
Patch Changes¶
-
#713
25473acThanks @github-actions! - Release automation: auto-merge the changelog PR. The post-release step that opens thechore/changelog-vXPR now also merges it (queued auto-merge, falling back to an immediate squash merge). Previously the PR was only created and left open until a maintainer merged it by hand, which caused several releases to sit with a stale/missing CHANGELOG onmain. -
#714
7cad2f4Thanks @sbroenne! - Faster commits for docs-only changes. The pre-commit hook now treats thegh-pages/documentation website as docs and skips the Release build, smoke tests and all release-packaging gates when a commit touches only documentation (Markdown,docs/,gh-pages/, changesets). Code commits still run the full validation suite, so nothing that ships is left unchecked — documentation edits just no longer wait minutes for binary/packaging gates that cannot be affected by them. -
#722
8e6d9f1Thanks @sbroenne! - More reliable Python in Excel results.pythoninexcel get-resultnow detects when the Microsoft-hosted Python backend has finished computing by reading Excel's calculation state and the cell's#BUSY!placeholder directly, instead of guessing based on whether the value looked "stable" across repeated reads. The old heuristic could lock onto a stale placeholder and return the wrong value, which is why it needed retry loops to be dependable. A singleget-resultcall now converges deterministically, and the default wait was raised from 15s to 30s to comfortably cover cold-start round-trips. -
#725
2b2b5dfThanks @sbroenne! - Reduced MCP Server telemetry noise and cost. The MCP Server no longer reports the .NET runtime's built-in HTTP-client connection-pool metrics (http.client.open_connections,http.client.active_requests,http.client.connection.duration,http.client.request.time_in_queue,http.client.request.duration) to Application Insights. These were emitted automatically by the telemetry SDK regardless of actual traffic and accounted for the large majority of telemetry ingestion volume, without providing any useful signal for this tool.
[1.9.4] - 2026-07-10¶
Patch Changes¶
-
#706
987b021Thanks @sbroenne! - Add a short "Also building PowerPoint decks?" tip right after the README's hero section, linking to PowerPoint MCP Server, mirroring the same repositioning done on the docs homepage. -
#702
08d2ec6Thanks @sbroenne! - Release automation hardening: The post-release step that opens a PR to commit the compiledCHANGELOG.mdno longer silently swallows failures. During the first live run of the new changesets-based release pipeline, this step failed (the repo didn't allow Actions to create pull requests) but was marked as a passing step, which is exactly the kind of silent failure the new pipeline was built to eliminate. The repo setting has been fixed and the step now fails the release run loudly if it can't create the PR. -
#709
1d8b3cdThanks @sbroenne! - Fix JSON Schema array items format for Gemini API compatibility (#672)
Removes nullable: true from array nodes and adds explicit type: string fallback for C# object nodes. This prevents MCP clients from emitting missing types or union schemas that the strict Gemini API validator rejects.
- #705
bf54607Thanks @sbroenne! - Move the "Also building PowerPoint decks?" sister-project tip on the docs homepage to appear directly under the hero section (success callout + intro video) instead of at the bottom of the page, and simplify its wording so it doesn't depend on the Key Features section that now follows it.
[1.9.1] - 2026-07-09¶
Patch Changes¶
- #699
0e1c4ebThanks @sbroenne! - Changelog generation now uses changesets (#698): Each PR adds a small, human-written note describing what changed for users, and these notes are compiled automatically intoCHANGELOG.mdand the GitHub Release notes when a new version ships. This replaces the old manual process, which had let several releases' worth of changes sit mislabeled as "Unreleased" for months. The changelog itself has also been cleaned up — the mislabeled entries were consolidated and condensed into clearer, less technical summaries.
[1.9.0] - 2026-07-08¶
Note: Entries below were previously stuck under
[Unreleased]for several releases (v1.8.64–v1.9.0) due to a broken auto-changelog step (see Release Strategy for the fix); they have already shipped and are consolidated here under the last version that included them.
Added¶
- Python in Excel (
=PY()) support (#691): Newpythoninexceltool lets you write and read=PY()formulas — write Python code into a cell and read back its computed value. Requires a licensed Microsoft 365 account with Python in Excel enabled and internet access.
Changed¶
- Excel automation now uses Microsoft's official 16.x interop assembly, fully embedded (#559): Improves reliability and removes a class of "missing office.dll" startup failures on machines without the exact matching Office version installed.
- Routine dependency updates across the .NET and VS Code extension toolchains to keep packages current and free of known vulnerabilities.
Fixed¶
- MCP tool schemas now work with Gemini-based clients: Optional array-type parameters (e.g. range values, formulas, table rows) were rejected by Gemini with an HTTP 400 error; schemas are now generated in a form all MCP clients accept.
- Documentation now consistently reports accurate tool/operation counts (26 tools / 232 operations), with an automated check preventing future drift.
- VBA commands no longer misreport unrelated COM errors as "VBA trust access is not enabled" (#671): the error is now only shown when trust is actually disabled; other failures surface with real diagnostics instead.
- MCP Server and CLI no longer emit stray log noise on startup (#559) that could interfere with output parsing.
- Excel session startup timeouts are shorter (120s) and error messages more actionable (#559), with clearer guidance when a prompt, sign-in dialog, or IRM policy is the likely cause.
- Better diagnostics for
Specified cast is not validstartup errors on Office Click-to-Run installs (#559). namedrange listno longer crashes on workbooks with hidden Power Query-generated names (#653).
[1.8.63] - 2026-05-20¶
Fixed¶
-
MCP
namedrange listandchart listno longer return raw arrays or risk closing the session (#653): Both list commands now return standard structured result envelopes withsuccessand item collections, keep the active session usable after listing empty or populated workbooks, omit hidden/internal Excel names fromnamedrange list, cap large named-range value previews, and normalize returned named range values to JSON-safe types before serialization. -
Release workflow
dotnet packfailure for CLI and MCP Server NuGet packages: The dependency-update PR added<RuntimeIdentifiers>win-x64</RuntimeIdentifiers>to both tool csproj files, which combined withPackAsTool=truerouteddotnet packthrough the RID-aware publish path and made it look forbin/Release/net10.0-windows/win-x64/outputs. The CI release workflow builds each project per-csproj without a runtime flag and writes plainbin/Release/net10.0-windows/, so pack failed with MSB3030. Removed the property fromExcelMcp.CLI.csprojandExcelMcp.McpServer.csprojand documented why it must not be re-added; the standalone-exe publish step still passes the runtime on the command line. -
Range merge info no longer fails on multiple separate merged regions (#647):
range_format get-merge-infonow handles Excel'sDBNull/Variant Null response fromRange.MergeCellswhen a queried range contains heterogeneous merge state, and returns distinctmergedRangesfor merge areas contained in the range. -
CLI daemon and session lifecycle hardening for rapid open/close cycles: Session operations now use atomic validate-and-begin tracking with close-begun state rejection to prevent operation interleaving; save and dispose operations run outside the per-session lock to prevent daemon/reopen stalls; failed teardown quarantines the session instead of reporting "already closed"; session dispose precedes unregister with quarantine on failure.
Workbooks.Opennow includes explicit options to suppress link updates, read-only, notify, and MRU prompts during rapid reopen cycles. In-flight RPC connections are tracked and drained on service shutdown; service disposal runs in finally even when accept loop or RPC tasks fault. Pipe disconnect/shutdown handling is hardened with properIsConnectedchecks. CLI service task faults are observed and surfaced as non-zero exit codes; service disposal moved to finally block. Daemon startup readiness now waits for an actual ping/ready signal from the daemon, not just process spawn. Added regression tests for daemon lifecycle, session close operations, and diagnostics improvements. -
Intermittent session loss and daemon startup failures during Excel automation (#645): Excel COM disconnects such as
RPC_E_DISCONNECTEDare now classified as fatal session loss, dead sessions are cleaned up consistently during save/close and service dispatch, andexcelclidaemon startup/connection-loss messages provide clearer recovery guidance. Screenshot capture is also hardened with additional window activation,CopyPicturefallback modes, and range-copy fallback when Excel's rendering clipboard path is temporarily unavailable. -
PivotTable numeric value fields with currency formatting no longer get misclassified as text (#635):
pivottable_field list-fieldsandadd-value-fieldnow use Excel's PivotField data type metadata before falling back to sampled PivotItem captions, so formatted numeric table columns such asAmountcan be summed correctly instead of being rejected as Text-only fields. -
MCP Server stdio logging no longer corrupts JSON-RPC stdout (#636): Console logging is now configured so all log levels are routed to stderr, keeping stdout reserved exclusively for MCP JSON-RPC frames even if logging configuration is overridden. CLI diagnostics and non-result errors now follow the same stdout-safe convention, keeping stdout reserved for command results and JSON payloads.
-
Dependency freshness refresh across .NET and VS Code extension toolchain: Updated central package pins for stale transitive .NET dependencies (including MessagePack 3.1.4 and netstandard support packages) and refreshed VS Code extension type dependencies (
@types/node,@types/vscode) with regenerated lockfile so dependency audits report fully up-to-date packages. -
CLI timeout parameter parsing now correctly interprets numeric values as seconds (#640): The
--timeoutparameter for commands likedatamodel refreshincorrectly parsed numeric values (e.g.,--timeout 600) as days instead of seconds. Numeric timeouts are now interpreted as seconds, while TimeSpan format (e.g.,00:10:00) is still supported. This fix applies to all timeout parameters across data model, power query, and connection refresh operations. -
Remote DAX and M formatting is now explicit opt-in (#601):
powerquery create/updateanddatamodel create-measure/update-measureno longer send formulas to remote formatter services by default. M code and DAX formulas are preserved as provided (with Excel locale separator translation for DAX), and callers must setformatMCode=trueorformatDax=trueto opt in to remote formatting via powerqueryformatter.com or daxformatter.com. -
CLI daemon startup stability: Hardened
excelclidaemon startup against stale named mutex handles and simultaneousservice startcalls. Startup is now serialized with a process-wide semaphore, daemon liveness checks ignore unowned/abandoned mutexes, and the daemon can take over stale mutex handles instead of exiting as a duplicate instance. Added ServiceDaemon regressions for stale mutex recovery and concurrent start requests, plus a parallel multi-file CLI E2E workflow that exercises independent workbook sessions through the same daemon. -
Reverted CLI daemon auto-start retry behavior (#627): Removed the retry loop and wrapped cancellation/error-message changes from the previous
excelclidaemon startup update, restoring the single-start behavior while preserving the existing daemon readiness checks. -
Data Model MSOLAP class-registration diagnostics now identify the provider Excel uses (#624):
datamodel.evaluateanddatamodel.execute-dmvpreviously mapped every0x80040154from Excel's Data Model ADO connection to a generic "MSOLAP is not installed" message. The error now reports the specific provider parsed fromModelConnection.ADOConnection.ConnectionString, redacts connection-string credentials, and explains that Excel's COM provider selection is not affected by copying ADOMD/MSOLAP DLLs beside the server executable. -
CLI skill guidance now matches the actual CLI surface: Removed MCP-style shared reference files from the
excel-cliskill package so agents no longer see examples likerange_format(action: ...)or underscore tool names when they should useexcelcli -q <command> <action> --kebab-case-flags. The CLI skill now promotesreferences/cli-commands.mdas the command/action/parameter source of truth, documents the real command-group naming convention, and packaging scripts no longer copy MCP shared references into the CLI skill. Added skill-generation regressions to keep the CLI references CLI-specific. -
Screenshot capture now works reliably for non-active sheets and offscreen ranges (#563, #583):
screenshot capture-rangeandcapture-sheetcould export mostly blank images when the target content lived offscreen or on a non-active sheet. The capture path now normalizes minimized Excel windows, scrolls/selects the target range beforeCopyPicture, retries paste operations, and creates the temporary export chart at an onscreen origin so Excel exports the actual captured content instead of a white artifact. Added focused regressions for repeated offscreen captures plus direct non-active-sheet and offscreen-range image-content validation. -
Procedural VBA hardening across reopened workbooks, MCP, and CLI: Fixed a reopened
.xlsmregression wherevba runcould fail after reopening an existing macro-enabled workbook even thoughvba liststill succeeded.ExcelBatchnow keeps macro execution available for explicit VBA operations on reopened.xlsmsessions, andvba runno longer pre-gates on AccessVBOM, preserves late-bound COM invocation, restoresAutomationSecurityafter explicit execution, and treats missing run parameters as an empty list instead of throwing. Added reopened-workbook Core regressions (list -> run,update -> run,delete -> import -> run), an end-to-end MCPvba runproof on a real.xlsmworkbook, and a dedicated CLI transport proof that verifies both workbook side effects and persisted state after reopen. -
CLI required-parameter validation now rejects whitespace-only values: The shared required-parameter guard treated whitespace-only strings as valid, allowing inputs like
vba run --procedure-name " "to slip through CLI validation and reach Excel COM. Fixed by upgrading the shared validator to reject null, empty, and whitespace-only values, and added a focused CLI regression for whitespace-onlyprocedureName. -
vba(action: 'run') fails on Office 365 Click-to-Run (#550):
vba.runused early-bound PIA callApplication.Run()which triggered assembly resolution ofMicrosoft.Vbe.Interop.dll— a DLL not available on Click-to-Run Office installations without the Visual Studio Office workload. Switched to late-bound COM dispatch viaType.InvokeMember, matching the pattern used by all other VBA operations. Also fixed parameter spreading — multiple macro arguments are now passed as individual COM parameters instead of a single array. -
Session startup "Specified cast is not valid" now includes COM diagnostic info (#559): When
Activator.CreateInstancesucceeds but PIA interface cast fails (typically due to COM registration mismatches on certain Office Click-to-Run configurations), the error message now includes the resolved CLSID, PIA interface GUID, process bitness, and Office install path. This helps diagnose machine-specific COM registration issues without requiring remote debugging. -
Enterprise-managed devices: auth/sign-in pop-ups could freeze session startup: On enterprise-managed Windows devices, Excel sometimes shows modal authentication or sign-in dialogs during startup. Because ExcelMcp started Excel hidden, these dialogs were invisible and blocked COM calls indefinitely (SERVERCALL_REJECTED). Fixed with two changes: (1)
OleMessageFilter.RetryRejectedCallnow retriesSERVERCALL_REJECTEDresponses for up to 120 seconds instead of cancelling immediately, giving users time to interact with auth dialogs. (2)ExcelBatchnow starts Excel visible during session open so auth dialogs are interactable, then hides it after all workbooks are loaded ifshow=falsewas requested. -
Failed session startup could leave a hidden Excel.exe process behind and keep the workbook locked:
ExcelBatchcreated the hidden Excel instance before validating/opening the workbook, but if startup failed early (for example because the workbook was locked) the STA-thread cleanup only looked at the promoted instance fields, not the startup locals. The constructor also surfaced the startup exception before the STA cleanup thread had fully finished. Fixed by cleaning up from startup locals when field promotion never happened and waiting for failed-startup cleanup to complete before rethrowing the session-open error. -
Power Query privacy/firewall failures were flattened into generic service errors or hangs instead of surfacing a stable diagnostic: Core now classifies recognized Power Query failures into structured categories such as
Privacy,Expression,Connectivity, andAuthenticationviaPowerQueryCommandException. The service, CLI, and MCP layers now preserveerrorCategoryin their responses, and refresh timeouts on firewall-prone query formulas are reported as likely privacy issues instead of leaving callers blind. Added a privacy-safe synthetic firewall repro in Core, a CLI regression for structured privacy output, and real verification against a representative real-world workbook/query scenario. -
Synchronous COM refresh follow-up stability (#544):
powerquery updatestill used a standalone synchronous refresh path while related Data Model and DAX-backed table refresh operations continued to rely on callback-sensitive COM patterns. Fixed by routingpowerquery updatethrough the shared COM-safe refresh helper, replacingEnterLongOperation()in Data Model refresh with pending-cancellation handling, and wrapping DAX table refresh calls with the sameOleMessageFilter.SetPendingCancellationToken(...)pattern. Added both Core and MCP regression coverage forpowerquery update, and the full Power Query feature slice now passes locally.
Added¶
-
LLM integration test framework overhaul: Migrated
llm-tests/frompytest-aitesttopytest-skill-engineeringwith a clean full rewrite and no backward-compatibility shim. The new harness usesCopilotEvalfor both CLI and MCP workflows, enforces GitHub Copilot authentication checks, and standardizes explicit timeout and turn limits. All LLM workflow scenarios were rewritten around natural-language prompts and outcome-focused assertions, with active docs and instructions updated to match the new framework and workflow. -
Power Query stability diagnostics (#560): Added DIAG traces throughout the shutdown/dispose/PQ refresh paths (gated by
EXCELMCP_DIAGNOSTICS=1environment variable) to aid future debugging of intermittent MashupContainer.Loader.exe crashes. NewSessionDiagnosticshelper class for conditional diagnostic output. -
CLI backward-compatibility aliases: Added
--sheetand--rangeshort aliases in the CLI source generator for backward compatibility with pre-generator parameter names (--sheet-nameand--range-addressremain primary). -
Crash isolation test infrastructure (#560): Added
ExcelCrashIsolationTests(4 experiments isolating MashupContainer crash residue and connection property defaults),PowerQuerySerialWorkflowRegressionTests(two-pass serial PQ refresh workflow),ParameterAliasBackwardCompatTests, and supporting fixtures (CliPowerQueryWorkflowFixture, enhancedCliProcessHelper). -
MCP tool cancellation could leave the in-process server wedged until Excel was killed manually: The MCP
ServiceBridgecreated timeout and cancellation tokens but never applied them to the in-process service call, and tool methods did not flow request cancellation into the bridge. When VS Code cancelled a long-running tool call, the Excel COM work could continue on a blocked batch thread while the poisoned session remained in the server, making subsequent requests appear hung. Fixed by running bridge dispatch on a separate task, force-closing the affected session or resetting the service on timeout/cancellation, and propagating request cancellation from MCP tool methods through the shared tool base into the bridge. -
Remaining synchronous Power Query and connection load paths could still deadlock despite the earlier refresh fix:
powerquery evaluate,powerquery load-to,powerquery createload destinations, and connection worksheet/data refreshes still wrappedQueryTable.Refresh(false)orconnection.Refresh()inEnterLongOperation(). That reused the same callback-rejection pattern that previously deadlocked normal Power Query refresh: Excel and MashupHost could not deliver the inbound COM callbacks needed to complete the synchronous load. Fixed by removingEnterLongOperation()from those paths too and switching them to the sameOleMessageFilter.SetPendingCancellationToken(...)pattern used by the repaired Power Query refresh implementation. -
powerquery refreshcould hang indefinitely (permanent COM deadlock):EnterLongOperationwas called beforeQueryTable.Refresh(false)andconnection.Refresh()in the PowerQuery refresh path.EnterLongOperationsets_isInLongOperation=true, causingHandleInComingCallto returnSERVERCALL_RETRYLATERfor ALL inbound COM calls — including essential MashupHost callbacks Excel needs to complete the synchronous refresh. This created a permanent mutual deadlock (observed: 30-minute hang in production on a worksheet-loaded query). Fixed by removingEnterLongOperationfrom both refresh paths and registering aCancellationTokenwithOleMessageFiltersoMessagePendingreturnsPENDINGMSG_CANCELCALLwhen the token fires, enabling clean STA thread exit. Trade-off: Elevated CPU (~88%) during refresh is accepted as preferable to a permanent hang. The CPU spin regression tests (PowerQueryRefreshCpuSpinTests) are now intentionally expected to fail — they are excluded from CI viaRunType=OnDemandand updated to document this known trade-off. -
Structural COM stability improvements: Addressed root cause of intermittent operation hangs and orphan Excel processes.
ExcelBatch.Execute()now automatically suppressesScreenUpdatingvia a newExcelWriteGuard, reducing COM callbacks and improving bulk operation performance. Unified multi-workbook shutdown to use the resilientExcelShutdownService(was bare COM calls without retry). Added retry logic to workbook Save (for file locks) and Close (for COM busy errors). Excel process ID capture now retries 3 times with 500ms delay to prevent force-kill from being permanently disabled under load. Added safety-netProcessExithandler that kills tracked Excel processes on unexpected .NET process termination. -
Operation hangs with error handling improvements: Hardened the service dispatch layer so that cleanup failures during error handling no longer propagate secondary exceptions. Dead Excel sessions are now automatically detected and cleaned up in all exception paths. Power Query Evaluate
Refresh()is now wrapped withEnterLongOperationto prevent CPU spin during M code evaluation. Added cancellation checks to COM collection loops for large workbooks. -
PivotTable test suite no longer hangs: Fixed a test fixture deadlock caused by using both
IClassFixtureand a collection fixture on the same test class, which created concurrent Excel sessions that deadlocked. Consolidated to a single shared fixture — all 102 PivotTable tests now pass reliably. -
range set-formulasandrange get-formulasinjected@implicit intersection operator inside Excel Tables: The legacyRange.FormulaCOM property automatically prepends@to formulas inside structured tables, causing#FIELD!errors with custom functions that return entity cards (e.g., Office Add-in rich data types). Switched toRange.Formula2(Excel 365+) which respects dynamic array semantics and does not inject@. -
Connection
refreshand PowerQueryrefresh/refresh-allcould hang or miss cancellation on async data sources:WorkbookConnection.Refresh()returns immediately when the provider runs asynchronously, leaving the STA thread without a way to detect completion or honour the operation timeout. Both Connection and PowerQuery refresh now set the sub-connection'sBackgroundQuery = true, callRefresh(), then poll.Refreshingin a loop that responds to cancellation and calls.CancelRefresh()when the timeout fires.powerquery refresh-allwas also updated to use the same robustRefreshConnectionByQueryNamepath (which includesQueryTable.Refresh(false)for worksheet queries) instead of a bareconnection.Refresh(). -
CLI and MCP Server version always reported as 1.0.0 (#523): The update check and About dialog always showed version 1.0.0 instead of the actual installed version. Fixed by removing hardcoded version properties from project files so they inherit from the central version configuration.
-
table appendJsonElement COM marshalling (#519): Row values containing booleans or strings were passed as rawSystem.Text.Json.JsonElementtocell.Value2, which COM interop cannot marshal to a Variant. Fixed by callingRangeHelpers.ConvertToCellValue()(the same fix already present inrange set-values) to unwrapJsonElementto native types before assignment. -
--values/--rowsinline JSON: PowerShell quote-stripping + stdin sentinel (#521): WindowsCreateProcessstrips inner double-quotes when PowerShell passes arguments to native executables, so--values '[["ACD Full Term",0.26]]'arrives as[[ACD Full Term,0.26]](invalid JSON). The generatedDeserializeNestedCollection<T>now: (1) emits a clear error message that mentions--values-fileand--values -as workarounds, and (2) supports a stdin sentinel — passing--values -(or--rows -) reads the JSON fromConsole.In, avoiding shell quoting entirely. -
Table
add-to-data-modelbracket column names block DAX formulas: Excel table columns with literal bracket characters in their names (e.g., from OLEDB import sources) cannot be referenced in DAX formulas after being added to the Data Model. Added newstripBracketColumnNamesparameter (default:false). Whenfalse, bracket column names are reported inbracketColumnsFoundso users are aware of the issue. Whentrue, the source table column headers are renamed (brackets removed) before adding to the Data Model, enabling full DAX access. Theadd-to-data-modelresult now includesbracketColumnsFoundandbracketColumnsRenamedfields. -
PowerQuery
load-to data-modelsilently succeeded without loading data:powerquery load-towithdata-modeldestination returnedsuccess: truebut the table never appeared in the Power Pivot Data Model. The connection was registered viaConnections.Add2()butconnection.Refresh()was never called, so data was not actually loaded. Fixed by callingconnection.Refresh()after creating the connection, consistent with howload-to worksheetworks. -
chartconfig set-data-labelsthrew raw COMException on Line charts with bar-only position: SettinglabelPositiontoInsideEnd,InsideBase, orOutsideEndon a Line chart threw a raw COM exception with no user-friendly explanation. These positions are only valid for bar, column, and area chart types. Fixed by catching the COMException and throwing anInvalidOperationExceptionwith a descriptive message explaining which chart types support each position, consistent with howShowPercentagehandles unsupported chart types. -
rangeformat format-rangeparameter documentation listed wrong valid values forborderStyle: TheborderStyleparameter help incorrectly listedthin,medium,thick,dashed, anddottedas valid values — those areborderWeightvalues. The validborderStylevalues arecontinuous,dash,dot,dashdot,dashdotdot,double,slantdashdot, andnone. Documentation corrected. -
rangeformat format-rangerejectedmiddleas a vertical alignment value: TheverticalAlignmentparameter only acceptedcenterbut not the common aliasmiddle. Both now accepted and produce identical center-vertical alignment.
Changed¶
-
screenshotCLI--outputflag documentation clarified: The--output <path>flag saves the screenshot directly to a PNG or JPEG file instead of printing base64 JSON to stdout. This was already functional but was documented as "For CLI: saved to file" without explaining that--outputis required to save to a file. -
office.dll not found when opening workbooks with connections/data model (#487 follow-up): The
AssemblyResolvehandler only searchedAppContext.BaseDirectoryforoffice.dll. In NuGet-installed tool deployments,office.dllis never copied there (it is only present in local dev builds viaDirectory.Build.targets). Opening workbooks with external connections, Power Query, or a Data Model triggered code paths that caused the CLR to loadMicrosoft.Office.Interop.Excel.dll, which in turn requestedoffice.dll v16. The handler returnednull→FileNotFoundException. Fixed by adding fallback search order: (1)AppContext.BaseDirectory, (2) .NET Framework GAC v16, (3) GAC v15 (accepted by CLR as substitute), (4) Office 365 click-to-run installation directories.Directory.Build.targetsalso updated to prefer v16 GAC when available.
Changed¶
- Migrated Excel COM interop to strongly-typed Microsoft Office PIA: Replaced dynamic late-binding throughout the codebase with strongly-typed
Microsoft.Office.Interop.Exceltypes for improved reliability and compile-time error detection. Power Query APIs (Workbook.Queries) and VBA project access remain as dynamic calls where PIA coverage is unavailable.
Fixed¶
-
All Excel sessions crashed with FileNotFoundException for office.dll (#487): After PIA migration,
ExcelBatchSTA thread declaredtempExcelas typedExcel.Application. Casting a typed COM interop object to(dynamic)retains PIA type metadata; the DLR then resolvedMsoAutomationSecurityfromoffice.dll(Microsoft.Office.Core v16.0.0.0) at runtime, which is not bundled with the deployed .NET tool. Every session (create and open) crashed before opening any workbook. Fixed by casting to(object)first before(dynamic)to force pure IDispatch binding. Also removed a broken<Reference>to office.dll with a wrong v15.0.0.0 hint path (runtime required v16.0.0.0). -
STA Deadlock on Conditional Formatting and Other Re-entrant COM Operations:
OleMessageFilter.MessagePendingwas returning2(PENDINGMSG_WAITNOPROCESS) instead of1(PENDINGMSG_WAITDEFPROCESS). When Excel fires a re-entrant callback (e.g.Calculate/SheetChangeevent) during aFormatConditions.Add()call,WAITNOPROCESSblocked COM from delivering the callback — Excel waited for the callback while the STA thread waited for Excel, causing a permanent deadlock. Any operation that triggers Excel's internal event loop (conditional formatting on formula cells, PivotTable refresh, Power Query refresh) was affected. Fixed by returning1so COM delivers pending inbound calls during the outgoingIDispatch.Invoke. - Hung Session After Tool Call Cancellation: When a user cancelled a tool call while the STA thread was stuck in
IDispatch.Invoke,WithSessionAsynchad nocatch (OperationCanceledException)handler — the session remained alive with a permanently blocked STA thread, causing all subsequent operations to hang. Fixed by addingcatch (OperationCanceledException)that force-closes the session (same pattern as the existingTimeoutExceptionhandler). -
Slow Fail on Successive Calls After Timeout/Cancellation: After a timeout or cancellation,
Execute<T>would queue new work on a permanently stuck STA thread, forcing each subsequent caller to wait for its own full timeout before failing. Fixed by adding a fail-fast pre-check: if_operationTimedOutis set, throwTimeoutExceptionimmediately. -
COM Apartment Boundary in SaveWorkbook (#482): Removed
Task.Run(() => workbook.Save())inExcelShutdownService— this marshalled the COM call from the STA thread to an MTA thread-pool thread, which is incorrect and fragile in .NET 8+. Save is now called directly on the STA thread, which is always the case insideExcelBatch.Execute(). - Wrong-Process Force-Kill from Fallback PID (#482): Removed the "newest EXCEL.EXE process" fallback PID detection in
ExcelBatch. When theHwndpath fails, force-kill is now disabled with a warning rather than risking killing an unrelated Excel workbook the user has open. - Redundant
Thread.Sleepin Dispose (#482): Removed 100 msThread.SleepfromExcelBatch.Dispose(). The preceding_shutdownCts.Cancel()call immediately wakes the STA thread fromWaitToReadAsync, making the sleep redundant and adding unnecessary latency. - Exception Type Lost in Service Error Responses (#482):
ExcelMcpServicetop-levelcatchblocks now return"{ExType}: {ex.Message}"instead of justex.Message, making unexpected failures distinguishable without a full stack trace. - COM Timeout Hang — ExcelBatch now force-kills Excel process on timeout instead of hanging indefinitely on
WaitForSingleObject; ExcelMcpService catchesTimeoutExceptionto prevent unhandled exceptions - FileSystemWatcher CPU Spin — Disabled
IConfigurationreload-on-change in MCP Server to prevent 85%+ CPU usage fromFileSystemWatcherpolling - Process Handle Leak — Fixed
Processobject not being disposed inExcelBatch.ForceKillExcelProcess() - Configuration Sources Cleared — Re-add environment variables and command-line args after clearing config sources (were accidentally removed)
- Source Generator Type Aggregation — Fixed nullable type upgrade logic in
ServiceInfoExtractorthat could lose type information across partial interfaces - Chart Trendline Parameter Name — Renamed
type→trendlineTypeinIChartConfigCommandsto avoid COM parameter ambiguity - Chart Style Error Message — Improved
SetStyleerror message to show valid range whenstyleIdis out of bounds - Chart InvalidOperationException — Added catch for
InvalidOperationExceptionin chart appearance commands
Changed¶
- Chart Test Performance — Refactored 80 chart tests to share a single pre-populated fixture file via
File.Copy()instead of creating individual files via COM, eliminating ~74 redundant Excel sessions
Added¶
- Screenshot quality parameter: New
qualityparameter on screenshot tool (High/Medium/Low). Default isMedium(JPEG at 75% scale, ~4–8x smaller than original PNG). UseHigh(PNG, full scale) when fine text needs careful inspection,Low(JPEG at 50% scale) for layout overviews. - Window Management Tool (#470): New
windowtool with 9 operations to control Excel window visibility, position, state, and status bar — enabling "Agent Mode" where users watch AI work in Excel show/hide— Toggle Excel visibility (syncs with session metadata)bring-to-front— Bring Excel to foregroundget-info— Query window state (visibility, position, size, foreground status)set-state— Set normal / minimized / maximizedset-position— Set window left, top, width, heightarrange— Preset layouts: left-half, right-half, top-half, bottom-half, center, full-screenset-status-bar— Display live operation status text in Excel's status barclear-status-bar— Restore default status bar text- MCP Server proactively asks users about showing Excel for visual tasks (charts, dashboards)
- Agent Mode, Presentation Mode, and Debug Mode workflow guidance
- CLI
--outputflag for all commands: Save command output directly to a file. Screenshot commands automatically save decoded PNG images instead of base64 JSON - CLI Batch Mode (#463): New
excelcli batchcommand executes multiple CLI commands from a JSON file in a single process launch - Session auto-capture from
session.open/session.create, auto-clear onsession.close - NDJSON output for machine-readable results
--stop-on-errorflag to halt on first failure (default: continue all)
Fixed¶
- Screenshot reliability: Screenshots now work reliably regardless of whether Excel is visible or hidden. Added automatic retry for transient capture failures
- CLI
--helpcrash (#463): Fixed Spectre.Console markup crash when parameter descriptions contain[/]characters (e.g.,[A1 notation]) - Source generator tool filtering: Fixed
mcpTool ?? "unknown"fallback; addedHasMcpToolAttributeto correctly filter MCP-only tools - Skills docs parameter names: Fixed wrong CLI parameter names in
conditionalformat.mdandslicer.mdreference files - Auto-save on shutdown: Sessions are now auto-saved before closing when MCP server exits or client disconnects, preventing silent data loss from session timeouts
- Session creation resilience: Added retry logic (Polly) for transient COM failures (
CO_E_SERVER_EXEC_FAILURE,RPC_E_CALL_FAILED) during Excel process startup under resource constraints
[1.7.2] - 2026-02-15¶
Added¶
-
In-Process Service Architecture (#454): MCP Server and CLI each host ExcelMCP Service in-process instead of sharing a separate service process
-
Eliminates service discovery failures (especially NuGet tool installs) and cross-process coordination
-
Separate CLI NuGet Package (#452): CLI published as
Sbroenne.ExcelMcp.CLIalongside MCP Server - Service version negotiation: client validates exact version match with running service on connect
Fixed¶
- Build Workflow Path (#455): Fixed target framework path (
net10.0→net10.0-windows) and formatting errors in build workflow
[1.7.1] - 2026-02-09¶
Fixed¶
- Release Workflow (#451): Moved all external publishing steps after builds succeed to prevent partial releases
[1.6.10] - 2026-02-06¶
⚠️ BREAKING CHANGES¶
See BREAKING-CHANGES.md for complete migration guide. LLMs pick up these changes automatically via tools/list (MCP) and --help (CLI).
- Tool Names Simplified: Removed
excel_prefix from all 23 MCP tool names (e.g.,excel_range→range,excel_file→file). Titles also shortened (e.g.,"Chart Operations"). VS Code extension server name →excel-mcp.
Added¶
- CLI Code Generation (#433): CLI commands auto-generated from Core via Roslyn source generators — guarantees 1:1 MCP/CLI parity
- Calculation Mode Control (#430): New
calculation_modetool/CLI command (automatic, manual, semi-automatic modes; workbook/sheet/range scopes) - Installation via npx (#449): Added
npx add-mcpas primary installation method in docs
Changed¶
- MCP Prompt Reduction (#442): Reduced prompts from 7 to 4 with ~76% content reduction; removed
excel_prefix from prompt names - VS Code Extension: Self-contained publishing (no .NET runtime needed), CLI removed from extension, skills use
chatSkillscontribution point - LLM Tests (#446): Migrated to pytest-aitest v0.3.x from PyPI with unified MCP/CLI test suite
- Release Workflow (#443): Switched to workflow_dispatch with version bump UI; added stale issue workflow
- Terminology: "Daemon" → "ExcelMCP Service" throughout docs
- MCP SKILL template (#448): Added Workflow Checklist table for quick reference (open → create → write → format → save)
- CLI SKILL template (#448): Added "List Parameters Use JSON Arrays" to Common Pitfalls section
- Slicer reference doc: Added CLI JSON Array Quoting section with PowerShell escaping examples
- MCPB: Removed agent skills from Claude Desktop bundle
Fixed¶
- MCP Server Release Path (#450): Corrected package path to
net10.0-windows - Broken Emoji Characters: Fixed corrupted emoji in README files
Removed¶
- Glama.ai Support: Removed Docker-based deployment (
Dockerfile,glama.json,.dockerignore, docs)
[1.6.9] - 2026-02-04¶
Added¶
- CLI Daemon Improvements: Enhanced tray icon experience with better update management and save prompts
- Added "Update CLI" menu option when updates are available (detects global vs local .NET tool install)
- Added save dialog (Yes/No/Cancel) when closing individual sessions from tray
- Added save dialog (Yes/No/Cancel) when stopping daemon with active sessions
- Removed redundant disabled "Excel CLI Daemon" status menu entry
- Toast notifications now mention the Update CLI menu option for easier access
- Update command shows in confirmation dialog before execution
- Auto-restart daemon after successful update
Fixed¶
- PivotTable RPC Disconnection (#426): Fixed "RPC server is unavailable (0x800706BA)" error during rapid OLAP PivotTable field operations
- ROOT CAUSE:
RefreshTable()called after each field operation triggered synchronous Analysis Services queries - FIX: Removed RefreshTable() from field manipulation methods (AddRowField, AddColumnField, AddFilterField, RemoveField, SetFieldFunction)
- Field changes now take effect immediately without blocking AS queries
- Call
pivottable(refresh)explicitly to update visual display after configuring fields - Applies to both OLAP (Data Model) and regular PivotTables for consistency
[1.6.8] - 2026-02-03¶
Changed¶
- JSON Property Names Reverted (#417): Removed short property name mappings for better readability
- JSON output now uses camelCase C# property names (e.g.,
success,errorMessage,filePath) - Removed 433
[JsonPropertyName]attributes from model files - LLMs and humans can now read JSON without consulting a mapping table
Fixed¶
-
CLI Banner Cleanup: Removed PowerShell warning from startup banner
-
Guidance moved to skill documentation (Rule 2: Use File-Based Input)
-
CLI output is now cleaner and less cluttered
-
CLI Missing Parameter Mappings (#423): Fixed CLI commands silently ignoring user-provided values
- ROOT CAUSE: Settings properties defined but not passed to daemon in args switch statements
- FIX: Added missing parameter mappings for affected commands:
connection set-properties: Addeddescription,backgroundQuery,savePassword,refreshPeriodpowerquery create/load-to: AddedtargetSheet,targetCellAddresschart create-*andmove: Addedleft,top,width,heighttable append: Fixed to parse CSV into properrowsformatvba run: AddedtimeoutSeconds
- Added pre-commit check (
check-cli-settings-usage.ps1) to prevent future occurrences
[1.6.5] - 2026-02-03¶
- Dead Session Detection (#414): Auto-detect and cleanup sessions when Excel process dies
- ROOT CAUSE:
SessionManagernever checked if Excel process was alive, leaving dead sessions in dictionary - FIX:
GetSession(),GetActiveSessions(), andIsSessionAlive()now check process health and auto-cleanup ExcelBatch.Execute()validates Excel is alive before queueing operations- Users now get clear error: "Excel process is no longer running" instead of confusing timeouts
- Dead sessions no longer block reopening the same file
- Affects both CLI and MCP Server (shared
SessionManager)
[1.6.4] - 2026-02-03¶
Fixed¶
- COM Timeout with Data Model Dependencies (#412): Fixed timeout when setting formulas/values that trigger Data Model recalculation
- ROOT CAUSE: Excel's automatic calculation blocks COM interface during DAX recalculation
- FIX: Temporarily disable calculation mode (xlCalculationManual) during write operations
- Affected methods:
SetFormulas,SetValues,Table.Append,NamedRange.Write - Formulas like
=INDEX(KPIs[Total_ACR],1)now work without "The operation was canceled" error
[1.6.3] - 2026-02-03¶
Documentation¶
- M Code Identifier Quoting (#407): Added guidance for special characters in Power Query identifiers
- PowerQuery Eval-First Workflow (#405): Updated documentation with eval-first pattern
- CLI Command Name Fix (#403): Fixed CLI command name in agent skills installation docs
[1.6.2] - 2026-02-02¶
Fixed¶
-
Power Query Refresh Error Propagation (#399): Fixed bug where
refreshaction returnedsuccess: trueeven when Power Query had formula errors -
ROOT CAUSE:
Connection.Refresh()silently swallows errors for worksheet queries (InModel=false) - FIX: Now uses
QueryTable.Refresh(false)for worksheet queries which properly throws errors - Data Model queries (InModel=true) continue using
Connection.Refresh()which does throw errors -
Errors now surface clearly:
"[Expression.Error] The name 'Source' wasn't recognized..." -
Table Create Auto-Expand from Single Cell: Fixed issue where
table create --range A1created single-cell table - ROOT CAUSE: Excel's
ListObjects.Add()doesn't auto-expand from a single cell - FIX: Now uses
Range.CurrentRegionwhen single cell provided, capturing all contiguous data - Prevents Data Model issues where tables only contain header column
Added¶
-
Power Query Evaluate (#400): New
evaluateaction to execute M code directly and return results -
Execute arbitrary M code without creating a permanent query
- Returns tabular results (columns, rows) in JSON format
- Automatically cleans up temporary query and worksheet
- Errors propagate properly (e.g., invalid M syntax throws with error message)
-
Example:
excelcli powerquery evaluate --file data.xlsx --mcode "let Source = #table({\"Name\",...})" -
MCP Power Query mCodeFile Parameter: Read M code from file instead of inline string
-
New
mCodeFileparameter onpowerquerytool forcreate,update,evaluateactions - Avoids JSON escaping issues with complex M code containing special characters
-
File takes precedence if both
mCodeandmCodeFileprovided -
MCP VBA vbaCodeFile Parameter: Read VBA code from file instead of inline string
- New
vbaCodeFileparameter onvbatool forcreate-module,update-moduleactions - Handles VBA code with quotes and special characters cleanly
- File takes precedence if both
vbaCodeandvbaCodeFileprovided
[1.6.1] - 2026-02-01¶
Fixed¶
- CLI PackAsTool Workaround (#396): Fixed CLI packaging issue with net10.0-windows target
- CI Duplicate Paths (#394): Removed duplicate paths key in build workflow
[1.6.0] - 2026-02-01¶
Fixed¶
- MCPB Skills Key (#392): Removed unsupported 'skills' key from manifest
- Data Model MSOLAP Error (#391): Better error message when MSOLAP provider is missing
[1.5.14] - 2026-02-01¶
Added¶
CLI Redesign (Breaking Change)¶
-
Complete CLI Rewrite (#387): Redesigned CLI for coding agents and scripting - NOT backwards compatible
-
14 unified command categories with 210 operations matching MCP Server
- All commands now use
--sessionparameter (was positional in some commands) - Comprehensive
--helpdescriptions on all commands synced with MCP tool descriptions - All
--fileparameters support both new file creation and existing files - New
excelcli list-actionscommand to discover all available operations -
Exit code standardization (0=success, 1=error, 2=validation)
-
Quiet Mode:
-q/--quietflag suppresses banner for agent-friendly JSON-only output -
Auto-detects piped/redirected stdout and suppresses banner automatically
-
Version Check:
excelcli version --checkqueries NuGet to show if update available -
Session Close --save: Single
--saveflag for atomic save-and-close workflow -
Replaces separate save + close sequence for cleaner scripting
-
CLI Action Coverage Pre-commit Check: New
check-cli-action-coverage.ps1script - Ensures CLI switch statements cover ALL action strings from ActionExtensions.cs
- Prevents "action not handled" bugs from reaching production
- Validates 210 operations across 21 CLI commands
MCP Server Enhancements¶
-
Session Operation Timeout (#388): Configurable timeout prevents infinite hangs
-
New
timeoutSecondsparameter onfile(open)andfile(create)actions - Default: 300 seconds (5 minutes), configurable range: 10-3600 seconds
-
Applies to ALL operations within session; exceeding timeout throws
TimeoutException -
Create Action (#385): Renamed
create-and-opento simplercreateaction -
Single-action file creation and session opening
-
Performance: ~3.8 seconds (vs ~7-8 seconds with separate create+open)
-
PowerQuery Unload Action: New
unloadaction removes data from all load destinations - Keeps query definition intact while clearing worksheet/model data
Testing & Quality¶
-
LLM Integration Tests: Comprehensive pytest-aitest test suite for CLI
-
9 test scenarios covering all major Excel operations
- Chart positioning, PivotTable layout, Power Query, slicers, tables, ranges
-
Financial report automation workflow tests
-
Agent Skills: New structured skills documentation for AI assistants
skills/excel-cli/- CLI-specific skill with commands referenceskills/excel-mcp/- MCP Server skill with tools referenceskills/shared/- Shared workflows, anti-patterns, behavioral rules
Fixed¶
- Calculated Field Bug: Fixed PivotTable calculated field creation error
- COM Diagnostics: Improved error reporting for COM object lifecycle issues
Changed¶
- CLI timeout option uses
--timeout <seconds>(was--timeout-seconds) - All CLI commands now require explicit
--sessionparameter
[1.5.13] - 2026-01-24¶
Added¶
-
Chart Formatting (#384): Enhanced chart formatting capabilities
-
Data Labels: Configure label position and visibility (showValue, showCategory, showPercentage, etc.)
- Axis Scale: Get/set axis scale properties (min, max, units, auto-scale flags)
- Gridlines: Control major/minor gridlines visibility on chart axes
- Series Markers: Configure marker style, size, and colors for data series
-
8 new operations bringing total chart operations to 22
-
Chart Trendlines (#386): Statistical analysis and forecasting for chart series
- Add Trendline: Linear, Exponential, Logarithmic, Polynomial, Power, Moving Average
- List Trendlines: View all trendlines on a series
- Delete Trendline: Remove trendline by index
- Configure Trendline: Forward/backward forecasting, display equation and R² value
- 4 new operations bringing total chart operations to 26
[1.5.11] - 2026-01-22¶
Added¶
- Added Agent Skill to all artifacts
Changed¶
- MCPB Submission Compliance: Bundle now includes LICENSE and CHANGELOG.md per Anthropic requirements
- Documentation Updates: All READMEs updated with LLM-tested example prompts and accurate tool counts (22 tools, 194 operations)
[1.5.8] - 2026-01-20¶
Added¶
- Now available as a Claude Desktop MCPB Extension
[1.5.6] - 2026-01-20¶
Added¶
- PivotTable & Table Slicers (#363): New
slicertool for interactive filtering - PivotTable Slicers: Create, list, filter, and delete slicers for PivotTable fields
- Table Slicers: Create, list, filter, and delete slicers for Excel Table columns
- 8 new operations for interactive data filtering
[1.5.5] - 2026-01-19¶
Added¶
- DMV Query Execution (#353): Query Data Model metadata using Dynamic Management Views
- New
execute-dmvaction ondatamodeltool - Query TMSCHEMA_MEASURES, TMSCHEMA_RELATIONSHIPS, DISCOVER_CALC_DEPENDENCY, etc.
[1.5.4] - 2026-01-19¶
Added¶
- DAX EVALUATE Query Execution (#356): Execute DAX queries against the Data Model
- New
evaluateaction ondatamodeltool for ad-hoc DAX queries - DAX-Backed Excel Tables (#356): Create worksheet tables populated by DAX queries
- New
create-from-dax,update-dax,get-daxactions
[1.5.0] - 2026-01-10¶
Changed¶
- Tool Reorganization (#341): Split 12 monolithic tools into 21 focused tools
- 186 operations total, better organized for AI assistants
- Ranges: 4 tools (range, range_edit, range_format, range_link)
- PivotTables: 3 tools (pivottable, pivottable_field, pivottable_calc)
- Tables: 2 tools (table, table_column)
- Data Model: 2 tools (datamodel, datamodel_rel)
- Charts: 2 tools (chart, chart_config)
- Worksheets: 2 tools (worksheet, worksheet_style)
Added¶
- LLM Integration Testing (#341): Real AI agent testing using
pytest-aitest
Changed¶
- .NET 10 Upgrade: Requires .NET 10.0 instead of .NET 8.0
[1.4.42] - 2025-12-15¶
Added¶
- Power Query Rename (#326, #327): New
renameaction for Power Query queries - Data Model Table Rename (#326, #327): New
rename-tableaction for Data Model tables
[1.4.41] - 2025-12-14¶
Fixed¶
- Power Query Data Model Fix (#324): Fixed "0x800A03EC" error when updating Power Query in workbooks with Data Model present
[1.4.40] - 2025-12-14¶
Changed¶
- MCP SDK Upgrade (#301): Upgraded ModelContextProtocol SDK from 0.4.1-preview.1 to 0.5.0-preview.1
- Proper
isErrorsignaling for tool execution failures - Deterministic exit codes (0 = success, 1 = fatal error)
[1.4.37] - 2025-12-06¶
Changed¶
- PivotTable Performance (#286): Optimized
RefreshTable()calls
Added¶
- Data Model Members (#288): Added support for Data Model table members
[1.4.36] - 2025-12-06¶
Changed¶
- Documentation Updates (#290): Updated tool/operation counts
Fixed¶
- SEO Fix (#292): Fixed robots.txt sitemap URL
[1.4.35] - 2025-12-05¶
Added¶
- Data Model Relationships (#278): Full support for creating, updating, and deleting relationships
- Custom Domain (#276): excelmcpserver.dev
[1.4.34] - 2025-12-05¶
Fixed¶
- DAX Formula Locale Handling (#281): DAX formulas now work on European locales
[1.4.33] - 2025-12-04¶
Changed¶
- Atomic Cross-File Worksheet Operations (#273): New
copy-to-fileandmove-to-fileactions
[1.4.32] - 2025-12-04¶
Fixed¶
- OLAP PivotChart Creation (#267):
CreateFromPivotTablenow works with OLAP/Data Model PivotTables - Power Query LoadToBoth Detection (#271): Fixed incorrect detection
[1.4.31] - 2025-12-04¶
Fixed¶
- Locale-Independent Number Formatting (#263): Number and date formats now work on non-US locales
[1.4.30] - 2025-12-03¶
Fixed¶
- OLAP PivotTable AddValueField (#261): Fixed errors when adding value fields to Data Model PivotTables
Added¶
- Show Excel Mode: Open with
showExcel: trueto watch AI changes live
[1.4.28] - 2025-12-01¶
Fixed¶
- VS Code Extension Display Name (#257): Corrected MCP server display name
[1.4.25] - 2025-12-01¶
Changed¶
- 89% Smaller Extension Size (#250): Switched to framework-dependent deployment
[1.4.24] - 2025-12-01¶
Fixed¶
- Session Stability (#245): Fixed Excel MCP Server stopping due to network errors
Added¶
- PivotTable Grand Totals Control: Show/hide row and column grand totals
- PivotTable Grouping: Group dates by days/months/quarters/years
- PivotTable Calculated Fields: Create calculated fields with formulas
- PivotTable Layout & Subtotals: Configure layout form and subtotals visibility
- Total operations: 172
[1.4.0] - 2025-11-24¶
Added¶
- Excel Table Get Data (#234): New
get-dataaction returns table rows
Fixed¶
- Power Query Error Query Fix (#236): Fixed spurious "Error Query" entries
[1.3.0] - 2025-11-22¶
Added¶
- Chart Operations (#229): 15 new chart actions
- Connection Delete (#226): New
deleteaction - OLAP PivotTable Measures (#217): Auto-create DAX measures
Changed¶
- PivotTable Enhancements (#219, #220): Date/numeric grouping, calculated fields
[1.2.0] - 2025-11-17¶
Added¶
- Worksheet Reordering (#186): New
moveaction
Fixed¶
- MCP Server Crash Fix (#192): Fixed crashes with disconnected COM proxies
- Connection Create Fix (#190): Fixed COM dispatch error
[1.1.0] - 2025-11-10¶
Fixed¶
- File Lock Fix (#173): Fixed "file already open" errors
- LoadTo Silent Failure Fix (#170): LoadTo now properly fails on duplicates
- Validation InputTitle/Message (#167): Fixed empty values
- Power Query Update Fix (#140): Fixed M code merging instead of replacing
- SetFormulas/SetValues Fix (#199): Fixed "out of memory" error
- Data Model Loading Fix (#64): Fixed
set-load-to-data-modelfailures - Power Query Persistence (#42): Fixed load-to-data-model not persisting
Added¶
- PivotTable Discovery (#155): Improved LLM discoverability
- CLI Batch Support (#152): Batch mode for bulk operations
- Timeout Support (#131): Configurable timeouts for all tools
- QueryTable Support (#129): New
excel_querytabletool - Connection Create (#127): New
createaction - PivotTable from Data Model (#109): Create PivotTables from Power Pivot
Changed¶
- Numeric Column Names (#136): Column names can now be numeric
[1.0.0] - 2025-10-29¶
Added¶
- Initial release of ExcelMcp
- MCP Server with 11 tools and 100+ operations
- CLI for command-line scripting
- VS Code Extension for one-click installation
- Power Query management
- Data Model / Power Pivot support
- Excel Tables and PivotTables
- Range operations with formulas
- Chart creation
- Named ranges and parameters
- VBA macro execution
- Worksheet lifecycle management
- Batch operations for performance