word-mcp
Drives LibreOffice over UNO on Linux to open, measure, and fix .docx documents: reports page counts, locates strings by page, maps headings and sections with page ranges, extracts page text, formats paragraphs (keep-with-next, widow control), refreshes fields and tables of contents, and exports to PDF using LibreOffice's own pagination engine.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@word-mcpopen report.docx and show me the outline with page numbers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
word-mcp
An MCP server that measures and fixes the page layout of .docx documents using a real word
processor rather than a converter. Converters paginate differently from Word, and over a few
hundred pages the drift adds up, so the numbers here come from the application itself.
Platform | Driven through | Whose pagination |
macOS | Microsoft Word over Apple Events | Word |
Windows | Microsoft Word over COM | Word |
Linux | LibreOffice over UNO | LibreOffice |
The engine follows the platform; WORD_MCP_BACKEND=mac|win|uno overrides it. Every answer
carries a fidelity field saying whose numbers these are.
Example
Asking a document where its parts begin and how long they are:
>>> word_status()
{'engine': 'libreoffice', 'fidelity': 'libreoffice', 'available': True,
'version': '/usr/bin/soffice', 'document': None, 'detail': None}
>>> word_open('/tmp/report.docx')
'/tmp/report.docx'
>>> word_outline()
{
"total_pages": 13,
"fidelity": "libreoffice",
"sections": [
{ "name": "Introduction", "page": 1, "pages": 2 },
{ "name": "Background", "page": 3, "pages": 3 },
{ "name": "Method", "page": 6, "pages": 3 },
{ "name": "Results", "page": 9, "pages": 2 },
{ "name": "Conclusions", "page": 11, "pages": 2 },
{ "name": "Appendix A", "page": 13, "pages": 1 }
]
}
>>> word_find_page('Complexity')
{'text': 'Complexity', 'pages': [7, 7, 7, 7, 8, 8]}Keeping a caption attached to the figure above it, so a page break never separates them:
>>> word_format_paragraphs(contains='Figure 1.', keep_with_next=True, widow_control=True)
1
>>> word_save()
'saved'Sections can also be defined by text instead of by heading level, which is useful when a document has no outline levels set:
>>> word_outline(markers=['Introduction', 'Method', 'Conclusions'])The last occurrence of each marker is taken, so mentions inside a table of contents are skipped.
Related MCP server: docx-mcp
Layout
wordmcp/
├── models.py immutable result and parameter types
├── engine.py DocumentEngine: the contract an engine fulfils
├── engines/
│ ├── __init__.py engine selection; dependencies are passed in, not read from the module
│ ├── applescript.py Word on macOS
│ ├── com.py Word on Windows
│ └── uno.py LibreOffice
├── service.py document operations, expressed once
├── tools/
│ ├── session.py open, close, save, status
│ ├── measure.py page count, search, headings, outline, page text, self-test
│ ├── modify.py formatting, field updates, PDF export
│ └── escape.py engine-native code, registered only when allowed
├── server.py assembles a server from the tool groups
└── __main__.py composition root: pick an engine, serve over stdioEach tool module exposes register(mcp, service) and keeps nothing at module scope, so the
groups stay independent and no global server instance is needed. Tool bodies are one line:
they delegate to the service, which holds the logic and is what the tests exercise.
Dependencies are injected through constructors: an engine goes into DocumentService, the
service goes into create_server. There is no global state, so the logic runs against a stub:
server = create_server(DocumentService(StubEngine()), allow_raw=False)Tools
Tool | What it does |
| which engine is active, whether it answers, what is open |
| open, close, save |
| number of pages |
| pages on which a string occurs |
| headings with outline level and page |
| start page and length of every top-level part |
| text placed on a given page |
| refresh fields and tables of contents |
| keep with next, keep together, widow control, spacing |
| export to PDF with the application's own engine |
| run every operation and report what this machine supports |
| engine-native code; registered only when |
Installing
git clone https://github.com/<user>/word-mcp.git
cd word-mcp
uv syncmacOS. Needs Microsoft Word and automation permission: System Settings, Privacy and Security, Automation, the application running this server, Microsoft Word. The first call raises the system prompt.
Windows. Needs Microsoft Word: uv sync --extra windows, which adds pywin32.
Linux. Needs LibreOffice and the system Python-UNO package:
sudo apt install libreoffice python3-uno. The server starts soffice headless by itself;
WORD_MCP_UNO_PORT sets the socket. Run it with the interpreter that can see uno, which is
usually the system python3.
Connecting
{
"mcpServers": {
"word": {
"command": "uv",
"args": ["run", "--directory", "/path/to/word-mcp", "word-mcp"],
"env": { "WORD_MCP_ALLOW_RAW": "1" }
}
}
}On Linux the system interpreter is usually required:
{
"mcpServers": {
"word": {
"command": "python3",
"args": ["-m", "wordmcp"],
"env": { "PYTHONPATH": "/path/to/word-mcp" }
}
}
}WORD_MCP_ALLOW_RAW=1 registers word_run_raw, which runs code in the engine's own language:
AppleScript on macOS, a Python expression over the live application objects on Windows and
Linux. It exists so a failing call can be repaired without editing the server, but it is
arbitrary code execution; drop the variable once things settle.
Restart the client after changing its configuration.
Development
uv run pytest # service logic against a stub engine, no word processor needed
uv run ruff check .State of testing
The LibreOffice engine has been exercised on a real 161-page document: page count, text search, heading map, section lengths, page text, paragraph formatting, field updates and the escape hatch.
The Word engines for macOS and Windows follow documented interfaces but have not been run on a
live machine. Start with word_selftest. The likely places to adjust on macOS are
compute statistics and get information ... information type page number; the corresponding
COM calls on Windows are more stable.
Licence
MIT
Available Tools
13 toolsword_closeWord CloseA
Close the current document, saving it or discarding changes.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that closing may save or discard changes, but does not mention whether unsaved changes trigger prompts, whether the operation is irreversible, or what happens if the close fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. The purpose and key behavioral choice are immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple one-parameter tool with an output schema, the description provides enough context to invoke it correctly. Minor gaps around unsaved-document edge cases and sibling guidance keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the one parameter is a boolean 'save' defaulting to false. The description compensates by stating the effect ('saving it or discarding changes'), making the parameter's semantics clear despite the empty schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Close the current document') and clarifies the optional save/discard behavior. It is clearly distinct from siblings like word_save, but does not explicitly name alternatives or clarify whether closing without saving is the same as word_save followed by close.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (to close the current document), but gives no explicit guidance on when to prefer it over word_save, or what happens if no document is open. Minimum viable usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_export_pdfWord Export PdfC
Export the document to PDF with the word processor's own engine.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| pdf_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| bytes | Yes | |
| pdf_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It notes use of the word processor's own engine, but does not disclose overwrite behavior, required permissions, handling of null paths, or what happens if the document is not open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, its extreme brevity leaves no structure for parameter or behavioral guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values need not be described. But with two parameters at 0% schema coverage and no annotations, the description is missing critical details about input paths and export behavior, making it incomplete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both parameters are undocumented in structured fields. The description vaguely implies a source document and PDF destination, but does not explain the roles of 'path' and 'pdf_path', their optionality, or default null behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Export the document to PDF.' It is clear what the tool does, though it does not explicitly differentiate itself from sibling tools such as word_save or word_page_count.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites such as whether the document must be open. It only states the operation, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_find_pageWord Find PageC
List the pages on which a piece of text occurs, in document order.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| text | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| pages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the behavioral burden. It mentions document order but omits case sensitivity, match semantics, default path behavior, and how limit affects results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, and free of filler. It communicates the operation and ordering without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, 0% schema descriptions, and three parameters, the definition is too thin for reliable invocation. The output schema covers return shape, but input behavior such as path default, limit pagination, and matching rules is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to explain path, text, and limit. It only implies the required text parameter and says nothing about optional path or the default limit of 20.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (list pages) and condition (where text occurs) and adds document order. It is distinguishable from word_page_text, though it does not explicitly name siblings or scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are given; the agent must infer that this is for locating pages containing text. It does not say when to prefer word_page_text or other page tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_format_paragraphsWord Format ParagraphsA
Set layout properties on every paragraph containing a string.
keep_with_next ties a heading or a caption to what follows, keep_together forbids splitting a paragraph across pages, widow_control switches widow and orphan control on. Spacing is in points. Returns how many paragraphs changed.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| contains | Yes | ||
| space_after | No | ||
| space_before | No | ||
| keep_together | No | ||
| widow_control | No | ||
| keep_with_next | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure burden; it does well on property semantics ('keep_with_next ties a heading or caption to what follows', 'widow_control switches widow and orphan control on', spacing in points). But it never states what happens to omitted/null properties (presumably unchanged), whether changes are reversible, or which document parts are affected — material gaps for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in one sentence, followed by a compact property glossary and a return-value note. Every sentence carries information; the middle sentence is dense but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Moderate complexity (7 params, mutation, no annotations) with an output schema present, so return-value explanation is not strictly needed. Still missing the document-targeting requirement (`path` vs. active document) and matching semantics for `contains` (case sensitivity, all matches vs. first), which an agent needs before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it explains five of seven params with real meaning: the three boolean layout flags and the units of space_before/space_after. Remaining gaps are `path` (unexplained — presumably target document vs. active doc) and the null-handling convention for optional params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set layout properties on every paragraph containing a string.' The selection-by-substring scope is explicit, and no sibling tool (status, open, save, page_count, headings, outline, export) touches paragraph layout, so the tool is unambiguously distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer it applies when formatting paragraphs matched by text. There is no statement of when NOT to use it (e.g., tables, headers/footers, styles-level formatting) and no mention of the prerequisite that a document must be open or supplied via path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_headingsWord HeadingsC
List every heading with its outline level and the page it starts on.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| max_level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'List' does signal a non-destructive read and it discloses the returned fields (level, page). It says nothing about which document is read when path is omitted, whether results are truncated, or what happens on an invalid path, so the read-safety and edge-case profile remains implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, but the brevity comes at the cost of the missing parameter and scoping detail noted elsewhere; it is efficient rather than merely terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose explanation, but two undocumented parameters, no annotations, and no statement of which document is targeted leave an agent unable to call this confidently. The 'every heading' vs. max_level=3 mismatch further undermines completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does not: 'path' is never explained (file path vs. active document default of null). Worse, 'List every heading' conflicts with the max_level default of 3, which actually excludes levels 4+, so the description misleads about default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every heading') and adds what each entry carries (outline level and start page). However, it never distinguishes itself from the very similar sibling word_outline, so an agent must guess which of the two to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of word_outline, word_page_text, or word_find_page, and no prerequisites are stated. The agent is left to infer usage purely from the one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_openWord OpenC
Open a document and make it the current one.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the side effect of changing the current document, which is useful, but says nothing about failure modes (missing file, unsupported format), what happens to a previously open document, permissions, or whether opening is read-only or editable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words, and it efficiently conveys the core action and state effect. It is appropriately sized, though its brevity contributes to gaps elsewhere rather than being a structural flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a state-changing tool with no annotations, the description is incomplete: it omits error conditions, current-document replacement behavior, and any path validation expectations that an agent would need before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single required 'path' parameter, so the description should compensate. It does not clarify whether the path is absolute or relative, what file types are accepted, or whether a missing file is created; the parameter name alone carries all meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Open a document') and adds the state change ('make it the current one'). It is clearly distinct from siblings like word_close and word_save, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as word_status or word_close, nor any mention of prerequisites like the file existing or the document not already being open. The implied usage is that the caller wants to load a file, but no exclusions or conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_outlineWord OutlineB
Give the start page and length of each top-level part of the document.
Pass markers to define the parts by text instead of by heading level.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| markers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| fidelity | Yes | |
| sections | Yes | |
| total_pages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does not say whether the tool is read-only, what happens when 'path' is omitted, or whether it targets the currently open document. It only discloses the shape of the result (parts with a start page and a length).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the result is stated first and the alternative mode second. Nothing is padded, though 'Give' is a weak verb for a retrieval operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description sensibly covers the markers mode. Still missing are the semantics of a null 'path' (current document?) and whether supplying markers overrides or supplements heading-level detection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does explain what 'markers' means (matching text that delimits parts, as an alternative to heading levels), which is genuinely useful, but the 'path' parameter is never mentioned and no example marker string format is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the concrete output: the start page and length of each top-level part of a document. That is specific enough to distinguish it from word_page_count and word_page_text, though the relationship to the sibling word_headings is never made explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence implies an alternative mode ('Pass markers... instead of by heading level'), which gives the agent some guidance on choosing a mode. But there is no statement of when to prefer this over word_headings or word_find_page, and no prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_page_countWord Page CountC
Count the pages of a document as the word processor lays it out.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'As the word processor lays it out' usefully implies layout-dependent counting rather than stored page breaks, but the description omits whether this is a read-only operation, whether it requires an open document, whether it recalculates layout, and what happens if the document is not open. Return values are covered by the output schema, but the operational behavior is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is appropriately sized for the core purpose, though it is arguably too terse given the missing behavioral and parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers the return value, so the description need not explain it. However, for a tool with an undocumented optional path and no annotations, the description should clarify document targeting and whether an open document is required. Those gaps leave an agent unsure how to invoke it correctly in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single optional 'path' parameter. The description mentions 'a document' but does not explain what 'path' means, what happens when it is null (presumably the active document), or whether it accepts only open documents. With low coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Count the pages of a document.' It is clearly distinct from siblings like word_find_page or word_page_text, though it does not explicitly name those alternatives. The purpose is unambiguous without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says nothing about when to use this tool versus word_find_page, word_page_text, or word_status. There is also no mention of prerequisites, such as whether the document must be open or whether the layout must be current. Usage must be inferred entirely by the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_page_textWord Page TextC
Read the text that the word processor placed on a given page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | ||
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and largely fails: it doesn't say what happens if the document isn't open, whether page numbering is 1-based, what an out-of-range page returns, or whether tables/images/text-boxes are included. The phrase "text that the word processor placed" hints at a text layer but never clarifies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, with the action and subject front-loaded. Nothing is wasted, though the brevity is achieved by omitting content rather than by tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is legitimately omitted. However, for a read tool with no annotations and fully undocumented parameters, the description should still cover document-state requirements, page indexing, and failure behavior; none of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, so the description must compensate and does not. "Page" is only implied by "given page" with no numbering convention, and the optional "path" parameter (default null, presumably the active document) is never mentioned at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Read the text ... on a given page" states a specific verb (read) and resource (page text), which separates it from siblings like word_page_count and word_outline. It does not explicitly contrast with word_headings or word_export_pdf, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no exclusions, and never names an alternative for getting page-level content (word_headings, word_outline, word_export_pdf). It also omits prerequisites, such as whether a document must first be opened via word_open.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_saveWord SaveB
Save the current document in place.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it discloses almost nothing: what happens if no document is open, whether the save requires a pre-existing file path, or whether the operation can fail or prompt. Only the mutation nature of the call is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource. It is efficient, though so terse that it borders on under-specification rather than genuine concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and there are no inputs, so the surface area is small, but the absence of annotations means the description should still say what the save acts on and what state it requires. The key precondition (an open, previously saved document) is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema already conveys. Baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('save the current document') and scopes it with 'in place', which implicitly separates it from word_export_pdf and the read-only siblings. It doesn't name a sibling explicitly, so it stops just short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'In place' hints that this is the non-exporting save path, implying word_export_pdf is the alternative for writing out to another destination. There is no explicit when-to-use or when-not-to-use statement, only inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_selftestWord SelftestC
Try every operation on a document and report which ones this machine supports.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Try every operation' strongly implies the document may be modified or corrupted in the process, but the description never says so, nor does it mention permissions, side effects, or whether the file is safe to reuse afterward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with no filler and the purpose front-loaded. Brevity works in its favor; the issue is omission, not verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, but for a tool that attempts every mutating operation against a user-supplied file with no annotations, the description omits the one thing an agent most needs: whether the target document will be altered and whether that is safe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never mentions the single required `path` parameter — not even that it should point to a document that can withstand being modified by probing operations. The most safety-relevant constraint on the parameter is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action: attempt all document operations and report which ones the machine supports. This is distinguishable from siblings like word_status (which presumably reports status rather than probing capability), though the description doesn't name that distinction explicitly or clarify what 'operations' encompasses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of word_status or a specific operation tool, no prerequisites, and no indication of whether it should be run against a disposable document. The agent is left to infer invocation context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_statusWord StatusB
Report which word processor drives documents here and whether it answers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| engine | Yes | |
| version | No | |
| document | No | |
| fidelity | Yes | |
| available | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden: 'report' and 'whether it answers' imply a non-mutating liveness probe, which is useful signal. It does not say whether calling it has side effects, whether it can be slow or fail when the backend is down, or that it is a safe preflight check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no padding. It is front-loaded, though the awkward 'drives documents here' phrasing costs a bit of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return values need not be described. However, given the crowded word_* family including word_selftest, the description should say when this diagnostic is the right one — that gap keeps it at minimum-viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document; baseline 4 applies. The description correctly implies no input is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description indicates a diagnostic read: it reports which word processor backend is in use and whether it responds. The phrasing 'drives documents here' is vague and never names the actual subject (the document engine / integration), so an agent must infer what is being inspected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives, and notably no mention of the sibling word_selftest, which sounds like an overlapping health check. The agent is left to guess which diagnostic to run first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_update_fieldsWord Update FieldsC
Refresh fields and tables of contents so their page numbers become current.
| Name | Required | Description | Default |
|---|---|---|---|
| toc | No | ||
| path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| steps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a mutation ('refresh') but never states whether the document is modified in place, whether it must be saved afterward for changes to persist, whether an open document is required, or what happens to fields that cannot be resolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the effect front-loaded and no filler. It is efficient, though that brevity is partly the source of the missing detail rather than a virtue in itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but for an unannotated mutation tool with two undocumented parameters, the definition leaves too much unknown about document state requirements and persistence of the change.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for both parameters. The mention of 'tables of contents' loosely hints at the 'toc' flag, but its default (true) and the meaning of disabling it are unstated, and the 'path' parameter is not explained at all — nothing says whether null means the active document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb-plus-resource action ('refresh fields and tables of contents') with a stated effect (page numbers become current). It is reasonably distinguishable from siblings like word_headings or word_outline, though it never explicitly contrasts with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus alternatives, no prerequisites such as needing an open document, and no exclusions. The agent must infer the workflow entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.3.0- First observed
word_close - First observed
word_export_pdf - First observed
word_find_page - First observed
word_format_paragraphs - First observed
word_headings - First observed
word_open - First observed
word_outline - First observed
word_page_count - First observed
word_page_text - First observed
word_save - First observed
word_selftest - First observed
word_status - First observed
word_update_fields
TDQS
Scored across 13 tools
Most tools target clearly distinct operations: lifecycle (open/close/save), page inspection, text search, outline extraction, formatting, field refresh, and PDF export. The main possible overlap is between word_headings and word_outline, but their descriptions distinguish all headings from customizable top-level parts.
All tools use a consistent word_ prefix and snake_case naming, making the family easy to recognize. The only minor deviation is that some names are noun-like (word_page_count, word_headings) while others are verb-like (word_open, word_find_page).
With 13 tools, the server sits comfortably in the well-scoped range. Each tool appears to cover a specific document operation or inspection task without excessive fragmentation.
The surface covers opening, saving, closing, layout inspection, page text reading, paragraph formatting, field updates, and PDF export. However, it lacks document creation and direct content editing operations such as inserting or replacing text, which are notable gaps for a Word automation server.
Maintenance
Related MCP Connectors
Automate production-ready PDF, Word, Excel and PowerPoint documents from templates and JSON data
Convert DOCX documents to and from PDF, TXT, HTML, ODT, JPG and RTF.
41Deterministic DOCX/PPTX/XLSX/PDF parser: track changes, comments, headers, footers, merged cells.
Paged PDFs from HTML and CSS, document templates, and an editor link for every document.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Word document generation from templates using Jinja2 syntax and parsing of DOCX, PDF, and Excel files to extract structured content, metadata, and text.6 npm1MIT
- AlicenseBqualityDmaintenanceEnables comprehensive management of Microsoft Word documents with 30+ tools for reading, writing, formatting, template merging, image extraction, equation extraction, and style application.241MIT
- FlicenseBqualityDmaintenanceMCP server for automated visual-layout QA of DOCX documents, enabling rendering, measurement, rule checking, patching, and diffing in a closed loop.7-
- AlicenseBqualityCmaintenanceProvides MCP tools for working with Microsoft Word documents, enabling reading, editing with tracked changes, formatting, table manipulation, comments, and PDF conversion via direct OOXML manipulation.37MIT