Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

MCP Office Word

PYPI · MCP-OFFICE · SCANNED SEP 20

50-tool Word MCP server. Document assembly, tracked changes, and export. Windows-first.

Available components

−15 this week 60 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security36
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Install-script risk not yet assessed.Unverified
  • 3 of 22 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 97 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 8425 tokens (~125/item across 67 items; 65 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage78
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 22% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "run_macro" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 66 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the MCP Office Word server?

MCP Office Word runs locally as a PyPI package, launched with uvx mcp-office. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · mcp-office

# add to Claude Code
claude mcp add dosev-ai-mcp-office-word -- uvx mcp-office
// .cursor/mcp.json
{
  "mcpServers": {
    "dosev-ai-mcp-office-word": {
      "command": "uvx",
      "args": [
        "mcp-office"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "dosev-ai-mcp-office-word": {
      "command": "uvx",
      "args": [
        "mcp-office"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add dosev-ai-mcp-office-word -- uvx mcp-office
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dosev-ai-mcp-office-word": {
      "type": "local",
      "command": [
        "uvx",
        "mcp-office"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add dosev-ai-mcp-office-word --command uvx --arg mcp-office
# ~/.hermes/config.yaml
mcp_servers:
  dosev-ai-mcp-office-word:
    command: "uvx"
    args: ["mcp-office"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "dosev-ai-mcp-office-word": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "mcp-office"
      ]
    }
  }
}
# add to Vellum
assistant mcp add dosev-ai-mcp-office-word -t stdio -c uvx -a mcp-office
// mcp.json
{
  "mcpServers": {
    "dosev-ai-mcp-office-word": {
      "command": "uvx",
      "args": [
        "mcp-office"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 18 Sept 26 +1
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 −14
    • Malware scan: pass → unverified security
  • 12 Sept 26 +16
    • Malware scan: unverified → pass security
  • 11 Sept 26 −19
    • Malware scan: pass → unverified security
    • Stability: pass → 0.77 functional
  • 10 Sept 26 +1
    • Stability: 0.97 → pass security
  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/mcp-office@0.7.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Dependencies 22 packages
Packages resolved 22
Stale 3
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 65 exposed · ~8,351 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_border ~124

Apply a border to all sides of a cell or range. *border_style*: thin, medium, thick, dashed, dotted, double. *color*: 6 hex digits without '#', e.g. '000000'. Does NOT auto-save. Call save() to persist changes to disk. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
addressstringyes
border_stylestring
colorstring
confirmboolean
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

append_rows ~64

Append *rows* after the last used row in *sheet*. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
confirmboolean
pathstringyes
rowsarrayyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

apply_alignment ~110

Apply alignment to a cell or range. *horizontal*: left, center, right, fill, justify. *vertical*: top, center, bottom. Does NOT auto-save. Call save() to persist changes to disk. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
addressstringyes
confirmboolean
horizontal
pathstringyes
sheetstringyes
vertical
wrap_text

Structured output declared, but exposes no named fields.

No examples provided.

apply_conditional_format ~231

Apply a conditional-formatting rule to a range.

NameTypeReqDescription
addressstringyesCell range to apply CF to (e.g. "A1:Z100").
conditionstringyesFor cell_is: "<operator> <value>" e.g. "greaterThan 100", "between 10 20". Operator choices: greaterThan, greaterThanOrEqual, lessThan, lessThanOrEqual, equal, notEqual, between, notBet…
confirmbooleanMust be True to execute the write.
format_specobjectyesFormatting to apply when rule fires. Allowed keys: bold, italic, font_color, bg_color, number_format (number_format silently ignored).
formulaRequired when rule_type="formula". Must start with "=".
pathstringyesAbsolute path to the .xlsx workbook.
rule_typestringyes"cell_is" (compare cell value) or "formula" (arbitrary formula).
sheetstringyesWorksheet name.

Structured output declared, but exposes no named fields.

No examples provided.

apply_format_to_sheet_list ~205

Apply formatting to the same address across multiple sheets. sheets=None applies to all non-underscore-prefixed sheets (_Lists etc skipped). Explicit sheet list overrides the skip guard. style keys: bold, italic, font_size, font_color, bg_color. alignment keys: horizontal, vertical, wrap_text. column_widths: {"A": 15, "B:D": 12} — sets column widths on every target sheet. row_heights: {"1": 25, "2:10": 18} — sets row heights on every target sheet. EXCEL_MAX_RANGE_CELLS is enforced per sheet. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
address
alignment
column_widths
confirmboolean
number_format
pathstringyes
row_heights
sheets
style

Structured output declared, but exposes no named fields.

No examples provided.

apply_number_format ~100

Apply a number format code (e.g. '#,##0.00', 'YYYY-MM-DD') to a cell or range. Does NOT auto-save. Call save() to persist changes to disk. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
addressstringyes
confirmboolean
format_codestringyes
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

apply_style ~147

Apply styling to one or more cell ranges. address: single range string (e.g. 'A1:B2') — preferred. ranges: list of range strings — still supported for backward compat. Provide address OR ranges, not both. font_color and bg_color must be 6 hex digits without '#', e.g. 'FF0000'. Requires EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
address
bg_color
bold
confirmboolean
font_color
font_size
italic
pathstringyes
ranges
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

auto_filter ~57

Apply Excel AutoFilter to a range; pass address=None to clear. Requires confirm=True and EXCEL_ENABLE_WRITE.

NameTypeReqDescription
addressyes
confirmboolean
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

bulk_add_comments ~68

Add multiple cell comments in one call. Each dict: address, text, author (optional). Returns comments_added count.

NameTypeReqDescription
commentsarrayyes
confirmboolean
overwriteboolean
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

bulk_copy_sheet ~134

Copy *source_sheet* to multiple new sheets in a single call. new_names: list of new sheet names to create (no duplicates, max 31 chars each, no /\*?[] chars). insert_after: if provided, new sheets are placed immediately after this sheet. Note: openpyxl copy_worksheet does NOT copy charts, images, or print settings. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
confirmboolean
insert_after
new_namesarrayyes
pathstringyes
source_sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

bulk_range_write ~159

Write multiple non-contiguous cells in a single tool call. Writes a list of cell updates to the same sheet in one open/save cycle — more efficient than calling ``range_io`` or ``cell`` once per cell.

NameTypeReqDescription
confirmbooleanMust be True to authorise the write. Requires ``EXCEL_ENABLE_WRITE=true``.
pathstringyesAbsolute path to the workbook. Must be within EXCEL_ALLOWLIST_ROOTS.
sheetstringyesSheet name.
writesarrayyesEach item: ``{"address": "A1", "value": <scalar>}``. Strings starting with ``=``, ``+``, ``-``, or ``@`` are rejected (formula injection guard).

Structured output declared, but exposes no named fields.

No examples provided.

capabilities ~18

Return metadata about this MCP phase and its available tools.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

cell ~114

Read or write a single cell value. operation='read': returns cell value, type, and formula (read-only). operation='write': writes value to the cell. Requires EXCEL_ENABLE_WRITE=true and confirm=True. value=None is not allowed for 'write' (use range_io with values=[[None]] to clear a cell).

NameTypeReqDescription
addressstringyes
confirmboolean
operationstringyes
pathstringyes
sheetstringyes
value

Structured output declared, but exposes no named fields.

No examples provided.

cell_comment ~85

Get or delete a cell comment. operation='get': returns comment text and author (read-only, no confirm needed). operation='delete': removes the comment. Requires EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
addressstringyes
confirmboolean
operationstringyes
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

chart ~235

Manage Excel charts: create, list, delete, or update. operation='list': returns {"charts": [...], "count": N} — no confirm needed. operation='create': chart_type and data_address required. confirm=True required. chart_type: bar, line, scatter, pie. data_address: e.g. 'A1:B5' (include headers). target_address: cell where chart is placed (default 'D1'). width_px / height_px: chart size in pixels (1–5000). operation='delete': chart_index (0-based) required. confirm=True required. operation='update': chart_index and data_address required. confirm=True required. Write operations require EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
anchor
chart_index
chart_type
confirmboolean
data_address
height_px
operationstringyes
pathstringyes
sheetstringyes
target_address
titlestring
width_px

Structured output declared, but exposes no named fields.

No examples provided.

cols ~120

Insert or delete columns in a worksheet. operation='insert': inserts `count` blank columns before `start_col` (1-based). operation='delete': deletes columns from `start_col` to `end_col` (inclusive; end_col defaults to start_col). Both require EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
confirmboolean
countinteger
end_col
operationstringyes
pathstringyes
sheetstringyes
start_colintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

consolidate_ranges ~116

Read multiple ranges from workbooks and merge into one table. Each entry in ``ranges`` must have keys: ``path``, ``sheet``, ``range``, and optionally ``label``. Enforces EXCEL_ALLOWLIST_ROOTS via wb.read_range (BLOCKER-2 compliance -- no direct openpyxl.load_workbook calls here). Does NOT require EXCEL_ENABLE_WRITE. Does NOT require confirm.

NameTypeReqDescription
max_rowsinteger
rangesarrayyes
source_label_keystring

Structured output declared, but exposes no named fields.

No examples provided.

copy_range ~73

Copy cells (values and formats) from src_address to dst_address within the same sheet. Requires EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
confirmboolean
dst_addressstringyes
pathstringyes
sheetstringyes
src_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

copy_range_format ~143

Copy formatting only (no values) from src to dst range. Cross-sheet. dst can be single cell (auto-expands). Copies: font, fill, number_format, alignment. Border only if copy_border=True. Does NOT copy: values, formulas, comments, hyperlinks. MergedCell slave cells in src are skipped silently. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
confirmboolean
copy_borderboolean
dst_addressstringyes
dst_sheetstringyes
pathstringyes
src_addressstringyes
src_sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

create_table ~111

Create a native Excel table (ListObject) over the specified range in a worksheet. address: cell range for the table (e.g. 'A1:D20'). style: Excel table style name (default 'TableStyleMedium9'). Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
addressstringyes
confirmboolean
pathstringyes
sheetstringyes
stylestring
table_name

Structured output declared, but exposes no named fields.

No examples provided.

create_workbook ~114

Create a new .xlsx workbook at the specified path. sheets: worksheet names to create (default: ["Sheet1"]). overwrite: if False (default), raises ExcelMCPError if the file exists. confirm: must be True (write gate — prevents accidental creation). Returns: {"ok": true, "path": "...", "sheets": [...], "created": true}

NameTypeReqDescription
confirmboolean
overwriteboolean
pathstringyes
sheets

Structured output declared, but exposes no named fields.

No examples provided.

data_validation ~97

Get or add data validation rules in a worksheet. operation='get': returns all validation rules for the sheet. operation='add': adds validation rules from the validations list. Each item must have 'address' key. Requires EXCEL_ENABLE_WRITE=true and confirm=True for 'add'.

NameTypeReqDescription
confirmboolean
operationstringyes
pathstringyes
sheetstringyes
validations

Structured output declared, but exposes no named fields.

No examples provided.

diff_workbooks ~164

Compare two workbooks cell-by-cell and return differences. Loads both workbooks with openpyxl (data_only=True) and compares the values of matching sheets. Only sheets present in BOTH workbooks are compared (unless sheets is specified).

NameTypeReqDescription
max_diffsintegerMaximum total differences to return (default 200). Truncates result set with truncated=True flag.
path_astringyesAbsolute path to first workbook (baseline). Must be within EXCEL_ALLOWLIST_ROOTS.
path_bstringyesAbsolute path to second workbook (comparison). Must be within EXCEL_ALLOWLIST_ROOTS.
sheetsOptional list of sheet names to compare. If None, compares sheets present in both workbooks.

Structured output declared, but exposes no named fields.

No examples provided.

evaluate_formula ~101

Return the formula string and value for *address*. When live=False (default): openpyxl returns the last-saved cached value. When live=True: opens workbook via Excel COM for live evaluation. Useful for volatile functions (TODAY, NOW, RAND, OFFSET). Requires EXCEL_ENABLE_COM=true when live=True.

NameTypeReqDescription
addressstringyes
liveboolean
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

export_as_pdf ~197

Export a worksheet or entire workbook to PDF via Excel COM. scope='sheet' exports a single named worksheet (sheet param required). scope='workbook' exports all visible sheets in print order. The source workbook is opened read-only and is not modified.

NameTypeReqDescription
confirmbooleanMust be True.
output_pathstringyesAbsolute path for the output PDF file. Must be within EXCEL_EXPORT_ROOTS and end in .pdf.
pathstringyesAbsolute path to the source .xlsx/.xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS.
qualityinteger0 = standard quality (default), 1 = minimum quality.
scopestringyes'sheet' to export one worksheet; 'workbook' to export all visible sheets.
sheetWorksheet name (required when scope='sheet'; must be omitted when scope='workbook').

Structured output declared, but exposes no named fields.

No examples provided.

export_changed_sheets_only ~184

Re-export only sheets whose content has changed since the last export run. Uses openpyxl cell-value hashing to detect mutations. Exports changed sheets via export_as_pdf. Returns hashes for ALL sheets so the caller can store them for the next iteration. Requires EXCEL_ENABLE_WRITE=true. If EXCEL_ENABLE_COM is not true, falls back to hash-only mode (no PDF export). confirm=True is always required.

NameTypeReqDescription
base_dirstringyesDirectory where per-run export subdirectories are created.
confirmbooleanMust be True to proceed (mutation guard).
pathstringyesAbsolute path to the .xlsx workbook.
previous_hashesobjectyesDict mapping sheet_name → sha256 hash string from the previous run. Pass {} for the first run (all sheets are treated as changed).

Structured output declared, but exposes no named fields.

No examples provided.

export_range_as_csv ~242

Export a cell range as CSV. live=False (default): reads cached values via openpyxl -- no COM, CI-safe. live=True: reads live-evaluated values via Excel COM (Windows only, requires EXCEL_ENABLE_COM=true). output_path + any mode: write CSV to file (needs EXCEL_CSV_EXPORT_ROOTS + EXCEL_ENABLE_WRITE=true + confirm=True).

NameTypeReqDescription
addressstringyesCell range in A1 notation, e.g. "A1:C10".
confirmbooleanRequired (True) when output_path is provided.
delimiterstringCSV delimiter character. One of: , \t ; | (default: ,).
include_headersbooleanIf True (default), all rows are written to CSV. If False, the first row (header) is skipped.
livebooleanIf True, use Excel COM to read live calculated values.
output_pathIf provided, write CSV to this .csv file.
pathstringyesWorkbook path within EXCEL_ALLOWLIST_ROOTS.
sheetstringyesWorksheet name.

Structured output declared, but exposes no named fields.

No examples provided.

fill_formula_range ~88

Fill start_address:end_address with formula, auto-relativizing references. Formula must start with '='. Returns filled_cells count. Requires EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
confirmboolean
end_addressstringyes
formulastringyes
pathstringyes
sheetstringyes
start_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

find_replace ~98

Find and replace string values across all cells in *sheet*. Set ``whole_cell=False`` for substring replacement. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
confirmboolean
find_valuestringyes
match_caseboolean
pathstringyes
replace_valuestringyes
sheetstringyes
whole_cellboolean

Structured output declared, but exposes no named fields.

No examples provided.

format ~588

Unified format dispatcher — routes 8 format operations through a single tool. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``. operation vocabulary -------------------- "number_format" Apply a number-format code to a cell or range. Params: path, sheet, address, format_code, confirm. "style" Apply font/fill styling to one or more ranges. Params: path, sheet, address (or ranges), bold, italic, font_size, font_color, bg_color, confirm. "alignment" Apply horizontal/vertical/wrap_text alignment. Params: path, sheet, address, horizontal, vertical, wrap_text, confirm. "border" Apply border to all sides of a cell or range. Params: path, sheet, address, border_style, color, confirm. "sheet_list" Apply formatting to the same address across multiple sheets. Params: path, sheets, address, style, number_format, alignment, column_widths, row_heights, confirm. "copy_format" Copy formatting only (no values) from src to dst range. Params: path, src_sheet, src_address, dst_sheet, dst_address, copy_border, confirm. "write_with_format" Write a 2-D array and apply formatting in one call. Params: path, sheet, address, data, style, number_format, alignment, confirm. "conditional" Apply a conditional-formatting rule to a range. Params: path, sheet, address, rule_type, condition, format_spec, formula, confirm. Deprecated aliases ------------------ The 8 standalone tools (apply_number_format, apply_style, apply_alignment, add_border, apply_format_to_sheet_list, copy_range_format, write_range_with_format, apply_conditional_format) remain callable but are deprecated. Prefer this dispatcher for all new integrations.

NameTypeReqDescription
address
alignment
bg_color
bold
border_stylestring
colorstring
column_widths
condition
confirmboolean
copy_borderboolean
data
dst_address
dst_sheet
font_color
font_size
format_code
format_spec
formula
horizontal
italic
number_format
operationstringyes
pathstringyes
ranges
row_heights
rule_type
sheet
sheets
src_address
src_sheet
style
vertical
wrap_text

Structured output declared, but exposes no named fields.

No examples provided.

freeze_panes ~59

Freeze rows/columns at a cell; pass address=None to unfreeze. Requires confirm=True and EXCEL_ENABLE_WRITE.

NameTypeReqDescription
address
confirmboolean
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_active_workbook_context ~65

Return name, path, and sheet list for the workbook active in Excel. Requires EXCEL_ENABLE_COM=true. Returns only workbooks within EXCEL_ALLOWLIST_ROOTS; workbooks outside the allowlist are treated as unavailable (status: outside_allowlist).

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

get_all_open_workbooks ~68

List all workbooks open in the running Excel instance. Requires EXCEL_ENABLE_COM=true. Filters to EXCEL_ALLOWLIST_ROOTS only; workbooks outside the allowlist are silently excluded (their paths and names are not exposed — not even as a count or redacted entry).

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

get_cell_metadata ~70

Return formatting and metadata for a single cell. Includes font, fill, number format, comment, and hyperlink information. *address* must be in A1 notation (e.g. "B3").

NameTypeReqDescription
addressstringyes
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_used_range ~42

Return the bounding box of used cells in *sheet* of the workbook at *path*.

NameTypeReqDescription
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_workbook_context ~175

Return an Artifact Context Packet (ACP) for an Excel workbook. Progressive disclosure via the ``level`` parameter: - **index** — identity + summary only (fast; single stat + openpyxl open) - **focused** — + sheet_names, sheet_count, table_names - **deep** — + metadata_policy, named_ranges (names only), lineage_summary, and optional annotations Security guarantees: - Path must be within EXCEL_ALLOWLIST_ROOTS (allowlist is enforced). - ACPDetail never contains cell values (S-001). - Annotations are validated with validate_acp_annotations() before storage. Returns a JSON-serialisable dict matching the ACP contract v1.0 shape.

NameTypeReqDescription
annotations
levelstring
pathstringyes

Structured output declared, but exposes no named fields.

No examples provided.

hydrate_template ~265

Open a workbook template, write cell values, and save as a new file. Writes data to named ranges or cell addresses in the template workbook and saves the result to output_path. The template is not modified (SaveAs creates a new file at output_path). cell_writes format (list of dicts with 'ref' and 'value' keys):: [ {"ref": "A1", "value": "scalar"}, {"ref": "A1:C2", "value": [[1, 2, 3], [4, 5, 6]]}, {"ref": "named_range", "value": "ProjectX"}, {"ref": "Sheet2!B3", "value": 42.0}, ]

NameTypeReqDescription
cell_writesList of {ref, value} write instructions.
confirmbooleanMust be True.
output_pathstringAbsolute path for output .xlsx/.xlsm file.
recalculatebooleanIf True (default), calls Application.CalculateFull() before SaveAs.
sheetOptional default sheet for Range() lookups.
template_pathstringyesAbsolute path to source .xlsx/.xlsm template.

Structured output declared, but exposes no named fields.

No examples provided.

hyperlink ~128

Manage hyperlinks in a worksheet. operation='get': returns all hyperlinks (read-only). operation='add': adds hyperlinks from the links list. Validates URL schemes — javascript:, data:, vbscript: are always blocked (OWASP A03). operation='remove': removes hyperlink from address. Requires confirm=True. Write operations require EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
address
apply_styleboolean
confirmboolean
links
operationstringyes
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

import_csv_to_sheet ~124

Import a CSV or TSV file into *sheet*. All rows including the header row are imported by default so column names are preserved. Set ``skip_header=True`` to discard the first row. Set ``overwrite=True`` to replace an existing sheet with the same name. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.

NameTypeReqDescription
confirmboolean
csv_pathstringyes
overwriteboolean
pathstringyes
sheetstringyes
skip_headerboolean

Structured output declared, but exposes no named fields.

No examples provided.

list_macros ~82

List all VBA components in a workbook via the VBA project object model. Enumerates VBProject.VBComponents and returns component names and types. Only .xlsm files have a VBA project; passing an .xlsx path raises ValidationError immediately.

NameTypeReqDescription
pathstringyesAbsolute path to .xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS.

Structured output declared, but exposes no named fields.

No examples provided.

list_tables ~74

List all Excel tables (ListObjects) in *sheet*, or across all sheets when *sheet* is omitted. Each entry contains sheet, name, display_name, ref, header_row, and totals_row. Omitting *sheet* enables workbook-wide table discovery.

NameTypeReqDescription
pathstringyes
sheet
NameTypeReqDescription
resultarrayyes

No examples provided.

merge ~113

Manage merged cell ranges in a worksheet. operation='list': returns {"sheet": str, "merged_ranges": [str, ...], "count": int}. operation='merge': merges the address range. Requires EXCEL_ENABLE_WRITE=true and confirm=True. operation='unmerge': unmerges the address range. Requires EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
address
confirmboolean
operationstringyes
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

named_range ~132

List, read, or write Excel named ranges (defined names). operation='list': returns {"named_ranges": [{name, refers_to, scope}, ...], "count": N}. operation='read': reads the data values at the named range. name is required. operation='write': creates or updates a named range. name, sheet, address, confirm all required. 'write' requires EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
address
confirmboolean
name
operationstringyes
pathstringyes
sheet

Structured output declared, but exposes no named fields.

No examples provided.

pivot_table ~264

Create, read, or refresh Excel pivot tables via Excel COM. operation='create': Build a new pivot table from a local worksheet range. operation='read': Return structure and data of a named pivot table. operation='refresh': Refresh all pivot caches (xlDatabase sources only).

NameTypeReqDescription
col_fieldsField names for the column axis (create only).
confirmbooleanMust be True for create and refresh operations.
dest_addressUpper-left cell for pivot e.g. 'F1' (create only).
dest_sheetExisting sheet for pivot output (create only).
operationstringyes'create', 'read', or 'refresh'.
pathstringyesAbsolute path to .xlsx/.xlsm workbook.
pivot_namePivotTable name to read (read only).
row_fieldsField names for the row axis (create only).
sheetWorksheet name (read: required; refresh: optional filter).
source_addressSheet-qualified range e.g. 'Sheet1!A1:D100' (create only).
table_namestringPivotTable name (create only; default 'PivotTable1').
value_fieldsField names to aggregate (create only).

Structured output declared, but exposes no named fields.

No examples provided.

produce_export_evidence_bundle ~148

Produce a structured evidence bundle aggregating PDF export + review findings. Call after review_workbook_render and export_as_pdf to close the render-check-iterate loop.

NameTypeReqDescription
export_resultsarrayyesList of export result dicts from export_as_pdf calls. Must be a list — raises ToolError if not. Each entry must contain at least 'sha256' and 'exported_at'.
exports_dirOptional directory containing the exported PDF(s).
pathstringyesAbsolute path to the workbook.
review_resultsarrayyesList of review result dicts from review_workbook_render. Must be a list — raises ToolError if not.

Structured output declared, but exposes no named fields.

No examples provided.

protect ~111

Protect or unprotect a sheet or the entire workbook structure. scope='sheet': protects/unprotects the named sheet. password=None clears protection. scope='workbook': protects/unprotects workbook structure. password=None clears protection. Both require EXCEL_ENABLE_WRITE=true and confirm=True.

NameTypeReqDescription
confirmboolean
lock_structureboolean
lock_windowsboolean
password
pathstringyes
scopestringyes
sheet

Structured output declared, but exposes no named fields.

No examples provided.

range_io ~111

Read or write a rectangular range of cells. operation='read': returns {"data": [[{...},...], ...], "rows": int, "cols": int}. operation='write': writes values 2-D array starting from address cell. Requires EXCEL_ENABLE_WRITE=true and confirm=True for 'write'.

NameTypeReqDescription
addressstringyes
confirmboolean
operationstringyes
pathstringyes
sheetstringyes
values

Structured output declared, but exposes no named fields.

No examples provided.

read_sheet_all ~63

Read the entire used range of *sheet* from the workbook at *path*. Returns all cell data, row count, and column count. Subject to EXCEL_MAX_RANGE_CELLS guard.

NameTypeReqDescription
pathstringyes
sheetstringyes

Structured output declared, but exposes no named fields.

No examples provided.

read_table ~54

Read all rows from a named Excel table in *sheet*. Returns table metadata, headers, and all data rows.

NameTypeReqDescription
pathstringyes
sheetstringyes
table_namestringyes

Structured output declared, but exposes no named fields.

No examples provided.

recalculate_workbook ~175

Force recalculation of all formulas in a workbook using Excel COM. Opens the workbook in Excel, triggers recalculation, saves in-place, and closes. The source workbook is modified (formulas are evaluated and their cached values updated in the file).

NameTypeReqDescription
confirmbooleanMust be True. Required because this operation saves the source workbook in-place (permanent mutation).
full_calcbooleanIf True, calls Application.CalculateFull() which rebuilds the entire dependency tree across all open workbooks. If False (default), calls wb.Calculate() which recalculates only d…
pathstringyesAbsolute path to the .xlsx or .xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS.

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the MCP Office Word server?

MCP Office Word is listed in the public MCP registry as io.github.dosev-ai/mcp-office-word. 50-tool Word MCP server. Document assembly, tracked changes, and export. Windows-first. This page covers its PyPI package (mcp-office).

Is the MCP Office Word server safe to use?

MCP Office Word scores 60 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the MCP Office Word server expose?

MCP Office Word exposes 65 tools: get_workbook_context, bulk_copy_sheet, set_row_heights, set_column_widths, bulk_add_comments, and 60 more. Their descriptions and schemas cost roughly 8,351 tokens of context every time the server is loaded.

Is the MCP Office Word server still maintained?

MCP Office Word is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the MCP Office Word server under?

MCP Office Word declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.