KitchenSink4Word
KitchenSink4Word is an MCP server that lets an AI assistant create, read, edit, format, and manage Word .docx files locally, with live editing in Word, tracked changes, citations, tables, templates, and more.
Create and inspect documents: create/copy documents, read text, document view, outline, table/element listings, find text, and get document/health info.
Edit and format content: insert/delete/set paragraphs, batch anchor-based edits, search-and-replace across fragmented runs, apply character/paragraph formatting and styles.
Work with tables: create/read/delete tables, bulk cell edits in one call, merge-aware column/row structure changes, cell formatting, and table data import/export.
Track changes and comments: read/accept/reject revisions by author, write edits as tracked changes, threaded comments, structured diffs, and anonymization.
Academic features: footnotes/endnotes, TOC, index, captions, cross-references, headers/footers, sections, styles, word counts, validation, accessibility and submission prep.
Citations and references: Word-native citations/bibliography, Zotero search/cite, style conversion, and reference-field management.
Media and forms: images, native charts, LaTeX-to-Word equations, text boxes, hyperlinks, content controls, form fields, and field codes.
Assembly and templates: insert/split documents, move sections, copy tables across files, fill templates, mail merge.
Word COM integration (Windows + Word): live editing of open documents, PDF import/export, document compare/combine, field refresh, proofing, and readability stats.
Protection and safety: document protection, watermarks, verified redaction, automatic slot backups, atomic validated saves, path sandboxing, and optional pack-based tool loading for lower context cost.
Provides reference-management integration with Mendeley in Word documents, including inventory, detection, and integrity checking of Mendeley citation fields.
Provides citation management for Zotero in Word documents, including detection and integrity checking of Zotero citation fields and support for Zotero-based citations.
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., "@KitchenSink4WordInsert a TOC after the title page, then delete the third column from the table."
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.
๐ฐ KitchenSink4Word Community Edition
Landing page ยท llms.txt (machine-readable capability manifest for agents and LLM crawlers)
Edit Word documents with your AI assistant: tracked changes, citations, templates and live edits in Word.
Edit real Word documents from Claude Code, Codex CLI, Copilot CLI or any other MCP client that runs local tools. KitchenSink4Word connects your assistant to .docx files on Windows, and can edit a document while it is open in Microsoft Word so you see the changes land. Files are processed on your computer; the only thing that leaves it is what your AI app sends to its own provider. The Community edition is free under the AGPL. The Business edition adds a Windows installer, a signed update channel, a license your company can approve and support.
Works on: Windows. File editing works without Microsoft Word; live editing and the Word-powered features need Word installed.
Install
Pick the route for your AI app. The commands go in PowerShell on Windows or a terminal on macOS and Linux, not into an AI chat. The package routes need Python 3.12 or newer.
Claude Desktop
Install uv, then quit and reopen Claude Desktop. Download the .mcpb file from KitchenSink4Word releases. In Claude Desktop open Settings, then Extensions, then Advanced settings, then Install extension, and choose the file. The bundle fetches the Python package the first time it starts, so the first launch needs a network connection. Restart your session and check that the tools show as connected.
Claude Code or Codex CLI
Install uv, then run the line for your app and restart your session:
claude mcp add word -s user -- uvx kitchensink4wordcodex mcp add word -- uvx kitchensink4wordAny other local MCP client
Use uvx as the command and kitchensink4word as its argument, or install the package and use kitchensink4word as the server command:
pip install kitchensink4wordThen follow your client's guide for adding a local MCP server. Installing the package on its own does not connect it to an AI app.
Business edition
Compare the editions on the pricing page. Already purchased? Your Windows installer and download link are in your license portal.
Related MCP server: word-mcp-live
What it can do
110 document tools, plus the pack on/off controls.
Revise a report while it stays open in Word, with edits you can watch.
Read, accept and reject tracked changes, and work through reviewer comments.
Fill a template or assemble chapters into one manuscript.
Build and format tables, lists, headings and page layouts.
Insert citations, bibliographies, footnotes and cross-references.
Find formatting, accessibility and structure problems before handoff.
Compare documents, prepare mail merges and redact selected text.
Import or export PDF through Word when it is installed.
What is available depends on the packs you enable and the applications installed. The full tool reference is below.
Business edition
Need a license your company can approve and a setup someone supports? The Business edition pairs these tools with a Windows installer, a signed update channel and support under the Business terms. Update checks tell you when a covered release is available; nothing installs on its own. Compare the options on the pricing page. The Community edition stays free under the AGPL, including business use that meets its terms.
Privacy Policy
The tools run on your computer, and KitchenSink4AI receives no documents and no usage data from them. Your AI app may send prompts, file contents and tool results to its own provider under that app's settings and terms. Installing downloads packages, and the Community version check contacts PyPI unless you disable it; those requests carry connection details such as your network address and never your documents. Cloud folders and backups follow their own settings. The Privacy Policy covers the product, purchases and support records.
Not affiliated with, endorsed by, or sponsored by Microsoft Corporation. Microsoft and Word are trademarks of the Microsoft group of companies.
What the 222 operations cover
The everyday core covers text and formatting, tables (including merge-aware column insert/delete and one-call bulk cell edits), footnotes and endnotes (full lifecycle plus footnote and endnote conversion), TOC and caption lists, headers, footers, and sections, images, bulleted and numbered lists, content controls and fields, threaded comments, and tracked changes (read, accept and reject by author, and writing edits as tracked changes). Beyond that the surface spans equations (LaTeX to Word math), native charts, document assembly (chapter files into one manuscript), Zotero library citations, publication style conversion (8 styles, beta), review-cycle analytics, workflow suites (mail merge, batch operations, redaction, compliance and accessibility audits and fixes, submission prep, front matter, diagnostics), and Word-COM-backed document compare, field refresh, PDF export and import, and open-clean validation on Windows.
What makes it different
Merge-aware table column operations.
modify_table_structureinserts and deletes columns correctly through horizontally and vertically merged cells (gridSpan shrinks, vMerge chains re-root). At the time of writing, no other public Word MCP has this.Bulk-first API. Editing 20 cells is ONE
set_cellscall with a payload, not 20 round-trips.Tracked-change writing.
track=True, author="Jane"on edit tools produces real Word revisions the recipient can accept or reject, proven round-trip against the server's own revision engine.Document compare.
com_multi_document(action="compare")produces a Word-native redline between two versions of a document.Never corrupts. Atomic saves (temp file, structural validation, replace), automatic slot backups before every mutation, byte-identical passthrough of anything not being edited (equations, textboxes, content controls survive untouched), and clean typed errors: a file open in Word is refused with a message, not a hang.
Fragmented-run safe. Find and replace works across Word's arbitrarily split runs while preserving per-character formatting, with a ReDoS timeout guard on user regex and an optional blast-radius limit.
Why this one (the capability comparison)
Every public Word MCP server was surveyed before building this. The honest comparison is about what each one can do, not how many names it has:
Capability | KitchenSink4Word | GongRzhe Office-Word (2.1kโ , archived) | word-mcp-live (195โ ) | SecurityRonin docx-mcp (43โ ) |
Tiered context loading (lite core, packs on demand) | โ from ~10.2k tokens | โ | โ | โ |
Live editing while the doc is open in Word | โ cursor-safe, one Ctrl+Z per call | โ | โ | โ |
Table column insert/delete | โ merge-aware | โ | โ | โ |
Bulk cell edits (one call) | โ | โ | โ | โ |
Cell merge/unmerge | โ | merge only | โ | โ |
Footnotes AND endnotes CRUD | โ + conversion | add only | โ | โ |
TOC insert + refresh | โ | โ | โ | โ |
Native citations/bibliography | โ 12 styles | โ | โ | โ |
Index generation | โ | โ | โ | โ |
Tracked-change WRITING | โ | โ | โ | โ |
Accept/reject by author | โ | โ | partial | โ |
Document compare + combine | โ Word-native | โ | โ | buggy |
Watermarks / protection / line numbers | โ | protect only | โ | โ |
Section moving / template transfer | โ | โ | โ | โ |
Atomic saves + auto-backup | โ | โ | โ | โ |
Capability survey compiled from public repositories, documentation, and issue trackers. Corrections welcome: open an issue.
The packs
Numbers below come straight from scripts/measure_surface.py, never
hand-counted, and every one counts the whole tools/list entry a client
receives rather than the description and schema alone. The lite core loads at
startup; the seven packs load on demand.
Pack | Tools | Approx tokens | What it carries |
lite (startup) | 29 | ~10.2k | Everyday reading and editing: text, paragraphs, tables, cells, lists, find and replace, outline, document view, backups, workflow guide, server info, pack toggles |
references | 8 | ~2.9k | Word-native citations and bibliography, Zotero search and cite, parity checks, style conversion and detection |
review | 9 | ~2.4k | Tracked changes (read, accept/reject, reports), threaded comments, structured diff, anonymize and deanonymize |
academic | 24 | ~7.6k | Footnotes and endnotes, TOC, index, captions, cross-references, front matter, chapter headers, sections, styles, list numbering, word counts, validation batteries, submission prep, accessibility |
assembly | 7 | ~2.1k | Insert and split documents, move sections, copy tables across files, apply and fill templates, mail merge |
media-forms | 16 | ~5.6k | Images, charts, equations, text boxes, hyperlinks, table structure and styling, form fields, content controls, field codes |
com-live | 13 | ~3.1k | Drives a local Microsoft Word: PDF import/export, compare and combine, proofing, readability, field refresh, live editing of open documents |
protection-io | 6 | ~1.6k | Document protection, watermarks, redaction with verification, table data import and export |
Full surface | 112 | ~35.5k | Everything (110 document tools plus |
Quickstart: start lite, enable what you need
A session begins with the lite core. When a task needs more, the agent turns on the pack by name:
enable_tools(["references"]) # citations, bibliography, Zotero
enable_tools(["academic", "review"]) # notes, TOC, tracked changes, commentsLite-tool refusals name the pack and the exact enable_tools call to run, and
get_workflows recipes name the packs each workflow needs, so discovery is
built in. To skip tiering entirely, start the server with KS4W_MODE=full and
every tool is present from the first call.
Installed from the .mcpb bundle, the same two choices are checkboxes in the
server's Claude Desktop settings: "Load every tool at startup" and "Lock the
tool set at startup" (which fixes the surface so enable_tools refuses).
They write KS4W_ALL_TOOLS and KS4W_LOCK_TOOLS. Both take true or
false, treat empty as off, and refuse to start on anything else rather than
guessing. KS4W_MODE beats the first and KS4W_PACK_POLICY beats the second
whenever they are set, so a pinned pack list survives an install, and the
server writes one line to stderr at startup naming what decided the surface.
One tip that removes most permission pop-ups: In Claude Desktop's Tool permissions for this server, set the Read-only tools group to Always Allow. Those tools cannot change anything, so approving them once is safe, and Claude stops asking about every read. Leave the acting tools on Ask, so anything that changes things still checks with you first.
One client-side caveat: some MCP clients drop a tool's schema when a pack is
disabled and do not pick it back up on re-enable, even though the server sends
tools/list_changed both ways (observed in Claude Code, 2026-09). If a
re-enabled tool comes back as "no such tool", refresh the tool list on the
client side (in Claude Code, a ToolSearch call for the tool reloads its
schema).
Two numbers that matter
222 document operations, 110 tools. The operation count went up and the tool count came down on purpose. v1 spread similar jobs across many competing names; v2 gives each concept exactly one name built from a small verb table (
insert_,set_,manage_,list_elements,validate,delete_element), so an agent picks the right tool the first time and carries less schema to do it. Fewer tools, more reach. Measured with one yardstick on both trees, v1.6 performed 200 operations across its 189 tools and v2.0 performs 222 across 110: every v1.6 capability survived the consolidation (the migration map covers all 189, test-guarded) and v2 adds the anchored batch editor, the anchored document view, deletion parity, and wider dispatch on the multiplexers. Both figures come fromscripts/count_operations.py; the v1.6 run isscripts/count_operations_v16.py, which measures a v1.6 checkout with the same definition.Tiered loading: starts at about 10.2k tokens, scales to everything. A fresh session loads the 29-tool lite core (about 10,200 tokens) and turns on capability packs only when a task needs them, with one
enable_toolscall. Load every pack and the full surface measures about 35,500 tokens, so a session that never leaves lite carries roughly a quarter of the whole sink. (All figures are script-measured and count what the client actually receives; see Context cost below.)
Context cost (measured)
Almost no MCP server tells you what it costs to load. Here is the bill, from
scripts/measure_surface.py:
Lite start: 29 tools, about 10,200 tokens, loaded when the session opens.
Full surface: 112 tools (110 document tools plus the two pack toggles), about 35,500 tokens with every pack enabled.
Clients that defer tool schemas until first use (for example Claude Code) pay close to zero until a tool is actually called.
Both figures count the entire tools/list entry the client receives: name,
title, description, input and output schemas, annotations and metadata. The
estimator used to sum description and input schema only, which published a
number about a quarter below what crosses the wire, and a server whose pitch
is that it tells you what it costs does not get to publish the flattering
subset. The v1.6 comparison this section used to carry was taken on that
older yardstick, so it is gone rather than restated: no v1.6 measurement
exists on this one.
Safety model
Every mutating tool takes
file_pathand rotates the current content into stable backup slots before the change (backup=Falseto skip the rotation; the atomic validated save always applies). Backups live in a hidden.ks4w-backups/folder next to the document, one subfolder per document, with exactly two slots:prev.docx(state before the most recent mutation) andanchor.docx(session start, rotating after 60+ minutes of idle). Storage stays bounded at roughly two copies per document no matter how many edits a session makes.manage_backupslists, restores (undoably: the pre-restore state rotates intoprevfirst), and purges them, including leftover*.bak-*files from earlier schemes.Exclude
.ks4w-backups/from cloud sync tools (OneDrive, Dropbox, Google Drive): the slots churn on every edit and sync clients can hold locks that slow saves down.Mutations of the same file are serialized (in-process and across server processes via an advisory lockfile), so parallel calls cannot clobber each other and response metadata reflects settled document state.
COM/live mutations (documents open in Word) remain outside this backup system; Word's own AutoRecover covers the open document.
Saves are atomic and validated; a failed operation leaves the original byte-identical.
Deleting content that carries footnote references automatically removes the now-orphaned definitions;
validatereports integrity in both directions.Paragraph deletion refuses ranges that would cut a field (TOC, PAGEREF) in half or silently swallow a section break.
Update check (opt-out)
Variable | Effect |
|
|
Update check. The server looks for a newer release on PyPI only when you
call get_server_info, never at startup and never on a timer, at most one
request every seven days, capped at two seconds. The check is a single plain HTTPS
GET to pypi.org that sends nothing but the request itself. A failed check is
reported with its reason rather than hidden. Set KS4W_UPDATE_CHECK=off to turn it off
completely (the older KS4W_NO_UPDATE_CHECK=1 still works). The server never
downloads or installs anything.
Sandboxing (opt-in)
Off by default: with nothing configured, the server behaves exactly as it
always has. Set the KS4W_ALLOWED_ROOTS environment variable to a list of
directories separated by the OS path separator (; on Windows, :
elsewhere), for example %USERPROFILE%\Documents;D:\Work, and every path the
server touches must resolve inside one of those directories. Reads are gated
as well as writes, since a read outside the sandbox exfiltrates content just
as surely as a write plants it. The containment check runs on canonicalized
paths, so ..\ traversal, symlink and junction escapes, 8.3 short names,
extended-length prefixes, case tricks, and lookalike sibling directories
(Documents2 against an allowed Documents) are all caught, and UNC network
paths are refused unless an allowed root is itself a UNC path that contains
them. A blocked call refuses with a typed error naming the offending path and
the allowed roots before any file is opened. Recommended whenever the server
runs against untrusted or semi-trusted agent traffic.
Testing
2,189 tests (2,094 run everywhere; 95 live-marked tests drive a real Word
instance on Windows): the suite was developed against a private corpus of
real-world documents (book-length chapters, a document with 171 footnotes, a
manuscript with 126 tracked changes and reviewer comments), and CI
auto-generates structurally equivalent synthetic stand-ins
(tests/make_corpus.py) so the full suite runs on any machine, including
yours and every pull request. Local real documents, when present, take
precedence. tests/word_validator.py opens outputs in invisible Word and
fails on any repair prompt, the definitive corruption check.
Development history: prototyped with Claude Code in a day (2026-08-27), then
hardened across release cycles through dedicated adversarial rounds (scale
torture, pathological merge topologies, Unicode and schema fuzzing, ReDoS,
Word-lock lifecycle, live-editing interaction hunts, COM leak checks) plus
per-phase unit gates. Every finding fixed with a regression test, same session
it was found. research/ documents the OOXML algorithms and pitfalls the
implementation is built on, with attribution to the MIT-licensed reference
implementations studied.
Maturity: what the version number does and does not claim
This project moves fast and is honest about what backs it. What the test
record covers: every release passes the full suite plus dedicated adversarial
rounds through the raw MCP transport, against a corpus of long, heavily
formatted real-world documents with zero corruption across all of it. What it
does not yet cover: other machines, Word builds older than current Microsoft
365, non-English Word installs (some tools reference styles by localized
display name), RTL scripts, and the diversity of documents only real users
bring. The safety net while the tool earns that mileage is structural:
automatic slot backups before every mutation and atomic validated saves, so a
bad outcome is a restore, not a loss. If something misbehaves on your
documents, an issue
with the symptom (never the document itself, unless it contains nothing
private) is the most valuable thing you can send. Before filing: ask your AI
to run get_server_info and paste the output here; it is designed to be safe
to share.
Beta-labeled tools, heuristic by nature: review their flagged-items list
rather than trusting silently: convert_citation_style,
anonymize_for_review, validate(checks=["defined_terms"]), and the
text-reference scan inside validate(checks=["cross_references"]). Each
returns an explicit list of what it could not confidently handle.
Live-mode capability matrix
Which tools work on a document that is OPEN in Word. Dual-mode tools auto-route (live='auto'); everything else refuses with DOCUMENT_LOCKED until the file is closed. Word COM calls within one server process are serialized. Live calls and passwordless save or close also use a machine-local cross-process lock; a concurrent caller receives APP_BUSY before touching Word and nothing is queued. Live edits stay unsaved until com_save_document (the Option C model: see get_workflows(task='live-editing')).
Dual-mode tool (file + live) | Live-mode notes |
| one COM undo group; markdown lists/pipe tables in insert ops refuse up front with a close-the-file hint; replace verifies matched text in the live range; all other index-addressed ops run the snapshot staleness guard against the last saved state |
| section-break/field-crossing ranges refuse; range={} location endpoints run the snapshot staleness guard |
| plain queries, 500-match cap; formatting mode and include_textboxes file-mode only |
| formatting mode routes live; case mode file-mode only (live='force' refuses); range={} locations run the snapshot staleness guard |
| same shape |
| same key names; adds words/track_revisions, omits part list |
| same flat-list shape |
| body shape identical; include_textboxes/textbox modes file-mode only |
| heading_level maps to built-in Heading styles by numeric constant (outline-based docs get direct outline levels); inherit_format/copy_format_from file-mode only; text-selector locations run the snapshot staleness guard |
| plain items route live (255-char finds handled); preview and find_formatting modes are file-mode only (find_formatting with live='force' refuses) |
| plain text cells; vertical merges refuse live |
| shading/borders/tab_stops keys refuse live (XML-level); raw indices keep the v1 index-trust contract |
| expect guard honored; tracked-revision paragraphs refuse; text-selector locations run the snapshot staleness guard |
| Word's own statistics engine; exclusions mode file-mode only |
Live-only tools (need the document open): live_insert_at_cursor, live_repair, live_scroll_to, live_set_track_changes.
COM tier (drive the Word application, open or closed): com_export_pdf, com_import_pdf, com_multi_document, com_proofing_errors, com_readability_statistics, com_refresh_fields, com_save_document, com_validate_opens_clean, com_word_status.
Open-document reader: get_document_view (reads the last SAVED state and says so).
The remaining 63 writers and 14 readers are file-only: they refuse while the document is open (close it, or com_save_document with close=true). The full per-tool table lives in docs/internal/live_parity_v2.md.
Known limits
Live regex replacements skip matches positioned after complex fields in a story (COM character offsets drift there); the skip count is reported and a literal find still works. Live
set_cellsrefuses vertically merged tables (the file-based tool is merge-aware; close the doc for those).Live tracked-change attribution is best-effort: Word signed into an Office account attributes revisions to that account; results report the effective author honestly.
TOC and caption-list page numbers require a field update: automatic on next Word open, or immediate via
com_refresh_fields.
Upgrading from v1.x
Every v1.x tool name changed. The 189-tool v1.6 surface was rebuilt as a
consolidated set of 110 tools that cover every prior capability under one
grammar. If you are upgrading from v1.x, read the
migration guide first: it maps every old tool
name to its v2 home, and get_workflows("migrate-from-v1") returns the
same map in-session. New installs need nothing extra.
License
KitchenSink4Word is dual-licensed:
AGPL-3.0 (open source). Free for anyone (individuals, academics, and businesses) for any use that complies with the AGPL's terms. Those terms include sharing source, including your modifications, when you distribute the software or make it available over a network.
Commercial license. For organizations that want to build KitchenSink4Word into their own products or services without the AGPL's source-sharing obligations. Contact licensing@kitchensink4.ai.
Copyright (c) 2026 Alvut Consulting, LLC. KitchenSink4AI is a product line of Alvut Consulting, LLC.
Not affiliated with, endorsed by, or sponsored by Microsoft Corporation. Microsoft and Word are trademarks of the Microsoft group of companies.
Not affiliated with or endorsed by Microsoft Corporation. Microsoft and Word are trademarks of Microsoft Corporation. "For Microsoft Word" describes file-format compatibility only.
Available Tools
29 toolsapply_editsApply EditsADestructive
Apply a batch of anchor-addressed edits in one call: one lock, backup, and validated save. Anchors come from get_document_view. Ops (each edit has "op"): replace {anchor, find, text, occurrence?} (omitted = every match); set_text {anchor, text}; insert {location, markdown} (headings, paragraphs, lists and pipe tables become real structures); delete {anchor or anchors}; move {anchor or anchors, location, allow_cross_section?} (verbatim relocation, file mode only; refuses a paragraph holding a section break, and a landing in another section unless allowed); set_style {anchor, style}; format {anchor, formatting, find?, occurrence?} (no find = whole paragraph, mark included); set_paragraph_format {anchor, format}; set_cell {anchor: "t:hex:rNcN", text}. The whole batch validates BEFORE anything mutates, against BATCH-START text (never reference text an earlier op creates); one stale anchor refuses it all (STALE_ANCHOR lists the failed ops). changed carries per-op results plus fresh anchors for inserted paragraphs, so batches chain without re-viewing. Ops run in order; keep deletes last. Edits are applied directly, so under track changes they warn rather than record a revision. Auto-backup in file mode; atomic validated save. A document open in Word is edited live as ONE undo step, rolled back on mid-batch failure; markdown lists/tables and move are file-mode only there.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| edits | Yes | ||
| atomic | No | ||
| backup | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing validation-before-mutation, stale-anchor refusal, per-op results with fresh anchors, direct application under track changes, auto-backup, atomic save, and live-edit behavior with rollback on mid-batch failure. It also notes file-mode restrictions for markdown lists/tables and move. This is rich behavioral context.
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 dense and front-loaded with the primary purpose before diving into operation definitions. There is slight redundancy (e.g., mentioning 'validated save' and later 'atomic validated save', and repeating backup/lock concepts), but given the tool's complexity, each section earns its place.
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?
For a tool with this many operation variants and behavioral caveats, the description is highly complete. It covers validation semantics, error behavior, ordering, live vs file modes, backup, and what 'changed' contains. Since an output schema exists, the description correctly focuses on behavior and constraints rather than return-value details.
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?
With only 20% schema description coverage, the description carries nearly the entire parameter burden. It fully specifies each operation object accepted in 'edits', including optional fields such as occurrence, location, allow_cross_section, and the 't:hex:rNcN' anchor format for set_cell. This thoroughly compensates for the sparse schema.
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 opens with a specific verb and resource: 'Apply a batch of anchor-addressed edits in one call', and then enumerates the full set of operations (replace, set_text, insert, delete, move, set_style, format, set_paragraph_format, set_cell). This clearly distinguishes it from single-purpose sibling edit tools by emphasizing batch, anchor-addressed, and atomic behavior.
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 clear usage context: anchors come from get_document_view, edits are batched into one call, and ordering guidance is provided ('Ops run in order; keep deletes last'). It does not explicitly name alternatives or say when not to use this tool, but the context is strong enough for an agent to infer the right scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_styleApply StyleADestructive
Apply a named style. range={start,end} (locations or bare indices) applies a paragraph style to those paragraphs, changing their full look (Heading1-9 auto-created); target={search:{text, occurrence?}} applies a character style to the matched text instead. For an outline level without visual change use set_paragraph_format. Auto-backup (backup=False skips rotation); atomic validated save. Refuses documents open in Word. For batches, use apply_edits. Defining new named styles lives in the academic pack.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | ||
| style | Yes | ||
| backup | No | ||
| target | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive (destructiveHint=true). The description adds valuable context beyond that: auto-backup with a skip switch, atomic validated save, and refusal of documents open in Word. This contextualizes the destructive nature and the safety mechanism, though it does not mention error behaviors for missing styles or invalid ranges.
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 compact and front-loaded: it states the core action first, then differentiates modes, then gives alternatives and safety notes. Every sentence adds information; none is filler. It is slightly dense but not bloated.
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 details need not be explained. The description covers both invocation modes, sibling routes, backup behavior, file locking, and atomicity. The only notable gap is the precedence rule when both range and target are supplied, but the conditionals imply mutual exclusivity, making this a minor omission.
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 carry the semantic burden. It does explain range={start,end} with locations/bare indices, target={search:{text, occurrence?}}, and backup=False skips rotation. file_path and style are not elaborated, but style is effectively 'named style' and file_path is self-evident, so the core parameter meanings are conveyed.
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 opens with a specific verb and resource ('Apply a named style') and immediately distinguishes paragraph-style application via range from character-style application via target. It also names siblings (set_paragraph_format, apply_edits) to differentiate boundaries, so an agent can tell this tool apart without inspecting other schemas.
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 explicit when-to-use guidance: use set_paragraph_format for outline levels without visual change, use apply_edits for batches, and use range vs target for paragraph vs character styles. This is direct, actionable routing with no ambiguity left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
copy_documentCopy DocumentA
Copy a document byte-for-byte, e.g. to a new DTG-stamped filename before editing (manage_backups action='snapshot' names such a copy for you; this tool takes an explicit dest_path). Refuses an existing dest_path unless overwrite=True; an overwritten destination's previous content rotates into its .ks4w-backups prev slot first, so the overwrite is undoable via manage_backups restore. Split/merge and multi-document work live in the assembly pack.
| Name | Required | Description | Default |
|---|---|---|---|
| dest_path | Yes | ||
| file_path | Yes | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the refusal behavior on existing dest_path, the overwrite gate, and the backup rotation into .ks4w-backups for undoability. These are non-obvious side effects an agent must know before calling the tool.
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?
Every sentence delivers a distinct piece of information: core operation, typical use, alternative, overwrite behavior, backup consequence, and domain boundaries. The description is compact despite covering a surprising amount of nuanced behavior.
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 3 simple parameters and an output schema, the description covers the key behavioral risks: destination collision, overwrite, and recoverability. It also routes to relevant siblings. Nothing critical for correct invocation 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 coverage is 0%, but the description explains dest_path's explicitness, overwrite semantics, and the backup behavior of overwritten destinations. It doesn't explicitly describe file_path, but that parameter is self-evident from the tool's name and 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 operation on a specific resource: 'Copy a document byte-for-byte'. It differentiates itself from manage_backups and assembly-pack tools by giving concrete examples and naming the sibling 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?
Explicitly frames the tool for pre-edit backup ('before editing') and contrasts it with manage_backups action='snapshot', which auto-names copies. It also points out that split/merge and multi-document work live elsewhere, giving an agent clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_documentCreate DocumentA
Create a new blank .docx file, optionally setting the title core property. Refuses to overwrite an existing file (use copy_document with overwrite=True for that). Parent directories are created automatically. Populate the document afterward with insert_paragraphs, create_table, define_style (academic pack), and other tools. Template-driven builds live in the assembly pack.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behaviors: it refuses to overwrite existing files, auto-creates parent directories, and optionally sets the title core property. This adds meaningful side-effect information, though it does not describe error handling or permissions, which would have pushed it higher.
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 four tight sentences with the main action front-loaded, followed by a key safety behavior, an explicit alternative, and workflow context. Every sentence earns its place and there is no redundant restating of the title or schema.
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?
For a two-parameter creation tool with an output schema and clear annotations, the description covers the essential call behavior, overwrite refusal, directory creation, and follow-up workflow. Nothing an agent needs to invoke it correctly 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 must compensate. It does explain the title parameter as an optional core property, but file_path is only inferred from its name and the tool's purpose; no format, extension, or path-resolution details are provided. This is adequate but leaves a gap.
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 names a specific verb ('Create'), a concrete resource ('a new blank .docx file'), and the optional title behavior. It also distinguishes itself from copy_document by explicitly stating it refuses overwrites, so an agent can clearly tell this tool apart from its siblings.
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 explicit routing guidance: use copy_document with overwrite=True when overwriting is intended, use this tool for blank-file creation, and use assembly-pack tools for template-driven builds. It also names follow-up population tools, giving the agent a clear workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tableCreate TableA
Create a table from 2D string data with single-line borders and a bold repeating header row (header_row=False for none). location is the standard location object; omit it to append at the end; position 'after' only. Shading, column widths and repeat-header on an EXISTING table: format_cells and set_table_properties (media-forms). From a CSV or JSON file: import_table (protection-io pack). Auto-backup: prev/anchor slots in .ks4w-backups (backup=False skips rotation only); atomic save. Refuses documents open in Word.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| backup | No | ||
| location | No | ||
| width_pt | No | ||
| file_path | Yes | ||
| header_row | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only carry false hints that this is not read-only and not open-world, so the description shoulders the behavioral burden. It discloses auto-backup rotation slots (prev/anchor in .ks4w-backups), the exact meaning of backup=False (skips rotation only), atomic save behavior, and refusal to operate on Word-open documents.
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?
Every sentence delivers a distinct piece of information: core behavior, location semantics, sibling routing, backup behavior, and the Word-open constraint. It is dense yet well-structured and front-loaded with the primary purpose.
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 description covers the decision-relevant distinctions, location semantics, and safety/backup behavior well for a 6-parameter tool with no schema-level param descriptions. The only notable gap is the unexplained width_pt parameter, but the parameter name and surrounding context make it inferable enough for a competent agent.
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?
With 0% schema description coverage, the description adds meaningful semantics for data, header_row, location, and backup. However, width_pt is never mentioned, and file_path is left to name inference, so the compensation is excellent but incomplete.
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 opens with a specific verb and resource: 'Create a table from 2D string data' with explicit formatting defaults. It also distinguishes itself from format_cells, set_table_properties, and import_table by naming what each sibling is for, so an agent can tell it apart without ambiguity.
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?
It explicitly routes to alternatives: format_cells/set_table_properties for existing tables and import_table for CSV/JSON files. It also states the location rule (only 'after', omit to append) and the Word-open refusal condition, giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_elementDelete ElementADestructive
Delete one document element that has no lifecycle tool of its own.
type: equation | image | chart | bookmark | hyperlink | caption |
reference_list | content_control. Address equations, images, charts by
their list_elements index; reference_list (TOC, List of
Tables/Figures, index) by its read order; bookmarks by name (markers
go, the text stays; Word-internal underscore names refused); hyperlinks
by target url in id and/or a location search on the link text (the
link is unwrapped, display text kept, the relationship dropped once
unshared; several matches without occurrence refuse loudly listing
every candidate); captions by location (Caption-styled paragraphs
only); content controls by tag or index (the whole control including
content; locked controls refused). Deleting an image or chart also
removes its media, chart, and embedded-workbook parts once nothing else
references them. Objects with lifecycle tools stay there: notes in
manage_note (academic pack), comments in manage_comment (review
pack), sources in manage_source (references pack), tables in
delete_table, paragraphs in delete_paragraphs. Auto-backup:
prev/anchor slots in .ks4w-backups (backup=False skips rotation only);
atomic validated save. Refuses documents open in Word.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| type | Yes | ||
| backup | No | ||
| location | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses side effects (removal of media, chart, and embedded-workbook parts), backup rotation behavior, atomic validated save, refusal of locked controls and Word-open documents, and the unwrap/drop-relationship behavior for hyperlinks. This substantially exceeds what annotations alone convey.
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?
Though dense, the description earns its length: every clause maps to a decision an agent must make. The scope is front-loaded and the content is grouped per element type with consistent delimiter usage.
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?
For a destructive tool with 5 parameters, 0% schema coverage, and many element variants, the description covers addressing, side effects, refusals, backup behavior, and exclusions. Nothing essential is left unspecified.
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 carries the full burden, and it does. It explains how id, location, type, and backup are used differently across element types, including index, read order, name, target URL, tag, and skip-rotation semantics.
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: delete one document element with no lifecycle tool of its own. It enumerates the exact element types covered and explicitly contrasts with sibling tools like delete_table and delete_paragraphs, so an agent can readily distinguish it.
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 explicitly says when to use this tool versus alternatives: 'Objects with lifecycle tools stay there' and names each sibling tool for notes, comments, sources, tables, and paragraphs. It also gives per-type addressing rules and refusal conditions, providing full usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_paragraphsDelete ParagraphsADestructive
Delete body paragraphs by 0-based inclusive index (start, end; end defaults to start) or by range={start, end} location objects. Refuses ranges cutting a field or a section break; deleting every paragraph leaves one empty one behind. track records tracked deletions. expect_start/expect_end delete nothing unless that index still holds the given text. Auto-backup in file mode (backup=False skips rotation). Open documents edit live (serialized), unsaved until saved. For batches, use apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| live | No | auto: file or live; force: live; off: refuse | auto |
| range | No | ||
| start | No | ||
| track | No | ||
| author | No | Claude | |
| backup | No | ||
| file_path | Yes | ||
| expect_end | No | ||
| expect_start | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive (destructiveHint=true) and not read-only (readOnlyHint=false). The description adds substantial behavioral detail: 'Refuses ranges cutting a field or a section break; deleting every paragraph leaves one empty one behind,' 'track records tracked deletions,' 'expect_start/expect_end delete nothing unless that index still holds the given text,' and 'Auto-backup in file mode.' These go well beyond the annotations and describe edge cases and side effects, making behavior predictable.
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 dense paragraph but each sentence contributes information. It front-loads the primary usage (start/end/range), then constraints, then special parameters, then live behavior, and finally the batch alternative. It's not overly verbose, though it could be organized with bullet points for clarity. Still, it's efficient and well-structured.
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 are documented there. Annotations cover the destructive nature. The description covers many behaviors: deletion modes, constraints, tracking, expected text checks, backup, and live editing. It doesn't explicitly state what happens on success or error, but given the output schema and the density of details, it is fairly complete for an agent to use correctly. Some edge cases like 'deleting every paragraph leaves one empty one behind' are noted, which is helpful.
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 only 10%, so the description must compensate. It does explain key parameters: start/end/range for the deletion range, track for tracking deletions, expect_start/expect_end for conditional deletion, and backup for auto-backup behavior. However, it doesn't describe 'author,' 'live,' or 'file_path' explicitly, though some are implied (e.g., 'Open documents edit live' implies the live parameter). Given the low schema coverage, it adds meaningful semantics for most parameters but leaves a few self-explanatory ones unaddressed.
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 clearly states the tool's function: 'Delete body paragraphs by 0-based inclusive index (start, end; end defaults to start) or by range={start, end} location objects.' It also differentiates from siblings by noting 'For batches, use apply_edits,' which explicitly names an alternative. The verb 'delete' and resource 'paragraphs' are specific and unambiguous.
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?
It provides clear usage context: 'Open documents edit live (serialized), unsaved until saved' and 'Auto-backup in file mode (backup=False skips rotation).' It also gives an explicit exclusion: 'For batches, use apply_edits.' However, it doesn't elaborate on when to use delete_element or other deletion tools, so it's not fully comprehensive but adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tableDelete TableADestructive
Delete a whole table and its contents. table_index is the 0-based position among body-level tables in document order, as reported by list_elements(type='tables') or get_document_view; nested tables are removed with their host table. To clear cell values while keeping the grid, use set_cells instead. Auto-backup: prev/anchor slots in .ks4w-backups (backup=False skips rotation only); atomic validated save. Refuses documents open in Word.
| Name | Required | Description | Default |
|---|---|---|---|
| backup | No | ||
| file_path | Yes | ||
| table_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though destructiveHint=true already signals mutation, the description adds substantial behavioral context: nested tables are removed with the host table, auto-backup behavior is described, saves are atomic and validated, and documents open in Word are refused. There is no contradiction with the annotations.
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?
Three dense sentences with no filler. The core action is front-loaded, followed by index lookup guidance, the alternative, backup behavior, and a failure condition. Every sentence contributes useful information.
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?
For a destructive tool with annotations and an output schema, the description covers the key parameter semantics, alternative routing, backup behavior, and an important failure mode. Nothing essential for correct invocation 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 must compensate. It fully explains table_index semantics and gives backup-related behavior, but file_path is only implicit from its name and the backup=False behavior ('skips rotation only') is somewhat terse.
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 opens with a precise verb and resource: it deletes a whole table and its contents. It also scopes the target to body-level tables and explains nested-table behavior, making it clearly distinguishable from siblings like set_cells and delete_element.
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?
It explicitly tells the agent when not to use it ('To clear cell values while keeping the grid, use set_cells instead') and states a failure condition ('Refuses documents open in Word'). It also explains how to obtain table_index via list_elements or get_document_view, which is concrete, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_documentDiagnose DocumentARead-only
Produce a one-call structural health report, read-only: content-type coverage, dangling relationships and orphan parts, field balance per story part, footnote/endnote integrity, references to undefined styles and numbering, content-control and bookmark sanity, duplicate revision ids, missing image targets, broken cross-references, and a per-part size profile. Never fails on a weird-but-openable document; every check degrades to a reported problem, and healthy=false only for problems that render broken or lose content in Word. The deep companion to validate(checks=['core']). No live mode BY DESIGN: this reads the saved package's XML, stale while Word holds unsaved changes. Close the document first, or use com_validate_opens_clean (com-live pack) / live get_document_info. The full validate check battery lives in the academic pack.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds context beyond that by detailing the scope of the health report and the degradation behavior ('Never fails on a weird-but-openable document; every check degrades to a reported problem'). It also reveals the stale-data limitation and the design choice to avoid live mode, which is valuable context not conveyed by annotations.
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 dense but well-structured: front-loaded with the core purpose, then behavioral guarantees, usage conditions, and alternatives. While lengthy, every sentence adds value. It could be slightly trimmed, but it's not verbose.
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 the tool's complexity (numerous checks) and that annotations provide read-only hint, the description is complete. It covers what the tool does, how it behaves on problematic documents, when to use alternatives, and the critical limitation (stale data). The output schema is present, so return format is already defined. Nothing critical is missing for an agent to invoke it correctly.
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%, meaning the description must compensate for the lack of parameter documentation. However, the only parameter is file_path, which is self-explanatory from the schema. The description doesn't explicitly state that file_path is required or what format it should be, but the name alone is sufficient. The description's enumeration of checks indirectly clarifies the expected behavior, but no additional syntax or constraints are 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 clearly states the tool's purpose: produce a structural health report for a document. It enumerates specific checks (content-type coverage, dangling relationships, orphan parts, etc.), making it distinct from siblings like get_document_info or validate. The phrase 'one-call structural health report' is a specific verb+resource, and the read-only nature is highlighted.
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 explicit guidance on when to use this tool: as a companion to validate(checks=['core']), and it specifies when NOT to use it (when the document has unsaved changes in Word). It also names alternatives: com_validate_opens_clean and get_document_info, with clear conditions. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_toolsDisable ToolsAIdempotent
Disable previously enabled tool packs for this session and reclaim their context; the lite core always stays on. Idempotent. The result reports the packs just disabled, the approximate tokens removed, and the remaining surface. packs takes the same names as enable_tools (its description carries the menu) or ['everything'].
| Name | Required | Description | Default |
|---|---|---|---|
| packs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: it is session-scoped, reclaims context, reports the disabled packs, approximate tokens removed, and remaining surface, and notes the lite core always remains. The idempotentHint annotation is echoed in the description, but the extra session and output details provide transparency the annotation alone does not. There is no contradiction with annotations.
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 compact, with two sentences that front-load the core action and effect before parameter guidance. Every clause adds information: session scope, context reclaim, idempotence, result shape, and valid pack values. No filler or redundant restating of the title appears.
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 the tool has a single parameter, an output schema, and annotations covering idempotence and non-destructiveness, the description supplies all necessary behavioral context. It explains the result contents, the special 'everything' option, and the always-on lite core. The only missing detail is the exact pack menu, but the description directs the agent to enable_tools, which is sufficient for a tool with this complexity.
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 carries the full burden for explaining 'packs'. It does so effectively by saying it accepts the same names as enable_tools or the special value ['everything'], which tells the agent both the format and the allowed conceptual values. It does not enumerate the pack names, but delegating to enable_tools is a reasonable and functional shortcut given the sibling tool exists.
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 uses a specific verb and resource: it disables previously enabled tool packs for the current session, reclaiming context. It clearly differentiates this from enable_tools by describing the inverse operation, and the 'lite core always stays on' detail further scopes what the tool does. No ambiguity remains about the tool's primary function.
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 clearly states the context: disabling previously enabled session tool packs. It directly references enable_tools as the source for valid pack names, which gives the agent a path to understand what values to pass. It stops short of explicit when-not-to-use guidance, but the inverse relationship with enable_tools makes the usage intent clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_toolsEnable ToolsAIdempotent
Enable optional tool packs mid-session (sessions start lite). Idempotent; reports tokens added. packs = names below or ['everything']; disable_tools reverses it. Task map: cell merges, tables, images, forms -> media-forms; tracked changes, comments -> review; citations -> references; TOC, notes -> academic; document merge -> assembly; PDF, live Word -> com-live; redaction -> protection-io. Packs:
references (~2.9k): citations and bibliography: Word-native sources, bibliography styles, Zotero search/cite, parity checks, style conversion
review (~2.4k): tracked changes (read, accept/reject), comments (add, reply, resolve), reviewer reports, structured diff, anonymize
academic (~7.6k): notes, TOC, index, captions, cross-references, bookmarks, headers/footers, sections, styles, word counts, validation, submission prep, accessibility
assembly (~2.1k): multi-document work: insert/split documents, move sections, copy tables across files, templates, mail merge
media-forms (~5.6k): images, charts, equations, text boxes, hyperlinks, table structure (merge/split cells, rows, columns, sort), forms, content controls, field codes
com-live (~3.1k): drives the Word app: PDF import/export, compare/combine, proofing, readability, live editing of open documents
protection-io (~1.6k): protection, watermarks, redaction with verification, table CSV/JSON import/export
| Name | Required | Description | Default |
|---|---|---|---|
| packs | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, but the description adds that it reports tokens added and that disable_tools reverses the change. This gives useful state-change and cost context beyond the structured annotations. There is no contradiction between the description and annotations.
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 long but front-loads the core behavior, then provides a task map, then a structured pack list. Every section earns its place given the need to document seven different pack options, and the formatting makes scanning easy.
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 an output schema present, the description does not need to explain return values. It covers when to use the tool, valid pack names, what each pack does, token implications, idempotency, and the inverse operation. An agent has enough information to invoke this tool correctly.
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 schema provides no descriptions and no enums for the packs parameter, but the description fully compensates. It defines valid values as the names below or ['everything'], enumerates all seven pack names, and explains what each pack enables. This turns an opaque array-of-strings schema into a usable selection mechanism.
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 first sentence states a specific action and target: enable optional tool packs mid-session. It also distinguishes itself from disable_tools by noting that disable_tools reverses this operation. An agent can immediately tell what this tool does and how it relates to its sibling.
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 clear when-to-use context: sessions start lite, so this tool is for adding optional packs mid-session. It names the inverse tool, disable_tools, and provides a task-to-pack mapping, enabling the agent to select the correct pack for common jobs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_textFind TextARead-only
Find text in paragraphs and table cells; returns locations plus context. include_textboxes=True also searches text-box content as labeled matches; file-mode only. Pass formatting={...} (bold, font, size_pt, color, ...) to search by EFFECTIVE formatting: resolved through run, style chain, and defaults; query=None returns every formatted stretch; scope 'body' or 'all'; file-mode, no regex. Plain queries search open documents live (same shape, 500-match cap). Read-only. To read a known range, use get_text.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| query | No | ||
| regex | No | ||
| scope | No | body | |
| file_path | Yes | ||
| formatting | No | ||
| context_chars | No | ||
| include_textboxes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the 500-match cap, the file-mode-only constraints, the effective-formatting resolution chain, query=None behavior, and the live vs file mode split. This is rich behavioral context that annotations alone do not provide.
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 compact but information-dense: core purpose first, then mode-specific details, then routing. Every clause adds either a constraint, a behavior, or an alternative, with no filler.
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 the output schema exists, return values do not need elaboration. The description covers the main behavioral branches, file/live modes, formatting resolution, caps, and the relevant sibling tool, making it complete for a tool with this complexity.
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?
With only 13% schema description coverage, the description carries most parameter meaning: formatting, include_textboxes, scope, regex constraints, live behavior, and query=None semantics. It does not explicitly explain context_chars, though the phrase 'returns locations plus context' plus the parameter name partially covers it.
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 ('Find text in paragraphs and table cells'), names the returned artifact ('locations plus context'), and distinguishes itself from get_text by pointing to the known-range case. It also mentions formatting and textbox modes, making the tool's scope unmistakable among siblings.
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?
It explicitly routes to get_text when reading a known range, states that formatting and textbox searches are file-mode only, and clarifies when live documents are searched ('Plain queries search open documents live'). The read-only note and file/live distinctions provide concrete when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_textFormat TextADestructive
Apply character formatting or change case. formatting: bold, italic, underline, strike, font, size_pt, color, highlight and more (a wrong key lists all). case: upper|lower|title|sentence. Target: range={start,end}, find or both; one of formatting or case per call. find formats just that SUBSTRING: the run splits at the matched offsets, each fragment keeping its other formatting. A range without find takes whole paragraphs, mark included. Auto-backup; atomic save. Formatting is live-capable; case is file mode only.
| Name | Required | Description | Default |
|---|---|---|---|
| case | No | ||
| find | No | ||
| live | No | auto: file or live; force: live; off: refuse | auto |
| range | No | ||
| backup | No | ||
| file_path | Yes | ||
| formatting | No | ||
| occurrence | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by disclosing auto-backup, atomic save, substring run splitting with preservation of other formatting, whole-paragraph behavior including marks, and the live/file-mode restriction. These are exactly the side-effect and mutation details an agent needs. No contradiction with annotations.
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?
Dense and front-loaded; every clause adds operational information and there is no filler or repetition. The telegraphic style is justified by the number of constraints the description must convey.
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?
For a destructive, 8-parameter tool with an output schema, it covers targeting, side effects, and live mode well. The missing piece is occurrence semantics, and the live values auto/force/off are only implied by 'live-capable' rather than spelled out. Still, most essential call decisions are supported.
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?
With only 13% schema coverage, the description compensates substantially: it enumerates formatting fields, case values, range/find targeting, and backup/live semantics. The main gap is the occurrence parameter, which interacts with find but is not explained.
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: 'Apply character formatting or change case', then enumerates the exact formatting keys and case modes. This clearly distinguishes the tool from sibling paragraph/style tools like set_paragraph_format and apply_style, even though those are not named.
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?
Provides strong mode-selection constraints: one of formatting or case per call, range vs find targeting, and live vs file-mode capability. However, it never names sibling tools or states when to prefer this over set_paragraph_format, apply_style, or find_text; the agent has to infer the boundary from 'character formatting'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_infoGet Document InfoARead-only
Read a one-call document overview: paragraph/table/footnote/comment/ revision counts, sections, and package parts. Documents open in Word are read live (same key names; live adds 'words' from Word's own ComputeStatistics counter plus track_revisions, and omits the part list). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint=true, and the description reinforces 'Read-only'. It adds valuable context about the 'live' parameter, explaining behavior for documents open in Word (adds 'words' from ComputeStatistics, omits part list). This goes beyond annotations and is consistent, so no contradiction.
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 sentences with no filler, front-loading the core purpose and then detailing the live behavior. The second sentence is dense but necessary for nuance. Well-structured and efficient.
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 the output schema exists, return values are documented separately. The description covers the read-only nature, the live behavior, and what information is returned. For a read-only overview tool, this is complete enough; the only minor gap is explicit guidance on when to choose this over siblings.
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 covers 50% of parameters (only 'live' has a description). The description elaborates on the 'live' behavior, which directly explains the enum values, but does not add anything about 'file_path' (though that is self-explanatory). It partially compensates for the coverage gap but could be more explicit about parameter meanings.
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 clearly states a specific verb ('Read') and resource ('document overview'), enumerating the exact content (counts, sections, package parts) and distinguishing itself from siblings by positioning as a one-call overview. It is unambiguous and differentiates from other get_ tools like get_document_view or get_text.
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 use for a high-level overview but does not explicitly state when to use it over alternatives or when not to use it. It mentions 'one-call' which hints at efficiency, but there is no explicit comparison to siblings like get_document_view or get_outline, leaving selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_viewGet Document ViewA
Read the document as an anchored markdown projection, the low-token alternative to get_text for orientation and bulk editing. One block per paragraph, prefixed [hex] with a stable anchor id (from w14:paraId, which survives edits elsewhere in the document); headings carry # prefixes, tables render as pipe tables under [t:hex] with cells addressed t:hex:rNcN (1-based). Anchors work in every location object ({"anchor": "hex"}) and in apply_edits ops. scope: {"outline": "3.2"} for one heading's section, or {"paragraphs": {"start": N, "end": M}} (end exclusive); omit for the whole document. detail: "structure" (headings and counts only), "text" (default), "full" (adds {++ins++}/{--del--} revision markers and [cN] comment refs with an author legend). include: {"tables": false} to skip tables, {"notes": "inline"} to append footnote/endnote text. Documents without paraIds get VOLATILE anchors (flagged in the header) that change with any edit; stamp_anchors=true writes real paraIds so anchors become durable. Stamping is the ONE mutation this tool can make and runs only when explicitly requested, with the normal backup and validated save; plain reads never modify the file. A document open in Word is read from its last saved state. To locate a string, use find_text; to enumerate collections, use list_elements.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| detail | No | text | |
| include | No | ||
| file_path | Yes | ||
| stamp_anchors | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations say readOnlyHint=false, and the description reveals the single mutation path: 'Stamping is the ONE mutation this tool can make and runs only when explicitly requested, with the normal backup and validated save; plain reads never modify the file.' It also discloses volatile anchors without paraIds, the effect of stamp_anchors, and that Word-open documents are read from last saved state โ substantial behavior beyond structured annotations.
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?
Despite being long, the prose is dense and logically ordered: purpose and output format first, then parameter semantics, then behavioral caveats, then sibling routing. Every clause adds signal and does not repeat schema or annotation content.
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?
For a tool with 5 parameters, one mutating flag, anchor durability concerns, and multiple output details, the description covers all needed operational context: projection layout, anchor IDs, scope forms, detail levels, table addressing, revision/comment output, optional include behaviors, mutation semantics, and fallback alternatives. The existing output schema relieves it from explaining return values.
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?
Input schema has 0% description coverage, so the description carries the full parameter load. It does: scope gives concrete JSON examples and end-exclusive semantics, detail enumerates the three levels with their markers, include gives example values, stamp_anchors is explained with durability implications, and file_path is the obvious required target. Nothing is left unexplained.
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 opens with a specific verb and object ('Read the document as an anchored markdown projection') and immediately positions it against get_text ('low-token alternative ... for orientation and bulk editing'). It goes on to specify the output shape (blocks, [hex] anchors, headings, tables), so an agent can distinguish it from siblings without opening schemas.
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?
It names the primary sibling alternative (get_text) with the exact tradeoff ('low-token alternative') and closes with explicit routing: 'To locate a string, use find_text; to enumerate collections, use list_elements.' This gives clear when-to-use context and points away from the tool for other jobs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_outlineGet OutlineARead-only
List every heading with its paragraph index and level. Detects Heading styles AND w:outlineLvl overrides (direct or style-inherited); detected_via names which. detect_formatted=True adds a heuristic scan for direct-formatted headings (short bold, italic or centered; numbered captions excluded): CANDIDATES with an INFERRED level and a confidence. Detecting nothing returns a note plus flat structure counts. The indices feed the location object's paragraph and outline selectors. Read-only. TOC building: academic pack.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| file_path | Yes | ||
| detect_formatted | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already in annotations, the description still adds substantial behavioral context: dual detection mechanisms (Heading styles vs w:outlineLvl), the detect_formatted heuristic with INFERRED levels and confidence, the empty-result fallback (note plus flat counts), and how indices feed location selectors. No contradiction with annotations.
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 dense but every sentence earns its place โ core behavior, detection nuance, edge case, downstream use. The telegraphic caps style (CANDIDATES, INFERRED) adds slight noise but doesn't waste space; it is appropriately sized for a tool with three behavioral modes.
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 an existing output schema and annotations covering read-only safety, the description covers the remaining context: detection modes, heuristic behavior and confidence, empty-result fallback, and how the output feeds the location object's selectors. Nothing an agent needs to invoke the tool correctly 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 coverage is low (33%), and the description compensates for the most semantically loaded parameter: detect_formatted gains a full explanation of the heuristic scan and its output semantics. file_path is self-evident and live is already described in the schema enum, so the compensation is adequate where it matters.
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?
Opens with 'List every heading with its paragraph index and level' โ a specific verb, resource, and output shape. It further distinguishes itself from siblings like get_text and find_text by detailing detection of Heading styles and w:outlineLvl overrides, so an agent can separate it from get_document_view and get_table without opening schemas.
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 closing label 'TOC building: academic pack' provides a stated use case, so this is more than no guidance. However, it names no sibling alternatives and gives no when-not-to-use conditions, leaving the agent to infer when get_document_view or get_text would be a better fit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoGet Server InfoARead-only
Report this server's build and environment: version, the active tool surface (tool count, approximate token bill, per-pack state), the packs enable_tools can load, what decided the startup surface and whether it is locked, whether the Word application tier can run here, whether path sandboxing is on, the host OS and Python, and the update-check state. Needs no document, opens no file, starts no Word. Paste-safe: no path, document name, or user name, so a bug report can carry it as it stands.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description goes well beyond that by stating that it opens no file, starts no Word, and is paste-safe with no path, document name, or user name. It also discloses exactly what state it reports, including lock status, Word availability, path sandboxing, and update-check state.
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 long but information-dense: it front-loads the purpose, enumerates the reported details, and closes with a practical reassurance about paste-safety. A few items, like 'opens no file' and 'starts no Word,' repeat the same idea, but the overall structure earns its length.
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?
For a zero-parameter tool with an output schema, the description is complete: it tells the agent what information is returned, that no document context is needed, that it is read-only, and that the result is safe to share. Nothing necessary for correct invocation 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?
There are zero parameters and 100% schema coverage, so the schema fully documents that no input is needed. The description adds useful confirmation by saying it needs no document or file, which clarifies that no implicit context is required either.
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 names a specific verb ('Report') and a distinct resource ('this server's build and environment'), then enumerates the exact content. It is clearly distinguishable from every sibling, which are all document-oriented operations like get_document_info and delete_table.
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?
It spells out that the tool needs no document, opens no file, and starts no Word, which tells an agent this is the universal server-level information tool rather than a document-scoped one. It does not explicitly name alternatives, but no sibling provides an equivalent server-info function, and the context makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tableGet TableARead-only
Read one table in full: every cell's text, the merge map, and column widths. table_index is 0-based among body-level tables in document order. has_merges=false returns rows of strings; has_merges=true returns {text, grid_span, vmerge} cells. For a nested table pass nested={row, cell, index} addressing the host cell (index picks among several, default 0). Write with set_cells; shade with format_cells; widths and repeat-header set_table_properties; reshape with modify_table_structure (media-forms pack). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| nested | No | ||
| file_path | Yes | ||
| table_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already assert readOnly/openWorld behavior; the description goes beyond by disclosing the two output modes selected by has_merges and the nested-table addressing convention. It also explicitly repeats 'Read-only,' reinforcing the annotation.
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?
Every sentence carries information: purpose, return variants, nested addressing, and sibling routing. It is front-loaded with the core capability and stays structured without redundancy.
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?
For a read tool with an output schema and readOnly/openWorld annotations, the description supplies the missing contextual semantics: indexing rules, merge-mode behavior, nested-table invocation, and which sibling tools handle writes/shading/structure changes. Nothing needed for correct invocation is left undocumented.
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 carries the full param-documentation burden. It explains table_index as 0-based among body-level tables in document order and fully specifies the nested object shape and defaults, which the bare schema does not convey.
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 opens with a precise verb-resource pair ('Read one table in full') and enumerates exactly what is returned (cell text, merge map, column widths), which distinguishes it from sibling read tools like get_text or get_document_view.
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?
It gives concrete conditions: use has_merges for merged-cell data and nested for nested tables, and it routes mutations to sibling tools (set_cells, format_cells, set_table_properties, modify_table_structure). It lacks an explicit contrast with alternative read-only tools, but the table-specific scope is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_textGet TextARead-only
Read body paragraphs as [{index, text, style, ...}] with effective styles. start/end slice by paragraph index (0-based, end EXCLUSIVE); contains filters. include_textboxes=True appends text-box content as labeled extras, body indices untouched; textbox=true (or {"index": n}) returns ONLY text-box content, with the box_index set_textbox_text (media-forms pack) takes; file-mode only. Open documents read live, same shape. Equations read via list_elements type='equations'. Read-only. Orientation: get_document_view.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| live | No | auto: file or live; force: live; off: refuse | auto |
| start | No | ||
| textbox | No | ||
| contains | No | ||
| file_path | Yes | ||
| include_textboxes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses rich behavioral details: slicing semantics with 0-based end-exclusive indices, contains filtering, include_textboxes behavior, textbox-only mode with box_index expectations, file-mode restrictions, and live-document behavior. This substantially exceeds what annotations provide.
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 dense and information-rich, with the primary return shape front-loaded. Some clauses are terse to the point of requiring careful parsing, but every sentence contributes meaningful guidance with no filler.
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 the output schema exists and the complexity of the tool, the description covers the return shape, parameter semantics, mode differences, textbox special cases, and sibling routing. An agent has enough context to invoke the tool correctly in both file and live scenarios.
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 only 14%, so the description carries the parameter-documentation burden. It explains start/end indexing, end-exclusive slicing, contains filters, include_textboxes vs textbox modes, and live/file behavior. This compensates well for the sparse schema descriptions.
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 opens with a specific verb and resource: 'Read body paragraphs as [{index, text, style, ...}] with effective styles.' It clearly distinguishes itself from siblings by noting that equations are handled by list_elements and orientation by get_document_view, so the tool's scope is unambiguous.
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 clear context for when to use this tool and routes alternatives: equations go through list_elements, and orientation goes through get_document_view. It also explains mode-specific behavior for live vs file documents, though it does not enumerate all sibling exclusions explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowsGet WorkflowsARead-only
Recommended tool sequences for common multi-step tasks, with a one-line why per step. Call with no task to list the available tasks ('process-feedback', 'prepare-submission', 'format-citations', 'build-from-template', 'heavy-editing', 'live-editing', 'comment-partner', 'migrate-from-v1', 'bulk-edit'); call with task='' for that task's step-by-step sequence and notes. Pure guidance: reads nothing, changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds 'Pure guidance: reads nothing, changes nothing', making the safety profile explicit. It also discloses that calling without arguments lists tasks versus returning sequences, which is genuinely useful behavioral context.
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?
Every sentence earns its place: definition, usage modes, task list, and safety note. The task-name list is long but necessary since no enum is provided in the schema. The structure is clear and front-loaded with the tool's core purpose.
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 description is complete for a simple guidance tool: it explains what it returns in both invocation modes, lists all available tasks, and clarifies the read-only nature. With an output schema present, no further return-format details are needed.
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?
Although schema description coverage is 0%, the description fully explains the optional 'task' parameter: its default behavior, how to pass a task name, and the complete list of accepted values. This fully compensates for the schema's lack of parameter descriptions.
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 ('get') and resource ('workflows' / recommended tool sequences) and explains exactly what the tool provides: step-by-step guidance with one-line reasons. It clearly distinguishes itself from the document-manipulation siblings by positioning itself as pure meta-guidance.
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 explicitly explains the two invocation modes: call with no task to list available tasks, or call with task='<name>' for a specific sequence. It also names all valid task values, leaving no ambiguity about how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_breakInsert BreakA
Insert a break after the located paragraph. type: page starts a new page; section_next / section_continuous / section_even / section_odd start a new SECTION (own headers, margins, numbering; see set_section_properties, academic pack). location picks the paragraph (omit for document end). Auto-backup: prev/anchor slots in .ks4w-backups (backup=False skips rotation only); atomic validated save. Refuses documents open in Word.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | page | |
| backup | No | ||
| location | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is partially known. The description adds substantial behavioral context beyond that: auto-backup to prev/anchor slots in .ks4w-backups, backup=False only skips rotation, atomic validated save, and refusal to operate on documents open in Word. This is exactly the kind of mutating-tool behavior an agent needs to know.
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?
Four dense sentences carry distinct, non-overlapping information: the core action, the type enumeration, the location semantics, and the safety/failure behavior. The definition is front-loaded with the verb+resource and contains no filler or repeated concepts.
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 4 parameters, 0% schema coverage, and an output schema present, the description covers all critical aspects: purpose, type semantics, location, backup behavior, atomic validated save, and the Word-lock refusal. The only minor undefined term is 'located paragraph,' but the description handles this by providing a default behavior (document end), making the tool sufficiently complete for correct 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 the description itself must explain the parameters. It fully describes type (page vs section_* and their formatting implications), location (picks the paragraph, omitted for document end), and backup (backup=False only skips rotation; auto-backup is default). file_path is implied by the required field and the document context. No parameter is left unexplained.
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 opens with a specific verb+resource pair: 'Insert a break after the located paragraph,' which clearly states the operation. It then enumerates the type variants (page vs section_*) and introduces the location concept, making the tool unmistakably distinct from sibling insert_paragraphs or delete_paragraphs. The name and title align with the described behavior.
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 clear directional context: it explains the effect of each type option, states that location can be omitted to target the document end, and warns that documents open in Word are refused. It does not explicitly name an alternative tool for inserting normal paragraphs, so it lacks an explicit when-not statement, but the usage context is otherwise unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_listInsert ListA
Insert a bulleted or numbered list with real bullet/number glyphs (numbering.xml as needed). items: strings or {text, level} dicts (level 0-8 nests); kind: bullet | number. A call makes its own list, so numbering restarts at 1; continue_from (a num_id from list_elements) carries on an existing one and start_at restarts the new one at N. levels sets per-level formats: [{level, format, text, start, suffix, align, indent_pt, hanging_pt, font}], format one of decimal | lowerLetter | upperLetter | lowerRoman | upperRoman | bullet | none, text a label like '%1.%2.'. location picks the insertion point (omit for document end). Auto-backup to .ks4w-backups; atomic validated save. Refuses documents open in Word.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | bullet | |
| items | Yes | ||
| backup | No | ||
| levels | No | ||
| location | No | ||
| start_at | No | ||
| file_path | Yes | ||
| continue_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behaviors: each call creates its own list and restarts numbering, it auto-creates .ks4w-backups, saves are atomic and validated, and it refuses documents open in Word. This gives the agent what it needs to anticipate side effects and failure conditions.
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?
Although dense, every sentence earns its place: main action first, then parameter semantics, then behavioral caveats. No filler or repetition; the compact notation packs a lot of necessary information.
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?
For a tool with 8 parameters and no schema descriptions, the description is nearly complete. It explains all nontrivial parameters and behaviors, and an output schema exists, so return values need not be described. The only small gaps are the exact shape of the location object and whether the backup parameter disables the auto-backup behavior.
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?
With zero schema description coverage, the description carries the full burden and succeeds. It explains the items shape ('strings or {text, level} dicts'), the kind enum, the levels array format with all per-level fields and allowed format values, and the continue_from/start_at/location semantics. Only file_path and backup rely on name/default inference, which is acceptable.
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 opens with a precise verb and resource: 'Insert a bulleted or numbered list with real bullet/number glyphs.' This clearly distinguishes it from sibling insertion tools like insert_paragraphs or create_table, and the supporting detail about numbering.xml reinforces the specific function.
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 clear usage context: it tells the agent when to use the tool (inserting bulleted/numbered lists), how to continue existing numbering via continue_from from list_elements, and how to set start_at and location. It stops short of explicitly naming alternatives or exclusion cases, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_paragraphsInsert ParagraphsA
Insert paragraphs (items {text, style?, formatting?, heading_level?, paragraph_format?}) at a location object (omitted = document end). heading_level 1-9 makes it a heading (1 = outline 0). paragraph_format takes set_paragraph_format keys; it and inherit_format/copy_format_from (clone neighbor formatting minus outline level) are file mode only. track records insertions by author. Auto-backup; atomic save. Open documents edit live; a stale text-selector target refuses: save in Word, retry. Batches: apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| track | No | ||
| author | No | Claude | |
| backup | No | ||
| location | No | ||
| file_path | Yes | ||
| paragraphs | Yes | ||
| inherit_format | No | ||
| copy_format_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (only flags), so the description carries the behavioral burden. It discloses auto-backup, atomic save, live editing behavior, stale target refusal with remediation, and track/author recording. This goes well beyond annotations and gives an agent concrete expectations about side effects and failure modes.
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 dense but efficient, using semicolons to pack multiple facts. It leads with the core action and item structure, then layers on constraints and behaviors. It's not overly verbose, though the density might require careful reading.
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?
For a complex tool with 9 parameters and low schema coverage, the description covers most essential aspects: location, paragraph structure, heading behavior, formatting options, track/author, backup, live editing, and batch alternative. Minor ambiguities remain (e.g., exact meaning of 'stale text-selector target'), but overall it provides enough to call the tool correctly.
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 only 11%, so the description must compensate. It explains the structure of paragraphs items (text, style, formatting, heading_level, paragraph_format), semantics of heading_level (1-9, 1=outline 0), paragraph_format keys, inherit_format/copy_format_from behavior, track and author, and location default. Nearly all parameters are meaningfully described, far exceeding schema coverage.
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 clearly states the tool inserts paragraphs, and describes the item structure and location parameter. It doesn't explicitly differentiate from sibling insert tools (e.g., insert_list, insert_break), but the purpose is unambiguous given the resource (paragraphs) and action (insert).
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?
It provides clear context: location omitted means document end, file-mode-only constraints for certain features, and it explicitly points to apply_edits for batch operations. It doesn't name sibling insert tools as alternatives, but the batch guidance and live-editing caveats give practical when-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_elementsList ElementsARead-only
Enumerate any collection in one call. type: tables | images | charts | equations | bookmarks | sources | sections | section_blocks | footnotes | endnotes | fields | reference_fields | form_fields | content_controls | template_placeholders | index_entries | lists | toc. Returns {type, count, items}; the ids or indices returned are the handles the matching set_/delete_/manage_ tools take (list then act). Highlights per type: tables reports dimensions and the table_index other table tools take; images reports display size and the media target; charts reports series; equations reads math content; bookmarks excludes internal TOC bookmarks; fields covers complex and simple fields with cached results; reference_fields inventories Zotero, EndNote, and Mendeley fields and flags broken pairs; form_fields and content_controls cover legacy fields and SDTs; template_placeholders lists {{name}} and MERGEFIELD keys for fill_template and mail_merge (assembly pack); lists groups list paragraphs by numbering instance; toc returns TOC-family fields with cached entries (refresh via com_refresh_fields, com-live pack, then re-read). filter={"range": {start, end}, "name": "substring"} applies where meaningful; inapplicable filters refuse loudly. Read-only, file mode; close documents open in Word first. Tools for these elements live in packs; enable_tools lists them. To locate a string, find_text.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| filter | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description aligns with them while adding substantial behavior: return shape {type, count, items}, handle semantics for later tools, per-type highlights, filter behavior including loud rejection, cached results, and refresh guidance. No contradiction exists.
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 long but structured and front-loaded with purpose and return shape. Per-type details add real value rather than padding, though a few could be condensed. For a multi-collection tool with 15+ types, the length is justified.
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 the tool's complexity and the absence of schema descriptions, the description covers purpose, accepted types, return value, parameter semantics, prerequisites, error behavior, and related tools. The output schema exists, and the description still clarifies the return envelope. Nothing critical 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 coverage is 0%, so the description carries the burden. It fully enumerates type values and documents the filter object's range and name substring shape. file_path is left implicit, but 'file mode' and the requirement to close Word documents provide enough context for a conventional file-path parameter.
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 precise action ('Enumerate any collection in one call') and identifies the resource with an exhaustive set of element types. It clearly distinguishes itself from sibling tools like find_text and get_table by framing list_elements as the read-only enumeration step before set_/delete_/manage_ actions.
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 strong context: read-only, file mode, close open documents first, and list-then-act workflow. It explicitly routes string search to find_text and points to enable_tools for element-specific packs, but it does not systematically enumerate when-not-to-use cases for every sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_backupsManage BackupsADestructive
Manage the automatic backups under the hidden .ks4w-backups/ folder next to each mutated document: two stable slots per document, prev (state before the most recent mutation) and anchor (session start). action='list': slot files with sizes and mtimes, legacy .bak- files, and orphaned slot folders whose source document is gone; give file_path for one document or directory for a folder. action='restore': overwrite file_path with a backup; source is 'prev', 'anchor', or a legacy .bak- path. The current content rotates into prev FIRST, so a restore is itself undoable; the payload is validated before the atomic replace, and documents open in Word are refused. action='purge': delete backups; scope: 'legacy', 'orphans', or 'slots'. dry_run defaults to TRUE (report only); dry_run=False deletes. Exact paths and sizes are reported either way. action='snapshot': save a DTG-stamped permanent copy of file_path, YYYYMMDD_HHMM_.docx (an existing leading DTG is replaced, not stacked), optional short label suffix, optional dest_dir. Snapshots are permanent keepers: the slots rotate on every mutation, snapshots are never auto-pruned and no purge scope touches them. Never overwrites (collisions get a numeric suffix); the source document is not modified.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| scope | No | ||
| action | Yes | ||
| source | No | ||
| dry_run | No | ||
| dest_dir | No | ||
| directory | No | ||
| file_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that restore rotates current content into prev first, making restores undoable, and that purge deletes only when dry_run=False. It also explains snapshot permanence, collision behavior, atomic replacement, and Word-open refusal, which gives the agent a strong safety model.
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 dense but every sentence adds necessary behavioral or parameter information. It front-loads the location and slot model, then organizes actions in a logical progression, making a complex multi-action tool easy to scan.
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 the tool's four distinct actions, 8 parameters, and destructive potential, the description covers the full decision space: what each action does, which parameters apply, safety guards, naming behavior, and what gets reported. The existence of an output schema means return-value details are not needed, and no critical gap remains.
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?
With 0% schema description coverage, the description carries the full burden and succeeds: it explains action values, source choices, purge scopes, dry_run semantics, dest_dir, label, file_path, and directory. An agent can correctly choose values without opening any external documentation.
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 names a specific resource (hidden .ks4w-backups/ folders) and a clear set of actions (list, restore, purge, snapshot), so the agent knows exactly what the tool operates on. It is immediately distinguishable from the document-editing sibling tools and from backup operations that might mutate documents directly.
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?
Each action is given a concrete purpose: list reports, restore overwrites, purge deletes, snapshot preserves. It also notes the dry_run default and the refusal of documents open in Word, which helps avoid misuse. It doesn't explicitly name what not to use this tool for, but no sibling tool overlaps with backup management, so the lack of an explicit exclusion is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_and_replaceSearch and ReplaceADestructive
Batch find/replace, safe across Word's fragmented runs. Each item: {find, replace, regex?}; scope: body | footnotes | headers | all. preview=true dry-runs the same engine without touching the file: per-item counts, each match with paragraph index and before/after context, the grand total, and the refusals a real run would hit; review, then rerun with max_replacements set to the previewed total so drift aborts instead of over-replacing. find_formatting={bold, italic, font, size_pt, color, highlight, style, ...} restricts replacement to text carrying that effective formatting (file mode only, no regex; an item without find replaces each entire matching stretch, and the replacement keeps the matched formatting). max_replacements aborts, changing nothing, when total matches would exceed it. track records each replacement as a tracked change by author. Sibling: set_paragraph_text rewrites one whole paragraph when a find string would be unwieldy. Live edits appear immediately as one Ctrl+Z step, unsaved until the user saves; the live result adds live:true and skip counters, and literal finds beyond Word's ~255-char limit are handled automatically. Auto-backup in file mode (backup=False skips rotation); atomic validated save. Documents open in Word edit live, serialized; tracked replaces never re-match their own markup. For anchor-scoped edits, use apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| scope | No | body | |
| track | No | ||
| author | No | Claude | |
| backup | No | ||
| preview | No | ||
| file_path | Yes | ||
| replacements | Yes | ||
| find_formatting | No | ||
| max_replacements | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and destructiveHint=true, but the description discloses substantial behavioral detail: preview mode performs a dry-run 'without touching the file'; max_replacements 'aborts, changing nothing'; tracked changes record by author; auto-backup and atomic save are described; 'Live edits appear immediately as one Ctrl+Z step, unsaved until the user saves.' It also notes that 'tracked replaces never re-match their own markup.' This far exceeds what annotations provide, making the tool's side effects and safety behavior fully transparent.
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 dense but not bloated. It starts with purpose, then systematically covers item structure, scope, preview, formatting, max_replacements, tracking, sibling alternatives, live editing, and backup. Each sentence adds a distinct piece of essential information for a complex tool. While it is longer than typical tool descriptions, the complexity justifies the length; no sentence is filler. It is front-loaded with core purpose before diving into details, so a slight deduction for verbosity, but structure is logical and efficient.
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 the tool's complexity (10 parameters, nested objects, output schema), the description covers all critical aspects: input semantics, safety workflow, error abort conditions, tracking, backup, live editing, and alternatives. It also explains the output behavior via preview counts and match contexts, which complements the existence of an output schema. No essential information for correct invocation is missing. The description is remarkably complete for a tool of this sophistication.
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?
With schema description coverage at only 10%, the description must carry the weight, and it does. It explains the replacements array structure ('{find, replace, regex?}; scope: body | footnotes | headers | all'), preview behavior and return values, max_replacements semantics ('aborts, changing nothing'), find_formatting restrictions and its mode compatibility, track and author usage, and backup=True default with 'backup=False skips rotation.' Even the live parameter is inferred through 'Live edits appear immediately as one Ctrl+Z step' and 'live:true' output references. The description effectively documents every parameter beyond what the sparse schema provides.
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 leads with 'Batch find/replace, safe across Word's fragmented runs,' a specific verb+resource pairing that immediately establishes the tool's core function. It then details the item structure and scope options, and explicitly distinguishes itself from the sibling set_paragraph_text by saying it rewrites whole paragraphs when a find string is unwieldy. This gives an agent a precise and unambiguous understanding of what the tool does and how it differs from related tools.
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 explicit alternatives and conditions: 'Sibling: set_paragraph_text rewrites one whole paragraph when a find string would be unwieldy' and 'For anchor-scoped edits, use apply_edits.' It also recommends a safe workflow: 'preview=true dry-runs... review, then rerun with max_replacements set to the previewed total.' This goes beyond vague context and tells the agent exactly when to use this tool versus alternatives, and how to use it responsibly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cellsSet CellsADestructiveIdempotent
Write many table cells in one call. Modes: edits=[{row, cell, text}] for scattered cells, or block={origin:{row, cell}, values:[[...]]} for a 2D block. nested={row, cell, index} targets a nested table in that host cell (edits mode only). track records changes by author. Cell TEXT only: shading, bold and alignment are format_cells, widths and repeat-header set_table_properties (media-forms). Live (plain edits only) refuses vertical merges; file mode is merge-aware. Auto-backup; atomic save. Batches: apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| block | No | ||
| edits | No | ||
| track | No | ||
| author | No | Claude | |
| backup | No | ||
| nested | No | ||
| file_path | Yes | ||
| table_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds valuable context: 'Auto-backup; atomic save' reveals persistence guarantees, 'track records changes by author' indicates change-logging behavior, and 'Cell TEXT only' declares a hard constraint. It also explains live vs. file merge behavior. These insights go beyond the annotations and help the agent anticipate side effects. Not quite a 5 because it doesn't fully detail failure modes or what happens on validation errors, but it is strong.
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 dense but compact. It packs multiple distinct facts into a few sentences using semicolons and parentheticals, front-loading the core purpose. There is minimal fluff and every sentence adds information. It is slightly overloaded with mode syntax inline (e.g., 'block={origin:{row, cell}, values:[[...]]}') but remains readable. A 4 because it could be broken into clearer bullets for extreme readability, yet it is far from verbose.
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?
For a tool with 9 parameters and low schema coverage, the description covers the essential context: modes, required parameters implied by examples, alternatives, limitations, live/file semantics, backup and atomicity, and batching. An output schema exists, so return values need no explanation. The agent has virtually everything needed to call it correctly, including edge cases like vertical merge refusal. This is a model description for a complex tool.
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 only 11%, so the description must compensate. It does: it explains the structure of 'edits' as [{row, cell, text}], 'block' as {origin, values}, and 'nested' as {row, cell, index}. It also clarifies that 'track' records changes by author and that 'live' has mode semantics. This provides meaning beyond the bare type definitions, though it doesn't exhaustively document every field in the array/object parameters (some nuance remains in the schema).
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 opens with a specific verb and resource: 'Write many table cells in one call.' It clearly distinguishes this from sibling tools by explicitly stating what it does NOT do (formatting via format_cells, properties via set_table_properties) and naming the batch alternative (apply_edits). An agent immediately knows the scope and how it differs from other cell/table tools.
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 concrete when-to-use and when-not-to-use guidance: it names format_cells for shading/bold/alignment, set_table_properties for widths and repeat-header, and apply_edits for batches. It also clarifies mode-specific behavior (live refuses vertical merges; file mode is merge-aware), so the agent knows which mode to choose based on the need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paragraph_formatSet Paragraph FormatADestructiveIdempotent
Set paragraph formatting on a batch: indices (0-based list) OR start/end (inclusive range), exactly one form. Keys: alignment, space_before_pt, space_after_pt, line_spacing, indent_left_pt, indent_right_pt, first_line_indent_pt, keep_with_next, outline_level. outline_level (0-8; null removes) never changes the look; it is off by one from heading_level 1-9. Auto-backup; atomic validated save. Open documents edited live (serialized; shading/borders/tab_stops refused live). For batches, use apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| live | No | auto: file or live; force: live; off: refuse | auto |
| start | No | ||
| backup | No | ||
| indices | No | ||
| file_path | Yes | ||
| formatting | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry idempotentHint and destructiveHint, so the description earns credit for adding context: auto-backup, atomic validated save, serialized live editing, and refused features in live mode. The outline_level 'never changes the look' note is a non-obvious behavioral disclosure that materially prevents mis-calls.
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 purpose and selection forms, then keys, then caveats, then routing. The keys list is long but necessary because the formatting schema is an open additionalProperties object. The live-mode sentence is slightly jumbled with parentheticals, but every sentence earns its place.
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?
Covers the main gotchas for a destructive mutation tool: backup, atomicity, live-mode restrictions, and the outline_level trap. Output schema exists, so return-value details need not be described. Minor gap: error/failure behavior beyond 'validated save' is not discussed, but the description is strong overall for a 7-parameter tool with minimal schema coverage.
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 only 14% (only 'live' is described), so the description must compensate. It adds the mutually-exclusive indices/start-end selection semantics, the formatting object's key list, and critical value semantics for outline_level (0-8, null removes, off-by-one from heading_level). It does not detail value types for each key, but the key list plus the open formatting schema makes this solid.
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 paragraph formatting on a batch') and scopes the operation precisely with the selection forms (indices vs start/end) and the formatting keys. It also names apply_edits as the sibling it is not, making the differentiation 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?
Gives explicit routing guidance ('For batches, use apply_edits'), the 'exactly one form' constraint, and the live-mode conditions with what is refused ('shading/borders/tab_stops refused live'). It does not contrast with format_text or apply_style, but the core when/when-not guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paragraph_textSet Paragraph TextADestructiveIdempotent
Replace one paragraph's full text, keeping style and base formatting; address it with a location object ({paragraph: N}, {search: ...}, {outline: ...}). Indices shift after edits, so pass expect (a substring the target must contain) to refuse instead of hitting the wrong paragraph; verify the returned replaced_text. Auto-backup in file mode (backup=False skips rotation); atomic validated save. Edits go live on open documents (serialized); tracked-revision paragraphs refuse live. For batches, use apply_edits.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | auto: file or live; force: live; off: refuse | auto |
| backup | No | ||
| expect | No | ||
| location | Yes | ||
| new_text | Yes | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint and idempotentHint annotations, the description discloses meaningful behavior: index shifting after edits, the expect guard to avoid wrong-paragraph hits, auto-backup behavior, atomic validated saves, and serialized live edits on open documents. No contradiction with annotations was found.
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 dense but every sentence earns its place: main operation, addressing strategy, safety guard, backup behavior, live-editing caveat, and batch alternative. It is front-loaded with the core action and avoids filler.
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 the tool's complexity, the description covers the essential operational concerns: how to locate the paragraph, how to avoid index-shift mistakes, what to verify, backup semantics, live behavior, and tracked-revision refusal. With an output schema present, return-value details need not be duplicated here.
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?
With schema description coverage at only 17%, the description compensates strongly: it defines the location object forms ({paragraph: N}, {search: ...}, {outline: ...}), explains expect as a safety substring, and clarifies backup=False skips rotation. This adds real meaning beyond the bare schema.
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 opens with a specific verb and resource: "Replace one paragraph's full text." It further clarifies scope by noting that style and base formatting are preserved, which distinguishes it from formatting-focused siblings like set_paragraph_format and batch-oriented apply_edits.
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 explicitly names the alternative for batches: "For batches, use apply_edits." It also gives practical usage context: how to address the paragraph via location objects and when live edits are refused on tracked-revision paragraphs.
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.
12 tool updates
v2.2.1- Changed
apply_edits2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
delete_paragraphs2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
find_text2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
format_text2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
get_document_info2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
get_outline2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
get_text2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
insert_paragraphs2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
search_and_replace2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
set_cells2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
set_paragraph_format2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
- Changed
set_paragraph_text2 fields changed- added
Input schema / properties / live / descriptionAdded value: +"auto: file or live; force: live; off: refuse" - added
Input schema / properties / live / enumAdded value: +[ + "auto", + "force", + "off" +]
2 tool updates
v2.0.3- Added
get_server_info - Changed
insert_list3 fields changed- added
Input schema / properties / continue_fromAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / levelsAdded value: +{ + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / start_atAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +}
1 tool update
v2.0.1- Changed
delete_paragraphs2 fields changed- added
Input schema / properties / expect_endAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / expect_startAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
192 tool updates
v2.0.0- Removed
accept_revisions - Removed
add_bookmark - Removed
add_caption - Removed
add_chart - Removed
add_comment - Removed
add_cross_reference - Removed
add_endnote - Removed
add_equation - Removed
add_footnote - Removed
add_heading - Removed
add_hyperlink - Removed
add_image - Removed
add_list - Removed
add_page_break - Removed
add_page_numbers - Removed
add_section_break - Removed
add_source - Removed
add_watermark - Removed
anonymize_for_review - Removed
apply_character_style - Added
apply_edits - Removed
apply_manuscript_format - Changed
apply_style4 fields changed- removed
Input schema / properties / indicesRemoved value: -{ - "items": { - "type": "integer" - }, - "type": "array" -} - added
Input schema / properties / rangeAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / targetAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / requiredPrevious value: -[ - "file_path", - "indices", - "style" -]New value: +[ + "file_path", + "style" +]
- Removed
apply_table_style - Removed
apply_template - Removed
assemble_front_matter - Removed
audit_accessibility - Removed
batch_apply - Removed
change_case - Removed
change_heading_level - Removed
check_brand_compliance - Removed
check_citation_parity - Removed
check_defined_terms - Removed
check_image_resolution - Removed
check_reference_field_integrity - Removed
check_template_compliance - Removed
cleanup_orphan_notes - Removed
com_close_open_document - Removed
com_combine_documents - Removed
com_compare_documents - Removed
com_export_pdf - Removed
com_import_pdf - Removed
com_merge_documents - Removed
com_proofing_errors - Removed
com_readability_statistics - Removed
com_refresh_fields - Removed
com_save_open_document - Removed
com_save_with_password - Removed
com_validate_opens_clean - Removed
com_word_status - Removed
comment_report - Removed
comment_report_multi - Removed
convert_citation_style - Removed
convert_notes - Removed
copy_table - Removed
create_snapshot - Changed
create_table4 fields changed- removed
Input schema / properties / after_anchorRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Input schema / properties / after_indexRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Input schema / properties / at_endRemoved value: -{ - "default": false, - "type": "boolean" -} - added
Input schema / properties / locationAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Removed
deanonymize_document - Removed
define_style - Removed
delete_columns - Removed
delete_comment - Added
delete_element - Removed
delete_endnote - Removed
delete_equation - Removed
delete_footnote - Changed
delete_paragraphs5 fields changed- added
Input schema / properties / rangeAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / start / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - added
Input schema / properties / start / defaultAdded value: +null - removed
Input schema / properties / start / typeRemoved value: -"integer" - changed
Input schema / requiredPrevious value: -[ - "file_path", - "start" -]New value: +[ + "file_path" +]
- Removed
delete_rows - Removed
delete_source - Removed
delete_toc - Removed
detect_citation_system - Added
disable_tools - Removed
edit_endnote - Removed
edit_footnote - Added
enable_tools - Removed
export_table - Removed
extract_images - Removed
fill_form_fields - Removed
fill_template - Removed
find_formatted - Changed
find_text6 fields changed- added
Input schema / properties / formattingAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / query / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / query / defaultAdded value: +null - removed
Input schema / properties / query / typeRemoved value: -"string" - added
Input schema / properties / scopeAdded value: +{ + "default": "body", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "file_path", - "query" -]New value: +[ + "file_path" +]
- Removed
fix_accessibility - Removed
format_cells - Changed
format_text11 fields changed- added
Input schema / properties / caseAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / formatting / additionalPropertiesRemoved value: -true - added
Input schema / properties / formatting / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / formatting / defaultAdded value: +null - removed
Input schema / properties / formatting / typeRemoved value: -"object" - added
Input schema / properties / occurrence / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / occurrence / defaultPrevious value: -1New value: +null - removed
Input schema / properties / occurrence / typeRemoved value: -"integer" - removed
Input schema / properties / paragraph_indexRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - added
Input schema / properties / rangeAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / requiredPrevious value: -[ - "file_path", - "formatting" -]New value: +[ + "file_path" +]
- Removed
get_comments - Added
get_document_view - Removed
get_headers_footers - Removed
get_lists - Removed
get_nested_table - Changed
get_outline1 field changed- added
Input schema / properties / detect_formattedAdded value: +{ + "default": false, + "type": "boolean" +}
- Removed
get_paragraph_format - Removed
get_protection - Removed
get_styles - Changed
get_table1 field changed- added
Input schema / properties / nestedAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
get_text1 field changed- added
Input schema / properties / textboxAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Removed
get_textbox_text - Removed
get_tracked_changes - Removed
import_table - Removed
insert_bibliography - Added
insert_break - Removed
insert_caption_list - Removed
insert_citation - Removed
insert_columns - Removed
insert_content_control - Removed
insert_document - Removed
insert_field - Removed
insert_glossary - Removed
insert_index - Added
insert_list - Changed
insert_paragraphs5 fields changed- removed
Input schema / properties / after_anchorRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Input schema / properties / after_indexRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Input schema / properties / at_endRemoved value: -{ - "default": false, - "type": "boolean" -} - removed
Input schema / properties / before_indexRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -} - added
Input schema / properties / locationAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +}
- Removed
insert_rows - Removed
insert_toc - Removed
insert_zotero_citation - Removed
list_bookmarks - Removed
list_charts - Removed
list_content_controls - Added
list_elements - Removed
list_endnotes - Removed
list_equations - Removed
list_fields - Removed
list_footnotes - Removed
list_form_fields - Removed
list_images - Removed
list_index_entries - Removed
list_reference_fields - Removed
list_section_blocks - Removed
list_sections - Removed
list_sources - Removed
list_tables - Removed
list_template_placeholders - Removed
live_insert_at_cursor - Removed
live_scroll_to - Removed
live_set_track_changes - Removed
mail_merge - Changed
manage_backups2 fields changed- added
Input schema / properties / dest_dirAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / labelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Removed
mark_index_entry - Removed
merge_cells - Removed
move_section - Removed
parse_references - Removed
prepare_for_submission - Removed
preview_replace - Removed
read_toc - Removed
redact_text - Removed
reject_revisions - Removed
remove_document_protection - Removed
remove_watermark - Removed
replace_formatted - Removed
replace_image - Removed
replace_paragraph_text - Removed
reply_to_comment - Removed
resize_image - Removed
resolve_comment - Removed
revision_analytics - Removed
revision_summary - Changed
search_and_replace2 fields changed- added
Input schema / properties / find_formattingAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / previewAdded value: +{ + "default": false, + "type": "boolean" +}
- Removed
search_zotero_library - Removed
set_bibliography_style - Changed
set_cells7 fields changed- added
Input schema / properties / blockAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / edits / anyOfAdded value: +[ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / edits / defaultAdded value: +null - removed
Input schema / properties / edits / itemsRemoved value: -{ - "additionalProperties": true, - "type": "object" -} - removed
Input schema / properties / edits / typeRemoved value: -"array" - added
Input schema / properties / nestedAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / requiredPrevious value: -[ - "file_path", - "table_index", - "edits" -]New value: +[ + "file_path", + "table_index" +]
- Removed
set_cells_block - Removed
set_column_widths - Removed
set_columns - Removed
set_content_control_value - Removed
set_document_properties - Removed
set_document_protection - Removed
set_footer - Removed
set_header - Removed
set_header_row_repeat - Removed
set_image_alt_text - Removed
set_line_numbering - Removed
set_nested_cells - Removed
set_page_number_format - Changed
set_paragraph_format11 fields changed- added
Input schema / properties / endAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / formatting / additionalPropertiesRemoved value: -true - added
Input schema / properties / formatting / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / formatting / defaultAdded value: +null - removed
Input schema / properties / formatting / typeRemoved value: -"object" - added
Input schema / properties / indices / anyOfAdded value: +[ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / indices / defaultAdded value: +null - removed
Input schema / properties / indices / itemsRemoved value: -{ - "type": "integer" -} - removed
Input schema / properties / indices / typeRemoved value: -"array" - added
Input schema / properties / startAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Input schema / requiredPrevious value: -[ - "file_path", - "indices", - "formatting" -]New value: +[ + "file_path" +]
- Added
set_paragraph_text - Removed
set_section_properties - Removed
set_textbox_text - Removed
set_update_fields_flag - Removed
setup_chapter_headers - Removed
sort_table - Removed
split_document - Removed
split_table - Removed
structured_diff - Removed
unmerge_cells - Removed
update_chart_data - Removed
validate_captions - Removed
validate_chapter_headers - Removed
validate_cross_references - Removed
validate_document - Removed
validate_form_completeness - Removed
validate_notes - Removed
verify_redaction - Removed
word_count - Removed
word_count_with_exclusions - Removed
word_live_repair
84 tool updates
v1.6.1- Added
add_chart - Added
add_equation - Added
anonymize_for_review - Added
apply_manuscript_format - Added
assemble_front_matter - Added
audit_accessibility - Added
batch_apply - Added
change_heading_level - Added
check_brand_compliance - Added
check_defined_terms - Added
check_image_resolution - Added
check_reference_field_integrity - Added
check_template_compliance - Added
com_import_pdf - Added
comment_report - Added
comment_report_multi - Added
convert_citation_style - Changed
copy_document1 field changed- added
Input schema / properties / overwriteAdded value: +{ + "default": false, + "type": "boolean" +}
- Added
copy_table - Added
create_snapshot - Added
deanonymize_document - Added
delete_equation - Changed
delete_paragraphs1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Added
detect_citation_system - Added
diagnose_document - Added
export_table - Added
extract_images - Added
fill_form_fields - Added
fill_template - Added
find_formatted - Changed
find_text5 fields changed- added
Input schema / properties / include_textboxesAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +} - added
Output schema / properties / result / anyOfAdded value: +[ + { + "items": {}, + "type": "array" + }, + { + "additionalProperties": true, + "type": "object" + } +] - removed
Output schema / properties / result / itemsRemoved value: -{} - removed
Output schema / properties / result / typeRemoved value: -"array"
- Added
fix_accessibility - Changed
format_text1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Changed
get_comments1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Changed
get_document_info1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Changed
get_outline4 fields changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +} - added
Output schema / properties / result / anyOfAdded value: +[ + { + "items": {}, + "type": "array" + }, + { + "additionalProperties": true, + "type": "object" + } +] - removed
Output schema / properties / result / itemsRemoved value: -{} - removed
Output schema / properties / result / typeRemoved value: -"array"
- Added
get_paragraph_format - Changed
get_text5 fields changed- added
Input schema / properties / include_textboxesAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +} - added
Output schema / properties / result / anyOfAdded value: +[ + { + "items": {}, + "type": "array" + }, + { + "additionalProperties": true, + "type": "object" + } +] - removed
Output schema / properties / result / itemsRemoved value: -{} - removed
Output schema / properties / result / typeRemoved value: -"array"
- Added
get_textbox_text - Added
get_workflows - Added
import_table - Added
insert_content_control - Added
insert_document - Added
insert_field - Added
insert_glossary - Changed
insert_paragraphs3 fields changed- added
Input schema / properties / copy_format_fromAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / inherit_formatAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Added
insert_zotero_citation - Added
list_charts - Added
list_content_controls - Added
list_equations - Added
list_fields - Added
list_form_fields - Added
list_reference_fields - Added
list_template_placeholders - Added
live_insert_at_cursor - Added
live_scroll_to - Added
live_set_track_changes - Added
mail_merge - Added
manage_backups - Added
parse_references - Added
prepare_for_submission - Added
preview_replace - Added
redact_text - Added
replace_formatted - Changed
replace_paragraph_text2 fields changed- added
Input schema / properties / expectAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Added
revision_analytics - Changed
search_and_replace1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Added
search_zotero_library - Changed
set_cells1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Added
set_content_control_value - Changed
set_paragraph_format1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Added
set_textbox_text - Added
setup_chapter_headers - Added
split_document - Added
structured_diff - Added
update_chart_data - Added
validate_captions - Added
validate_chapter_headers - Added
validate_cross_references - Added
validate_form_completeness - Added
verify_redaction - Changed
word_count1 field changed- added
Input schema / properties / liveAdded value: +{ + "default": "auto", + "type": "string" +}
- Added
word_count_with_exclusions - Added
word_live_repair
119 tool updates
v1.2.1- First observed
accept_revisions - First observed
add_bookmark - First observed
add_caption - First observed
add_comment - First observed
add_cross_reference - First observed
add_endnote - First observed
add_footnote - First observed
add_heading - First observed
add_hyperlink - First observed
add_image - First observed
add_list - First observed
add_page_break - First observed
add_page_numbers - First observed
add_section_break - First observed
add_source - First observed
add_watermark - First observed
apply_character_style - First observed
apply_style - First observed
apply_table_style - First observed
apply_template - First observed
change_case - First observed
check_citation_parity - First observed
cleanup_orphan_notes - First observed
com_close_open_document - First observed
com_combine_documents - First observed
com_compare_documents - First observed
com_export_pdf - First observed
com_merge_documents - First observed
com_proofing_errors - First observed
com_readability_statistics - First observed
com_refresh_fields - First observed
com_save_open_document - First observed
com_save_with_password - First observed
com_validate_opens_clean - First observed
com_word_status - First observed
convert_notes - First observed
copy_document - First observed
create_document - First observed
create_table - First observed
define_style - First observed
delete_columns - First observed
delete_comment - First observed
delete_endnote - First observed
delete_footnote - First observed
delete_paragraphs - First observed
delete_rows - First observed
delete_source - First observed
delete_table - First observed
delete_toc - First observed
edit_endnote - First observed
edit_footnote - First observed
find_text - First observed
format_cells - First observed
format_text - First observed
get_comments - First observed
get_document_info - First observed
get_headers_footers - First observed
get_lists - First observed
get_nested_table - First observed
get_outline - First observed
get_protection - First observed
get_styles - First observed
get_table - First observed
get_text - First observed
get_tracked_changes - First observed
insert_bibliography - First observed
insert_caption_list - First observed
insert_citation - First observed
insert_columns - First observed
insert_index - First observed
insert_paragraphs - First observed
insert_rows - First observed
insert_toc - First observed
list_bookmarks - First observed
list_endnotes - First observed
list_footnotes - First observed
list_images - First observed
list_index_entries - First observed
list_section_blocks - First observed
list_sections - First observed
list_sources - First observed
list_tables - First observed
mark_index_entry - First observed
merge_cells - First observed
move_section - First observed
read_toc - First observed
reject_revisions - First observed
remove_document_protection - First observed
remove_watermark - First observed
replace_image - First observed
replace_paragraph_text - First observed
reply_to_comment - First observed
resize_image - First observed
resolve_comment - First observed
revision_summary - First observed
search_and_replace - First observed
set_bibliography_style - First observed
set_cells - First observed
set_cells_block - First observed
set_column_widths - First observed
set_columns - First observed
set_document_properties - First observed
set_document_protection - First observed
set_footer - First observed
set_header - First observed
set_header_row_repeat - First observed
set_image_alt_text - First observed
set_line_numbering - First observed
set_nested_cells - First observed
set_page_number_format - First observed
set_paragraph_format - First observed
set_section_properties - First observed
set_update_fields_flag - First observed
sort_table - First observed
split_table - First observed
unmerge_cells - First observed
validate_document - First observed
validate_notes - First observed
word_count
TDQS
Scored across 29 tools
Most tools target a distinct resource and action, and the descriptions cross-reference siblings (e.g., 'For batches, use apply_edits') to reduce ambiguity. However, apply_edits intentionally overlaps with set_paragraph_text, format_text, set_paragraph_format, and set_cells, and copy_document overlaps with manage_backups snapshot, so one or two choices could still be confused.
All tool names follow a consistent snake_case verb_noun pattern (get_, set_, insert_, delete_, create_, list_, etc.), with only search_and_replace as a phrase rather than a simple verb_noun. The naming is predictable and uniform across the set.
At 29 tools the surface is large, but the domain is broad and several tools consolidate many operations (list_elements covers 17 element types, apply_edits covers 8 ops, manage_backups covers 4 actions). The count is slightly heavy but reasonable for a comprehensive Word manipulation server, especially with optional packs handled by enable_tools.
Core document lifecycle is well covered: create/copy/read/edit/delete for documents, paragraphs, tables, and many elements, plus backups and diagnosis. Minor gaps exist (e.g., no document delete/rename, no core-property editing, and advanced features like images, comments, and citations are only reachable after enabling packs), but they are workable and explicitly routed through enable_tools.
Maintenance
Related MCP Connectors
Create real Word .docx files from your AI chat: proposals, quotes, contracts, statements of work.
Create real Word .docx files from your AI chat: proposals, quotes, contracts, statements of work.
Real Word and Excel for agents: open your .docx/.xlsm, read, propose, apply, get it back intact.
Composable APIs for document extraction, image transformation, and document & sheet generation.
Related MCP Servers
- AlicenseCqualityFmaintenanceWord document reading and writing MCP implemented in Node.js797 npm11MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to edit Microsoft Word documents live while they are open, with full support for tracked changes, comments, formatting, and 124 tools.309 PyPI226MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to directly read, edit, and manipulate Word documents, supporting image and table operations, paragraph editing, and search/replace.202MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to create, edit, and extract data from Microsoft Word documents programmatically, supporting document creation, content editing, table manipulation, parameter extraction, and template generation.1MIT