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.

Word

NUGET · WORDMCP.MCPSERVER · SCANNED SEP 20

Microsoft Word automation for AI assistants. Requires Word for Windows.

Available components

+3 this week 73 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 Security88
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Install-script risk not yet assessed.Unverified
  • No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency35
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3855 tokens (~257/item across 15 items; 15 tools + 0 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 Management90
  • Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 16 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 Word MCP server?

Word runs locally as a NuGet package, launched with dnx WordMcp.McpServer@0.1.0 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

nuget · WordMcp.McpServer

# add to Claude Code
claude mcp add trsdn-mcp-server-word -- dnx WordMcp.McpServer@0.1.0 --yes
// .cursor/mcp.json
{
  "mcpServers": {
    "trsdn-mcp-server-word": {
      "command": "dnx",
      "args": [
        "WordMcp.McpServer@0.1.0",
        "--yes"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "trsdn-mcp-server-word": {
      "command": "dnx",
      "args": [
        "WordMcp.McpServer@0.1.0",
        "--yes"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add trsdn-mcp-server-word -- dnx WordMcp.McpServer@0.1.0 --yes
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "trsdn-mcp-server-word": {
      "type": "local",
      "command": [
        "dnx",
        "WordMcp.McpServer@0.1.0",
        "--yes"
      ],
      "enabled": true
    }
  }
}
# ~/.hermes/config.yaml
mcp_servers:
  trsdn-mcp-server-word:
    command: "dnx"
    args: ["WordMcp.McpServer@0.1.0", "--yes"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "trsdn-mcp-server-word": {
      "Transport": "stdio",
      "Command": "dnx",
      "Arguments": [
        "WordMcp.McpServer@0.1.0",
        "--yes"
      ]
    }
  }
}
// mcp.json
{
  "mcpServers": {
    "trsdn-mcp-server-word": {
      "command": "dnx",
      "args": [
        "WordMcp.McpServer@0.1.0",
        "--yes"
      ]
    }
  }
}
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.

  • 20 Sept 26 +1

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

  • 18 Sept 26 +1

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

  • 15 Sept 26 +1

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

  • 13 Sept 26 +1

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

  • 11 Sept 26 +1

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

  • 9 Sept 26 +1

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

  • 7 Sept 26 +1

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

  • 5 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 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 nuget/WordMcp.McpServer@0.1.0

Provenance No attestation

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

Result No attestation
Ecosystem nuget
Reason Package not fetched

Background: How many MCP packages publish verified provenance →

Dependencies 0 packages
Packages resolved 0
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 15 exposed · ~3,619 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
bookmark ~254

Bookmark operations on an open document. bookmark(list, session_id) returns every bookmark with its name, paragraph index and a preview of the bookmarked text. bookmark(add, session_id, name="Intro", paragraph_index=2) bookmarks a paragraph; pass end_paragraph_index to span several paragraphs, or anchor_text to bookmark just a phrase inside the paragraph. bookmark(get-text, session_id, name="Intro") returns the full bookmarked text, which is the reliable way to re-read a passage after edits have shifted every index. bookmark(delete, session_id, name="Intro") removes the bookmark; the text stays. Bookmark names must start with a letter and may only contain letters, digits and underscores - Word rejects spaces and punctuation with an unhelpful error, so they are checked before the call reaches Word. Bookmarks survive edits elsewhere in the document, which makes them the stable way to refer to a passage across several calls.

NameTypeReqDescription
actionstringyes
anchor_textstring|null
end_paragraph_indexinteger|null
max_text_lengthinteger
namestring|null
paragraph_indexinteger|null
session_idstringyes

No output schema declared.

No examples provided.

comment ~216

Comment operations on an open document, the basis for review workflows. comment(list, session_id) returns every comment with its author, date, text and the document text it refers to. comment(add, session_id, paragraph_index=3, text='Please shorten this') attaches a comment to a whole paragraph; pass anchor_text to attach it to a phrase inside that paragraph instead. comment(resolve, session_id, index=1) marks a comment as done; pass resolved=false to reopen it. comment(delete, session_id, index=1) removes a comment. Comment indexes are 1-based and shift after every delete, so when removing several comments work from the highest index downwards. Paragraph indexes come from paragraph(list).

NameTypeReqDescription
actionstringyes
anchor_textstring|null
indexinteger|null
paragraph_indexinteger|null
resolvedboolean
session_idstringyes
textstring|null
unresolved_onlyboolean

No output schema declared.

No examples provided.

document ~208

Document-level operations. document(get-info, session_id) returns word/page/paragraph/table counts. document(get-properties|set-properties, session_id, title=..., author=...) reads or writes metadata. document(export-pdf, session_id, output_path='C:\\...\\report.pdf') writes a PDF without changing the document. document(save-as, session_id, output_path='C:\\...\\copy.rtf') saves a copy; the format follows the extension (.docx, .docm, .doc, .pdf, .rtf, .txt, .html) and the open document is saved as part of the operation.

NameTypeReqDescription
actionstringyes
authorstring|null
commentsstring|null
companystring|null
keywordsstring|null
output_pathstring|null
session_idstringyes
subjectstring|null
titlestring|null

No output schema declared.

No examples provided.

field ~241

Field operations on an open document. field(insert-toc, session_id, lower_heading_level=3) inserts a table of contents at the top and fills it immediately. It stays EMPTY unless paragraphs use heading styles, so apply 'Heading 1'/'Heading 2' via paragraph(add, style=...) first; the result reports entry_count. field(insert-page-number, session_id, position='footer', alignment='center', include_total_pages=true) adds page numbers to every section. field(update-toc, session_id) refreshes the table of contents after content changed. field(update-all, session_id) refreshes every field including headers and footers. field(list, session_id) returns type, code and current result of each field.

NameTypeReqDescription
actionstringyes
alignmentstring
include_page_numbersboolean
include_total_pagesboolean
lower_heading_levelinteger
paragraph_indexinteger|null
positionstring
session_idstringyes
upper_heading_levelinteger
use_hyperlinksboolean

No output schema declared.

No examples provided.

file ~179

File and session management — the FIRST tool of every workflow. WORKFLOW: file(open, path='C:\\...\\report.docx') -> use session_id with document/text/paragraph/table tools -> file(close, save=true). NEW FILES: file(create, path='C:\\...\\new.docx') creates the file AND starts a session. REUSE: call file(list) first — if the document is already open, reuse its session_id. The file must be CLOSED in the Word desktop app; COM requires exclusive access. show=true makes Word visible. timeout_seconds: max time per operation (default 300).

NameTypeReqDescription
actionstringyes
pathstring|null
saveboolean
session_idstring|null
showboolean
timeout_secondsinteger

No output schema declared.

No examples provided.

header-footer ~204

Header and footer operations on an open document. Headers belong to a SECTION, not to the document, so use section(list) first when a document has more than one. header-footer(set, session_id, kind='footer', text='Confidential') writes the same text to every section; pass section_index to target one. type='first-page' or 'even-pages' switches the matching section option on automatically, because Word otherwise stores the text without ever showing it. Writing to a section whose header is inherited from the previous one breaks that link. header-footer(get, session_id, kind='header') reads the text back. For page numbers use field(insert-page-number) instead, which inserts live fields.

NameTypeReqDescription
actionstringyes
alignmentstring|null
kindstring
section_indexinteger|null
session_idstringyes
textstring|null
typestring

No output schema declared.

No examples provided.

image ~281

Inline image operations on an open document. image(list, session_id) returns index, size and alt text of every image. image(insert, session_id, image_path='C:/pics/chart.png', width=300, caption='Figure 1') appends an image; pass paragraph_index to place it before a specific paragraph. image(resize, session_id, index=1, scale_percent=50) or (index=1, width=200) resizes. image(replace, session_id, index=1, image_path=...) swaps the picture but keeps position and size. image(delete|set-alt-text, session_id, index=1, ...) edits an existing image. Sizes are in points (1 point = 1/72 inch), not pixels. All indexes are 1-based. Only inline images are covered, not floating shapes.

NameTypeReqDescription
actionstringyes
alt_textstring|null
captionstring|null
heightnumber|null
image_pathstring|null
indexinteger|null
keep_sizeboolean
lock_aspect_ratioboolean
paragraph_indexinteger|null
scale_percentnumber|null
session_idstringyes
widthnumber|null

No output schema declared.

No examples provided.

list ~289

Bullet and numbered list operations on an open document. list(apply, session_id, start_index=2, end_index=5, list_type='number') turns a range of paragraphs into a numbered list; list_type can be bullet, number or outline-number. list(set-level, session_id, start_index=3, end_index=4, level=2) indents paragraphs to a sub-level; levels run from 1 to 9 and only outline-number lists render a distinct format per level. list(restart, session_id, start_index=6) starts the numbering over at that paragraph, which is how two separate numbered lists are kept apart. list(remove, session_id, start_index=2, end_index=5) strips the list formatting again. list(get, session_id) reports the list formatting of every paragraph, including the bullet or number Word renders. Paragraph indexes are 1-based and shift whenever paragraphs are added or removed, so read them with paragraph(list) right before using them. Omitting end_index applies the action to start_index alone.

NameTypeReqDescription
actionstringyes
continue_previous_listboolean
end_indexinteger|null
levelinteger|null
list_typestring
listed_onlyboolean
session_idstringyes
start_indexinteger|null

No output schema declared.

No examples provided.

paragraph ~194

Paragraph operations on an open document. paragraph(list, session_id, skip=0, take=200) returns index, text, style, alignment and outline level. paragraph(add, session_id, text='...', style='Heading 1') appends a paragraph. paragraph(insert, session_id, index=3, text='...') inserts before paragraph 3. paragraph(delete|set-style|set-alignment, session_id, index=3, ...) edits an existing paragraph. Indexes are 1-based and shift after add, insert or delete — re-run list before further edits.

NameTypeReqDescription
actionstringyes
alignmentstring|null
include_emptyboolean
indexinteger|null
session_idstringyes
skipinteger
stylestring|null
takeinteger
textstring|null

No output schema declared.

No examples provided.

revision ~217

Tracked change operations on an open document. revision(list, session_id) returns every tracked change with its type, author, date and affected text, plus whether tracking is currently on. revision(accept, session_id) accepts every change; pass index=1 to accept a single one. revision(reject, session_id, index=2) discards a change the same way. revision(set-tracking, session_id, enabled=true) turns change tracking on or off, which is what makes later edits show up as revisions in the first place. Revision indexes are 1-based and shift after every accept or reject, so when handling several changes individually work from the highest index downwards, or just accept or reject them all at once. Accepting or rejecting everything also covers headers and footers, which Word's own AcceptAllRevisions does not.

NameTypeReqDescription
actionstringyes
authorstring|null
enabledboolean|null
indexinteger|null
session_idstringyes

No output schema declared.

No examples provided.

screenshot ~213

Renders a page of an open document as a PNG image. screenshot(page, session_id) renders page 1; pass page=3 for another page. Use this to check the layout visually - page breaks, table widths, image placement and header positions are far easier to judge from the rendered page than from measurements. The image is written to a file and the path is returned. Pass include_image=true to also get the PNG inline as base64, which is only worth it when the image is actually going to be looked at, since it is large. dpi defaults to 150, which is readable without being wasteful; 96 is enough for a rough layout check and 300 approaches print quality. Rendering goes through a PDF export of the single page, so unsaved changes are included.

NameTypeReqDescription
actionstringyes
dpiinteger
include_imageboolean
output_pathstring|null
pageinteger
session_idstringyes

No output schema declared.

No examples provided.

section ~246

Section operations on an open document. A section owns the page setup and the headers and footers, so changing margins or orientation for part of a document means adding a section first. section(list, session_id) returns index, start type, margins, page size and orientation. section(add, session_id, start_type='next-page', paragraph_index=...) inserts a section break after that paragraph, or at the end when omitted. section(page-setup, session_id, section_index=2, orientation='landscape', top_margin=72) changes one section; without section_index it changes the whole document. ALL MEASUREMENTS ARE IN POINTS: 72 pt = 1 inch = 2.54 cm.

NameTypeReqDescription
actionstringyes
bottom_marginnumber|null
left_marginnumber|null
orientationstring|null
paper_sizestring|null
paragraph_indexinteger|null
right_marginnumber|null
section_indexinteger|null
session_idstringyes
start_typestring
top_marginnumber|null

No output schema declared.

No examples provided.

style ~364

Style operations on an open document. Styles keep formatting consistent without touching every piece of text. style(list, session_id) returns only the styles the document actually uses; pass in_use_only=false for the complete list, which is over 370 entries on a localized Word. style(create, session_id, name='Callout', style_type='paragraph', base_style='Normal') adds a custom style. style(modify, session_id, name='Callout', font_name='Calibri', font_size=11, bold=true, color='#C00000', alignment='center', space_after=12) changes formatting; omitted properties stay as they are. style(delete, session_id, name='Callout') removes a custom style; built-in styles cannot be deleted. LOCALIZED NAMES: Word reports styles under localized names, so a German Word calls 'Heading 1' 'Ueberschrift 1'. Built-in styles are addressable by their English name; list returns both, and english_name is the one to send back. Sizes and spacing are in points (72 pt = 1 inch).

NameTypeReqDescription
actionstringyes
alignmentstring|null
base_stylestring|null
boldboolean|null
colorstring|null
font_namestring|null
font_sizenumber|null
in_use_onlyboolean
italicboolean|null
line_spacingnumber|null
namestring|null
session_idstringyes
space_afternumber|null
space_beforenumber|null
style_typestring|null
underlineboolean|null

No output schema declared.

No examples provided.

table ~226

Table operations on an open document. table(list, session_id) returns index, size and style of every table. table(create, session_id, rows=3, columns=4, style='Table Grid') appends a table. table(read, session_id, index=1) returns all cell values as rows. table(set-cell, session_id, index=1, row=1, column=2, text='Total') writes one cell. table(add-row, session_id, index=1, values=['a','b']) appends a filled row. table(delete-row|set-style, session_id, index=1, ...) edits an existing table. All indexes are 1-based.

NameTypeReqDescription
actionstringyes
columninteger|null
columnsinteger|null
indexinteger|null
rowinteger|null
rowsinteger|null
session_idstringyes
stylestring|null
textstring
valuesarray|null

No output schema declared.

No examples provided.

text ~287

Text operations on an open document. text(get, session_id) returns the full text; add start/end to read a character range. text(append, session_id, text='...') appends a paragraph at the end. text(find, session_id, text='term') returns match positions and context. text(replace, session_id, text='old', replace_text='new') replaces occurrences. text(format, session_id, start=0, end=20, bold=true, color='#0078D4') formats a character range. Positions are Word character offsets as reported by get and find.

NameTypeReqDescription
actionstringyes
boldboolean|null
colorstring|null
endinteger|null
font_namestring|null
font_sizenumber|null
italicboolean|null
match_caseboolean
match_whole_wordboolean
max_lengthinteger
max_resultsinteger
new_paragraphboolean
replace_allboolean
replace_textstring|null
search_textstring|null
session_idstringyes
startinteger|null
textstring|null
underlineboolean|null

No output schema declared.

No examples provided.

Common questions

What is the Word MCP server?

Word is an MCP server listed in the public MCP registry as io.github.trsdn/mcp-server-word. Microsoft Word automation for AI assistants. Requires Word for Windows. This page covers its NuGet package (WordMcp.McpServer).

Is the Word MCP server safe to use?

Word scores 73 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 Word MCP server expose?

Word exposes 15 tools: paragraph, document, bookmark, style, table, and 10 more. Their descriptions and schemas cost roughly 3,619 tokens of context every time the server is loaded.

Is the Word MCP server still maintained?

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.