Skip to main content
Glama

️ Kitchensink4Word

![Tests](https://github.com/nometalalchemist/Kitchensink4Word/actions/workflows/tests.yml/badge.svg PyPI License: PolyForm NC

Всё, вплоть до кухонной раковины, для MicrosofWord. Самый полный MCP-сервер для Word (.docx) из сущестующих: 119 инсрументов, созданных так, чоб не повреждать документы, и проесрованных на длинных, сложно оформленных реальных докуменах.

Исория появления: одном у ИИ-агену однажды понадобилось пяднадцать мину, чобы оредакировать двадцать ячеек аблцы в докумене Word, потому чо ни один сущесвующий Word MCP не умел удаляь колонку аблцы, массово редакировать ячейки, управляь сносками И всваляь оглавление. Поэому вмесо уснаовки трёх посредсвенных серверов эо был создан за один день — и еперь у ваших агенов такой проблмы не буде.

Почему именно эо (чесное сравнение)

Перед созданием эого сервера были изчены все публичные Word MCP-серверы (авгус 2026):

Возможнос

Kitchensink4Word

GongRzhe Office-Word (2.1k★, archived)

word-mcp-live (195★)

SecuriyRonin docx-mcp (43★)

Всавка/удаление колонок аблцы

✅ с учёом объединения

❌

❌

❌

Массовое редакирование ячеек (один вызо)

✅

❌

❌

❌

Объединение и разъединение ячеек

✅

только объединение

❌

❌

Сноски и концевые сноски: полный CRUD

✅ + преобразование

только добавление

❌

✅

Вс авка оглавления + обновление

✅

❌

❌

❌

Всроенные циаы и библограия

✅ 12 сілей

❌

❌

❌

Создание указаеля

✅

❌

❌

❌

ЗАПИСЪ отлеживаемых изменений

✅

❌

✅

✅

Приняие/оклонение по авору

✅

❌

часчно

✅

Сравнение и объединение докуменов

✅ нативно для Word

❌

❌

с ошибками

Водяные знаки / защиа / нумерация срок

✅

только защиа

❌

❌

Перемещение разделов / перенос шаблона

✅

❌

❌

❌

Аомарное сохранение + авомаическое резервирование

✅

❌

❌

❌

119 инсруменов оваываю: екс и фораирование, аблцы (включая вс авку/удаление колонок с учёом объединения и массовое редакирование ячеек одним вызом), сноски и концевые сноски (полный CRUD + преобразование сносок в концевые и обрано), оглавления и списки иллюсраций, верхние и нижние колон иулы/разделы, изображения, маркированные и нумерованные списки, вевящиеся комен арии, отлеживаемые изменения (ч ение, приняие/оклонение по авору, И запись изменений как отлеживаемых), а акже сравнение докуменов через Word-COM, обновление полей, экспор в PDF и проверку окрыия без ошибок в Windows.

Related MCP server: MCP Word Commander

Чо нового в v1.2 (2026-08-28)

  • Всроенные в Word циаы и библ иография: срукурированное хранилище исочников, поля CITATION с переключаелями сраниц и подавления, поле BIBLIOGRAPHY, 12 выбираемых сілей (APA, Chicago, MLA, IEEE, ...) — проверено по полному циклу: Word оображае пóля в выбранном сіле.

  • Указаель (записи XE с вложенносю и ссылками «см.» + поле INDEX) и списки иллюсраций (список аблц/рисунков).

  • Набор инсруменов для длинных докуменов: римские формаы номеров сраниц, нумерация срок, водяные знаки (совмесимо с командой Word «Удалить водяной знак»), многоколончные разделы, поле «Ср. X из Y».

  • Защиа докумена с совмесмым с Word SHA-512 хешированием пароля (побайово проверено на выходе самго Word); режим trackedChanges зас авляе получаелей ос авляь изменения отлеживаемыми.

  • Операции со срукурой: move_section (заголовок вмесе со всем разделом, включая аблцы), перенос шаблона (переоформление под эалонный докумен с переназнанием сілей по именам), пользоваельские сіли, сіли знаков, свойсва докумена, альернаивный екс изображений.

  • Дополнения для аблц: сроки gridBefore/ridAfter, именованные сіли аблц, сор ировка, разбиение, поворение сроки заголовка, ч ение/запись вложенных аблц, направление екс а в ячейке.

  • Редкие возможнос і фора ирования: капіель (small caps), скрыый екс, межсимвольный инервал, кернинг, указание языка для CJK, позиции абуляции с заполни елями, границы и заливка абзацев, конроль висячих срок, смена регисра.

  • Анализ: подсчё слов по разделам, проверка соовес вия ци а с андар у APA, ошибки проверки правописания и с аис ика удобочи аемос и Word, объединение глав, объединение изменений рецензен ов, сохранение с шифрованием паролем.

Чо делае его особенным

  • Операции с колонками аблц с учёом объединения. delee_columns / inser_columns корректно рабо аю с горизон ально и вер икально объединёнными ячейками (gridSpan сжимаеся, цепочки vMerge переус анавливаюся). На момен написания ни один другой публичный Word MCP э им не обладае.

  • API массовых операций. Редакирование 20 ячеек — э о ОДИН вызо se_cells с полезной нагрузкой, а не 20 отдельных обращений.

  • Запись о слеживаемых изменений. Переда rack=True, auhor="Jane" в инсрумены replace/inser/delee/cell создаё нас оящие ревизии Word, о орые получа ель може приня ь или о клони ь, — проверено в цикле на собс венном механизме ревизий сервера.

  • Сравнение докумен ов. com_compare_documens создаё на ивное для Word сравнение (redline) между двумя версиями докумен а.

  • Никог да не пор и докумен ы. А омарное сохранение (временный файл → проверка срукуры → замена), ав ома ическое резервное копирование с ме кой времени перед каждым изменением, побай ов о иден ичный проход всего, ч о не редакируеся (уравнения, екс овые блоки, елемен ы управ ления содержимым ос аюся не ронуыми), и поня ные с рого ипизированные ошибки — файл, окры ый в Word, о кло няе ся сообщением, а не зависанием.

  • Ус ойчив к фрагмен ированным run. Поиск/замена рабо аю на произвольно разби ых run в Word, сохраняя посимвольное фор а ирование, с защи ой о ReDoS по аймау у для пользова ельских регулярных выражений и опциональным огранич нием радиуса поражения через max_replacemens.

Ребования

  • Windows (инсрумен ы COM ребую усановленного Microsof Word; все ос альные инсрумен ы — э о чис ая рабо а с файлами и рабо аю без Word)

  • Pyhon 3.12+ (разрабо ано на 3.14)

Ус ановка

git clone https://github.com/nometalalchemist/KitchenSink4Word
cd KitchenSink4Word
python -m venv .venv
.venv\Scripts\pip install -e .

Зареги срируй е в Claude Code:

claude mcp add word -s user -- <absolute-path-to>\word-mcp\.venv\Scripts\word-mcp.exe

Модель безопаснос и

  • Каждый изменяющий инсрумен принимае file_path и перед первым изменением создаё рядом с ним файл <name>.bak-<imesamp>.docx (backup=False — пропус и ь).

  • Сохранения а омарны и проверены; при неудачной операции оригинал ос аё ся побай ов о иден ичен.

  • Удаление содержимого, которое несё ссылки на сноски, ав ома ически удаляе еперь осиро евшие определния; validae_documen / validae_noes сообщаю о целос нос и в обоих направлниях.

  • Удаление абзацев не допускае диапазоны, о орые разрезали бы поле (TOC, PAGEREF) пополам или молча прогло или разрыв раздела.

Тес ирование

344 ес а, рабо ающие везде: набор ес ов разраба ывался на закры ом корпусе реальных докумен ов (главы длиной в книгу, докумен , содержащий 171 сноску, рукопись со 126 о слеживаемыми изменениями и комен ариями рецензен ов), а CI ав ома ически генерируе срукурно эквивален ные син е ические замени ели (es/make_corpus.py), к ак ч о весь набор ес ов выполняется на любой машине — включая вашу и каждый pull reques. Локальные реальные докумен ы, если они ес ь, имею приори е . es/word_validar.py окрывае результаты в невидимом Word и падае при любом предупреждении о восс ановлении — оконч а ельная пров ерка на поврежение.

Исория разрабо ки: создан с помощью Claude Code за один день (2026-08-27), про ес ирован в ри раунда — модульные кон рольные очки на каждом э апе, сеанс граничных случаев (89 выз ов), два раунда в «безумном режиме» через сырой ранспор MCP sdio (нагрузочные испы ания масш абируемос и, па ологические опологии объединений, фаззинг Unicode/схем, ReDoS, жизненный цикл блокировки Word, пров ерки у ечек COM), а акже отдельная охо а за багами межфункционального взаимодейс вия. Все находки исправлены регрессионными ес ами. В research/ описаны алгори мы OOXML и подводные камни, на о орых пос роена реализация, с указанием аворс ва изученных э алонных реализаций под лицензией MI.

Извесные ограничения

  • Не живо о редакирования докумен ов, о кры ых в Word (чис ый о каз; инсрумен ы COM рабо аю с сохранёнными файлами).

  • Номера с раниц в оглавлении/списках иллюсраций ребую обновления полей: ав ома ически при следующем о кры ии в Word (updae_on_open), или немедленно через com_refresh_fields.

Лицензия

PolyForm Noncommercial 1.0.0 — беспла на для личного, академического, исследова ельского и любого другого некоммерческого использования. Для коммерческого использования ребуе ся о дельная лицензия до начала использования — о крой е issue, ч обы договори ься.

Available Tools

10 tools
word_appWord Application and Open DocumentsA
Destructive

Needs Microsoft Word itself: save or close a document open in Word, insert at the user's cursor, switch track changes on an open document, scroll Word to a spot, export to and import from PDF, compare, combine or merge documents, refresh fields, Word's proofing and readability statistics, the opens-clean check, and repair after a crashed live edit. Text edits to an open document go through word_edit and reads through word_read. Live edits stay unsaved until com_save_document; the other com_ ops work in a private hidden Word and never change the source file, except com_refresh_fields, which saves it in place. On a document open in Word, switch track changes on (live_set_track_changes) before editing, and save (com_save_document) last. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • com_save_document(opt save close password output_path): Save or close a document open in Word, or save an encrypted copy; close with save=false discards unsaved changes.

  • live_insert_at_cursor(text; opt newline): Insert text at the user's cursor position in the open document (main body text only; headers, footers, and footnotes not supported).

  • live_set_track_changes(enabled): Turn track changes on or off in the open document; the setting stays unsaved until com_save_document (set_track_changes for a closed file).

  • com_refresh_fields(): Update every field (TOC, page references, captions, cross-references) in a hidden Word; this saves the file in place. Header/footer PAGE and NUMPAGES keep their cached values; Word recomputes them at layout.

  • com_validate_opens_clean(opt timeout): Open the file in a hidden Word and report whether it opens clean, with Word's own error if it does not. More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - com_multi_document(action, files; opt output_path author section_break_between timeout): Compare two drafts into a redline, combine two reviewers' changes, or merge documents into one new file (action). - com_import_pdf(pdf_path; opt output_path): Convert a PDF to .docx via Word's built-in PDF reflow, in a dedicated invisible Word instance. - com_export_pdf(opt pdf_path overwrite): Export the document to PDF via an invisible Word instance with full fidelity (fields resolved, footnotes, TOC, headers/footers, images). - live_scroll_to(opt find paragraph_index): Scroll the user's Word window to show a location without selecting anything or moving their cursor (useful after a live edit, to show the user what changed). - live_repair(): Repair Word after a crashed live edit (screen updating off, alerts off, an open undo record); safe to run at any time. - com_proofing_errors(opt limit timeout): List Word's spelling and grammar errors with context and suggestions; the file must be closed in Word. - com_readability_statistics(opt timeout): Read Word's readability statistics (Flesch scores, counts and averages); the file must be closed in Word. - update_now(): Install the newer version the update notice named; call only when the user asks or agrees. - update_notices(action): Turn update notices on or off, or show their status (action).
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it explains that live edits stay unsaved until com_save_document, that most com_ ops use a private hidden Word and do not alter the source file, and that com_refresh_fields is the exception because it saves in place. It also states that closing with save=false discards unsaved changes, which is exactly the kind of destructive 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the purpose, key behavioral constraints, and sequencing before listing operations. It is dense and earns most of its space, though the first few op lines duplicate content already present in the schema enum description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-op, high-complexity tool with no output schema, it supplies the critical context: which ops use hidden Word, which mutate the source file, which require Word to be open, and how to sequence live edits and saves. It also points to word_help for argument details, so the description is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds useful meaning: file_path is required unless an op names other paths or reads no document, and unknown args keys are refused. The op argument list is partially duplicated in the schema's op enum description, which keeps this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific scope: 'Needs Microsoft Word itself' and lists the exact Word-application operations it owns, from saving open documents to PDF import/export and live repair. It explicitly separates this tool from word_edit and word_read, so an agent can distinguish it from siblings without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternatives and when to use them: text edits go through word_edit and reads through word_read. It also gives sequencing rules for live work, saying to enable track changes before editing and save last, which tells the agent how to order calls correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_documentWord Files and AssemblyA
Destructive

Whole files: create, copy, assemble, split, templates, mail merge, backups, protection, watermark, document properties, accessibility fixes and table export. Edits inside one document belong to the other tools. Writes only the files named in args; manage_backups lists, restores and snapshots the automatic backups. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • insert_document(target_path, source_path; opt location formatting): Insert the ENTIRE body of source_path into target_path at one position, with full resource reconciliation: the chapter-merge tool.

  • copy_document(dest_path; opt overwrite): Copy a document byte for byte to dest_path; an existing destination is refused unless overwrite=true.

  • create_document(opt title): Create a new blank .docx, optionally with a title property; an existing file is refused.

  • manage_backups(action; opt file_path directory source scope dry_run label dest_dir): List, restore, purge or snapshot the automatic backups (prev and anchor slots); purge is a dry run unless dry_run=false.

  • set_document_properties(opt title author subject keywords category comments update_fields_on_open embed_fonts embed_fonts_subset): Set core document metadata (File > Info): title, author, subject, keywords, category, comments; only the parameters given change.

  • split_document(output_dir; opt level filename_from): Split a document into one standalone .docx per heading section, the inverse of com_multi_document merge (no Word needed).

  • copy_table(target_path, source_path, table_index; opt after_index after_text at_end): Copy one table from source_path into target_path, reconciling styles, numbering, images and notes; the source is not changed.

  • apply_template(reference_path; opt include_page_geometry): Restyle this document to match a reference document: styles, theme, fonts, layout settings, optionally page geometry. More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - fill_template(data; opt missing): Fill a template IN PLACE: replace every {{name}} with data[name] (safe across fragmented runs, first run's formatting kept) and set MERGEFIELDs as plain text. - mail_merge(template_path, data_rows, output_dir; opt filename_pattern missing): Mail merge: one filled .docx per data row, saved into output_dir. - assemble_front_matter(spec): Insert front matter (title page, abstract, TOC, lists) at the start, numbered in roman numerals before the body. - set_document_protection(opt protection password restrict_formatting): Restrict editing, or lift the restriction. - set_watermark(watermark): Set or remove the page watermark. - fix_accessibility(opt alt_text_placeholders heading_skips heading_strategy table_headers doc_title dry_run): Repair validate(checks=['accessibility']) findings, one opted-in category at a time; all default OFF, none enabled refuses. - export_table(table_index; opt format output_path include_merges): Export one body-level table to CSV or JSON as a rows x grid-columns matrix.
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: "Writes only the files named in args", "an existing destination is refused unless overwrite=true", "purge is a dry run unless dry_run=false", "all default OFF, none enabled refuses", "unknown keys are refused", "only the parameters given change". These refusal, dry-run, and no-op-default semantics are exactly the mutation-safety context an agent needs and are not derivable from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope sentence, then a dense but uniform per-op table — appropriate for a 15-op dispatcher, and every line earns its place. Minor cost: the enumeration is split between the description and the op parameter's description ("More ops follow, in the same format"), forcing the agent to read two places, and terms like "live" and "backup" are referenced before being introduced.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-op writer with no output schema and an open args object, the definition covers all 15 ops, the path convention, and the mutation-safety profile. Gaps are small: the args-key contract is delegated to word_help, and return/result behavior for the file-writing ops is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schemas cover the top-level op/args shape, but args is an untyped additionalProperties object — the description supplies the real semantics: required vs. optional per op and what each does ("insert_document(target_path, source_path; opt location formatting)"). It also explains the shared file_path convention and that "file_path, live and backup are not repeated; word_help shows them", which is meaning the schema cannot provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Whole files: create, copy, assemble, split, templates, mail merge, backups..." states the resource and scope with a specific verb list, and the immediate contrast "Edits inside one document belong to the other tools" carves out the boundary against word_edit/word_format. An agent can route between this and its nine siblings from the first two sentences alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The when-not rule ("Edits inside one document belong to the other tools") plus the whole-file scope is an explicit exclusion, and per-op lines describe the situation each op serves ("the chapter-merge tool", "the inverse of ... merge"). It stops short of naming the specific sibling an agent should use for in-document edits, leaving that inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_editEdit Word TextA
Destructive

Change body text: insert, rewrite, delete, find and replace, page and section breaks, redaction, the anchored batch editor (apply_edits) and anchor stamping. Tables and lists are word_structure; styles and formatting are word_format. In any text an op writes, \n is a line break and \t a tab. Ops that take track=true record the change as a tracked change. Leave author out to sign with the user's own name, or pass author="assistant" to sign as "AI Assistant via KS4Word". Every edit to a closed file backs it up first and saves atomically, and a failed validation changes nothing. A document open in Word is edited live and stays unsaved until word_app com_save_document; ops with no live route refuse it. Paragraph numbers count body paragraphs from 0, tables not included, so the first paragraph (usually the title) is paragraph 0; get_text and get_outline show the numbers. An insert at {"paragraph": N} goes after paragraph N (position "before" puts it in front). When a heading or phrase marks the spot, use after_heading, search or anchor instead of a number. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • insert_paragraphs(paragraphs; opt location inherit_format copy_format_from track author): Insert paragraphs (items {text, style?, formatting?, heading_level?, paragraph_format?}) at a location object (omitted = document end). Each item becomes a new paragraph; to add words inside an existing paragraph, use search_and_replace. More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - search_and_replace(replacements; opt scope preview find_formatting max_replacements track author): Find and replace a list of {find, replace, regex?} items in one call, safe across Word's split runs; preview=true changes nothing. To add words inside a paragraph, replace the words just before the spot with the same words plus the new ones; with track=true only the new words are marked. Not for removing sensitive text: to remove a name or code everywhere before sharing a document, use redact_text, which also cleans charts, properties and hidden places and confirms the result. If redact_text refuses a replacement, ask the user what to use instead of replacing here. - delete_paragraphs(opt start end range track author expect_start expect_end): Delete body paragraphs by 0-based inclusive index (start, end; end defaults to start) or by range={start, end} location objects. - insert_break(opt type location): Insert a page break or a section break after the located paragraph (omit location for the document end). - apply_edits(edits; opt atomic): Apply a batch of anchor-addressed edits in one call: one lock, backup, and validated save. - delete_element(type; opt id location): Delete one equation, image, chart, bookmark, hyperlink, caption, reference list or content control (type picks which). - stamp_anchors(opt scope detail include): Write durable paragraph anchors into the file so later edits can address paragraphs by anchor; the writing form of get_document_view. - set_paragraph_text(location, new_text; opt expect): Replace one paragraph's full text, keeping style and base formatting; address it with a location object ({paragraph: N}, {search: ...}, {outline: ...}). Pass expect to refuse if the index shifted. - redact_text(targets; opt replacement scope ignore_case whole_word): Permanently remove matched text, then re-read the saved file. targets: [{find, regex?}].
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint=true annotation it discloses the actual safeguards: every edit to a closed file backs it up first, saves atomically, and a failed validation changes nothing; a document open in Word is edited live and stays unsaved until word_app com_save_document, and ops with no live route refuse. It also explains tracked-change semantics (track=true) and authorship (omit author to sign with the user's name, author="assistant" to sign as an AI). This is exactly the extra context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structure is logical and front-loaded: purpose, sibling boundaries, escaping, track/author semantics, backup and live-edit behavior, addressing rules, then a per-op line format. It is long and dense, and the trailing 'More ops follow... in the op parameter's description' is a meta-instruction, but nearly every sentence carries non-redundant operating information for a multi-op dispatcher.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9+-op dispatching tool with no output schema, it covers addressing, safety, live-vs-closed files, and per-op argument shape thoroughly. It does not say what the ops return or how success/failure is reported beyond 'a failed validation changes nothing,' leaving a modest gap for a tool with varied per-op results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description still adds real meaning: paragraph indices are 0-based, count body paragraphs only, exclude tables, and are visible via get_text/get_outline; an insert at {"paragraph": N} goes after paragraph N, with position 'before' putting it in front; and in any written text \n is a line break and \t a tab. That resolves ambiguities the enum/schema alone would leave open.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a specific verb+resource (change body text) and enumerates the covered operation families: insert, rewrite, delete, find/replace, breaks, redaction, apply_edits, anchor stamping. It also draws explicit boundaries against siblings: 'Tables and lists are word_structure; styles and formatting are word_format,' so an agent can distinguish it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete routing rules: use after_heading/search/anchor 'instead of a number' when a heading or phrase marks the spot, use search_and_replace to add words inside an existing paragraph, and use redact_text rather than search_and_replace for sensitive removal. It names what to do when redaction refuses ('ask the user what to use instead'), and it routes live-file work to word_app com_save_document, so when/when-not/alternatives are all explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_formatWord Formatting and StylesA
Destructive

How text looks: apply or define styles, character and paragraph formatting, heading levels and manuscript format. To change the words themselves use word_edit. Every edit backs the file up first and saves atomically. format_text (formatting, not case) and set_paragraph_format edit a document open in Word live; the other ops refuse it. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • define_style(style_id; opt name style_type based_on next_style character_formatting paragraph_formatting): Create a paragraph or character style, or update one in place, replacing only the properties given. style_id is the style's id (Heading1, Normal, Title), not its display name, so a built-in style can be restyled without reading the style list first.

  • apply_style(style; opt range target): Apply a paragraph style to a range of paragraphs, or a character style to the text that target matches.

  • format_text(opt formatting case range find occurrence): Apply character formatting or change case.

  • set_paragraph_format(opt indices formatting start end): Set paragraph formatting on a batch: indices (0-based list) OR start/end (inclusive range), exactly one form.

  • change_heading_level(delta; opt heading_text paragraph_index subtree): Promote (delta=-1) or demote (delta=1) a heading, addressed by exact heading_text or paragraph_index.

  • apply_manuscript_format(style; opt running_head author_last_name): Apply a style guide's page conventions (apa7, apa7-professional, mla9, chicago17); choices the guides leave open are listed, not applied.

NameRequiredDescriptionDefault
opYesThe operation to run: one of the ops listed in this tool's description.
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructive/non-idempotent; the description adds materially more — every edit backs the file up first and saves atomically, define_style replaces only the properties given (patch semantics), and apply_manuscript_format lists rather than applies guide-left-open choices. The live-document refusal rule is exactly the kind of behavioral fact annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary followed by a compact one-line-per-op reference block; nearly every clause carries information. Minor friction: the aside 'file_path, live and backup are not repeated; word_help shows them' is terse to the point of ambiguity, and the parenthetical 'format_text (formatting, not case)' sits in tension with the op line that says format_text can 'change case.'

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-op router tool with a generic args object and no output schema, the description supplies per-op argument contracts and hazard handling, which is most of what an agent needs. The remaining gap is return values: only apply_manuscript_format's behavior ('choices the guides leave open are listed') hints at what comes back; the other ops' responses go unmentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema coverage is 100% but the args object is opaque (additionalProperties: true), and the description fills that gap by marking required vs optional per op. It also explains semantics the schema cannot: style_id is an id (Heading1) not a display name, and set_paragraph_format takes indices OR start/end, 'exactly one form.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific scope statement ('How text looks: apply or define styles, character and paragraph formatting, heading levels and manuscript format') and immediately demarcates it from word_edit ('To change the words themselves use word_edit'). The six enumerated ops make the surface area unambiguous without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names alternatives (word_edit for text content, word_help for arguments) and gives a hard usage constraint: format_text and set_paragraph_format work on a document open live in Word, while 'the other ops refuse it.' No guidance, however, on when to prefer change_heading_level here versus structure-related ops in word_structure, so the sibling boundary against word_structure is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_helpWord Tool HelpA
Read-onlyIdempotent

Read-only help. Call it when an op's arguments are unclear or after a BAD_PARAMS refusal. With no arguments it lists every tool and its ops; with op it returns that op's full arguments, an example call and the tool that runs it; topic='location' explains the location object. Reads no document.

NameRequiredDescriptionDefault
opNoAn op name, for that op's arguments and an example; leave it out to list every tool and op.
topicNo'location' explains the location object that positional ops take.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description still adds real context, notably 'Reads no document' (so an agent knows it is side-effect-free with respect to document state) and what each mode returns. It doesn't cover caching or size of the returned listing, but that is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph, front-loaded with the read-only framing and the primary trigger, then the three mode behaviors. Every clause carries information; no filler or restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing what each invocation mode returns (tool/op listing, op arguments + example + owning tool, location explanation). An agent has everything needed to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, and the description goes further by stating the behavioral consequence of each parameter: omitting `op` lists everything, supplying it yields arguments + an example call + the running tool, and `topic='location'` explains the location object. That is meaning beyond the schema's field descriptions, though it doesn't add format details for op names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific function: reading help/metadata about the word tools and their ops, not touching documents. It clearly distinguishes itself from the sibling tools (which all act on documents) via 'Reads no document.' The only slight weakness is that 'help' alone is generic, but the description resolves it by enumerating what help content it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit triggers ('when an op's arguments are unclear or after a BAD_PARAMS refusal') and maps each invocation mode to an outcome: no args lists every tool and op, `op` returns that op's arguments plus an example and owning tool, `topic='location'` explains the location object. Nothing is left to inference about when or how to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_mediaWord Media, Fields and FormsA
Destructive

Embedded objects: images, charts, equations, text boxes, hyperlinks, fields, form fields and content controls. Plain text is word_edit and tables are word_structure. Every edit backs the file up first and saves atomically. These ops refuse a document open in Word. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • insert_image(image_path; opt location width_pt alignment wrap position z_order allow_overlap distance_pt wrap_text): Insert a PNG, JPEG, GIF, BMP or TIFF image at a location, inline by default or floating with wrap; aspect ratio is kept.

  • insert_field(field_code, location; opt placeholder): Insert a Word field (DATE, PAGE, NUMPAGES, SEQ, ...) at a location; codes outside the safe allowlist are refused.

  • set_image(image_id; opt source width_pt alt_text alt_title wrap position z_order allow_overlap distance_pt wrap_text force track author keep_width): Change one image (image_id from list_elements): swap the file (a tracked swap with track=true), resize, set alt text or wrapping; anything not named stays.

  • export_images(output_dir; opt prefix): Save every image in the document as files in output_dir; existing files are refused and the document is not changed.

  • insert_chart(chart_type, data; opt title width_pt height_pt location alignment legend colors): Insert a native, theme-following Word chart from data.

  • set_chart_data(chart_id, data; opt series_names): Replace a chart's data in place (chart_id from list_elements), keeping its formatting; the number of series must stay the same.

  • insert_equation(latex; opt display location at_text occurrence): Insert a LaTeX equation as NATIVE, editable Word math.

  • set_textbox_text(box_index, text): Replace the text of one text box (box_index from get_text(textbox=true)). More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - insert_hyperlink(at_text, url; opt occurrence allow_local_file): Turn existing text (the occurrence-th match of at_text) into an external hyperlink; text already in a link is refused. - insert_content_control(tag, after_text; opt alias text occurrence): Insert a plain-text content control with a unique tag right after after_text; other control types are refused. - set_content_control(value; opt tag index): Set one content control's value, addressed by tag or by list_elements(type='content_controls') index (exactly one). - set_form_fields(values; opt missing): Set form-field values by name (legacy fields) or tag/alias (content controls): text fields take strings, checkboxes booleans, dropdowns only their options.
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the destructiveHint annotation: every edit "backs the file up first and saves atomically," ops "refuse a document open in Word," field codes outside a safe allowlist are refused, export_images refuses to overwrite existing files and does not modify the document, set_image leaves unnamed properties untouched, and set_chart_data requires the series count to stay the same. These are exactly the mutation-side effects an agent needs before committing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary, then a consistent `name(required; opt optional): what it does` format that scans quickly despite its length. The meta-lines ("file_path, live and backup are not repeated; word_help shows them", "More ops follow... in the op parameter's description") add navigation cost but earn their place by not duplicating shared arguments.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-argument multiplexer over 12 heterogeneous operations with no output schema, coverage is strong: safety behavior, argument shapes, id sources ("image_id from list_elements", "box_index from get_text(textbox=true)") are all given. The remaining gap is return values — nothing says what insert_image or insert_chart yields, so the agent cannot chain ops within a session.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema's `args` object is a generic bag, so the description is doing the real work: it marks required vs optional per op and adds behavioral defaults ("inline by default," "aspect ratio is kept," "anything not named stays"). It covers 8 of 12 ops and defers the rest to the op enum's description, which is disclosed but splits the documentation an agent must read.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a concrete resource enumeration ("images, charts, equations, text boxes, hyperlinks, fields, form fields and content controls") and each op line states a specific verb plus effect. It explicitly routes siblings: "Plain text is word_edit and tables are word_structure." An agent can place this tool against all nine siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Sibling boundaries are stated for the two most likely confusions (word_edit for text, word_structure for tables), and each op line implies the situation it serves. There are no explicit when-not-to-use exclusions or prerequisites beyond the open-file refusal, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_readRead Word DocumentA
Read-onlyIdempotent

Read-only: inspect, search, list, count and check a .docx before changing it. Never changes a file. To change anything use word_edit, word_format, word_structure, word_media, word_review, word_references, word_document or word_app. get_document_info, get_outline, get_text, find_text, get_comments and word_count read a document open in Word live; get_document_view reads its last saved state; the other reads of a file need it closed in Word. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • get_text(opt start end contains include_textboxes textbox): Read body paragraphs as [{index, text, style, ...}]; start and end are paragraph numbers, end exclusive.

  • get_document_view(opt scope detail include): Read the document as an anchored markdown projection, the low-token alternative to get_text for orientation and bulk editing. detail="full" shows revisions and comments.

  • find_text(opt query regex context_chars include_textboxes formatting scope max_results): Find text in paragraphs and table cells; returns locations plus context.

  • list_elements(type; opt filter): List one kind of element (tables, images, charts, bookmarks, notes, fields, lists, sources, ...) with the ids other ops take.

  • get_headers_footers(): Read every header and footer in every section: its text, its type, and whether it holds a page-number field.

  • get_document_info(): Read a one-call overview: paragraph, table, note, comment and revision counts, sections and package parts.

  • com_word_status(): Check whether Word is ready, busy or blocked by a dialog, and which open documents have unsaved changes; use before live edits.

  • validate(opt checks options): Run read-only check batteries (checks, default ['core']; also accessibility, notes, citation_parity and more) and return one report. More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - diagnose_document(): Report the saved file's structural health (relationships, fields, notes, styles, bookmarks): the deeper companion to validate. - get_workflows(opt task): Recommended tool sequences for common multi-step tasks, with a one-line why per step. - get_styles(opt names type include_formatting): List the document's styles with their explicitly set formatting, in the shape define_style accepts. names, type and include_formatting=false narrow the list; a list over the output limit comes back cut, with a note of what was left out. - get_outline(opt detect_formatted offset): List every heading with its paragraph index and level. - get_table(table_index; opt nested): Read one table in full: every cell's text, the merge map, and column widths. - get_comments(opt author): Read comments with author, anchored text, replies and resolved state; author filters to one reviewer. - get_tracked_changes(opt author limit offset): List every tracked change with its type, author, date, text and paragraph; author filters to one reviewer. - get_server_info(opt include_licensee): Report build, edition, license status, tool surface, Word availability, sandbox shape, host and update state. - structured_diff(old_path, new_path; opt detail_cap): Compare two saved drafts paragraph by paragraph without Word; not a redline (com_multi_document compare makes one). - get_paragraph_format(start; opt end): Read the effective paragraph formatting of paragraphs start to end (inclusive), each value with where it comes from. - word_count(opt by_section exclusions): Count words, characters, and paragraphs; totals only unless by_section=true, which adds a count under each heading (one entry per heading, so long for a manuscript). - get_revision_report(opt mode): Summarize tracked changes by author and type (mode='summary'), or by author and section in detail (mode='analytics'). - comment_report(files; opt include_resolved): Build the reviewer matrix of comment threads for one file, or merged across copies of one draft (files is a list). - get_protection(): Read the document's editing restriction: its mode, whether a password is set, and formatting restrictions. - detect_citation_system(): Detect which citation systems the document uses (Word, Zotero, Mendeley, EndNote or plain text); run it before citation work. - parse_references(opt style_hint): Parse the reference list and in-text citations into a structured model, with a parse confidence for each entry.
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description is consistent with them while adding non-obvious constraints: some ops read the document open in Word live, get_document_view reads the last saved state, and other file reads require the file closed in Word. It also flags Word busy/blocked-by-dialog states and unsaved changes via com_word_status.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very long but every line is a distinct op with its arguments and return shape; nothing is padded. The critical facts (read-only, the mutating siblings, live vs saved state) are front-loaded before the op table, and at ~23 ops the length is proportionate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 23-op dispatcher with no output schema, the description covers purpose, routing, state requirements, per-op arguments, and even return shapes for the main ops (get_text's [{index, text, style, ...}], list_elements' ids). The remaining ops are handed off explicitly to the `op` parameter's schema description in the same format, so nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema only exposes a bare `op` enum and an `args` bag; the description supplies the real argument semantics per op (e.g. start/end are paragraph numbers with end exclusive, regex vs query in find_text, detail="full" shows revisions and comments). It also states that file_path, live and backup are shared and where to find them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb set (inspect, search, list, count, check) and the exact resource (.docx), and immediately names eight sibling tools that do the mutating work. The live-vs-saved-state sentence further partitions it from its own ops, so an agent can place the tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not: 'Never changes a file. To change anything use word_edit, word_format, word_structure, word_media, word_review, word_references, word_document or word_app.' It also routes within the tool — com_word_status 'use before live edits', detect_citation_system 'run it before citation work', get_document_view as the low-token alternative to get_text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_referencesWord References and NotesA
Destructive

Generated lists and scholarly apparatus: TOC and lists of figures and tables, footnotes and endnotes, captions, bookmarks, cross-references, index, citations, bibliography and Zotero. Plain text is word_edit. Every edit backs the file up first and saves atomically, and these ops refuse a document open in Word. Field results (TOC entries, page numbers, Word citations) fill in when Word updates fields, for example through word_app com_refresh_fields. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • manage_note(action; opt note_type text location note_id position): Insert, edit or delete a footnote or endnote, or remove orphaned note definitions (action).

  • insert_caption(text; opt table_index after_text image_id label above): Insert a numbered caption (SEQ field), 'Table N: text', above a table or below an image (image_id from list_elements; above flips either), or after the paragraph holding after_text.

  • insert_reference_list(type; opt title location options update_on_open): Insert a generated list (type): bibliography, TOC, list of figures, tables or equations, index, or glossary.

  • insert_bookmark(name, at_text; opt occurrence): Bookmark a text range by name, for cross-references, hyperlinks and the {bookmark: name} location; duplicate names are refused.

  • convert_notes(direction; opt note_id position): Convert footnotes to endnotes or back.

  • insert_cross_reference(to_bookmark, location; opt kind): Insert a cross-reference field pointing at a bookmark (create targets with insert_bookmark).

  • mark_index_entry(entry, location; opt subentry bold_page italic_page see): Mark an index entry with a hidden XE field at a location; insert_reference_list type='index' compiles the index. More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - insert_citation(tag, location; opt pages suppress_author suppress_year prefix suffix): Insert a CITATION field for a stored source (tag from manage_source) at a location; it shows a placeholder until fields update. - insert_zotero_citation(item_keys, location; opt page prefix suffix db_path): Insert a REAL Zotero citation field (ADDIN ZOTERO_ITEM CSL_CITATION) at a location object position; Zotero recognizes and refreshes it. - search_zotero_library(query; opt db_path limit): Search the user's LOCAL Zotero library (read-only; the database is never modified). - manage_source(action, tag; opt source_type title year authors editors journal_name book_title publisher city pages volume issue edition institution url internet_site_title style extra_fields force): Add or delete a Word bibliography source by tag (action); deleting a cited source is refused unless force=true. - set_bibliography_style(style): Set the style Word's own citation and bibliography fields render in (APA, Chicago, MLA, IEEE, Turabian and others). - convert_citation_style(target_style; opt source_style dry_run): Convert plain-text citations and the reference list to another style; anything not fully parsed is left as is and flagged.
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as destructive and non-idempotent, and the description adds important behavior: every edit backs up the file first, saves atomically, and refuses documents open in Word. It also explains that field results are deferred until Word updates fields, which is crucial for expectation setting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite its length, the structure is efficient and front-loaded: domain summary, safety/field-update behavior, then compact op definitions. The line-per-operation format is appropriate for a multi-operation tool and avoids wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 13-operation tool with no output schema, the description covers selection, mutation safety, field-update timing, and most op semantics well. It is slightly incomplete on return values and relies on word_help for some shared argument details, but the overall operational picture is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema carries the formal parameter burden, but the description adds substantial op-level meaning for arguments, such as image_id usage, bookmark targets, hidden XE index fields, and which arguments are required versus optional. It does defer some common path details to word_help, which keeps it from being fully self-contained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise domain: generated lists and scholarly apparatus such as TOC, footnotes, captions, bookmarks, cross-references, index, citations, bibliography, and Zotero. It clearly distinguishes this from sibling word_edit by stating that plain text editing belongs there.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing guidance: plain text is word_edit, and field results populate through Word field updates such as word_app com_refresh_fields. It also warns that these operations refuse a document open in Word, which is a key usage constraint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_reviewWord Comments and ReviewA
Destructive

Review state: add, reply to, resolve and delete comments, accept or reject tracked changes, switch Track Changes on or off in a closed file, anonymize a manuscript for blind review and restore it, and clean a manuscript for submission. To read comments or tracked changes use word_read; to make tracked edits use word_edit with track=true. resolve_revisions and prepare_for_submission can be undone only from the automatic backup. These ops refuse a document open in Word. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • manage_comment(action; opt text author comment_id location done): Add a comment at a location, or reply to, resolve or delete one by comment_id. Leave author out to sign with the user's own name, or pass author="assistant" to sign as "AI Assistant via KS4Word".

  • resolve_revisions(action; opt author): Accept or reject tracked changes in bulk, for every author or one (author); undo is from the automatic backup only.

  • anonymize_for_review(author_names; opt replacement mapping_path): Heuristic: review the flagged items rather than trusting silently. Anonymize a manuscript for blind review, reversibly; writes a private mapping file and flags identifying prose for you to check.

  • deanonymize_document(opt mapping_path): Reverse anonymize_for_review using its mapping file (default .anonymization.json beside the document).

  • prepare_for_submission(opt accept_revisions remove_comments scrub_metadata keep_title): Accept all tracked changes, delete all comments and scrub identifying metadata in one call; footnotes, fields and citations stay.

  • set_track_changes(enabled): Turn Track Changes on or off in a closed document, so Word and ops that take track record later edits (live_set_track_changes for an open one). One tracked edit needs only track=true on that op. More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - retrack_changes(baseline; opt author preview skip_untrackable): Mark edits made with Track Changes off as tracked changes against an earlier copy. Leave author out to sign with the user's own name, or pass author="assistant" to sign as "AI Assistant via KS4Word".
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds material context: resolve_revisions and prepare_for_submission are undoable only from the automatic backup, anonymize_for_review writes a private mapping file and flags prose for human checking, and all ops refuse documents open in Word. That is exactly the kind of irreversibility and side-effect disclosure the annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structure is strong: an overview sentence, sibling routing, a warning about irreversibility, then a consistent 'name(required; opt optional): what it does' legend with shared args factored out. The opening sentence is a dense run-on packing eight operations, which costs a little readability, but no line is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-op dispatcher with no output schema, the definition covers purpose, alternatives, preconditions, irreversibility, per-op arguments, and a pointer to word_help for the shared file_path/live/backup args and for further ops. Nothing an agent needs in order to pick and invoke an op is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the args object is freeform, so the description carries the real burden — and it does, listing per-op required and optional arguments (action, comment_id, author, mapping_path, accept_revisions, baseline, etc.) with semantics such as leaving author out to sign with the user's own name. This goes well beyond the schema's generic args description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific resource (comments and tracked changes in Word documents) and a concrete set of verbs (add, reply, resolve, delete, accept, reject, anonymize, clean). It explicitly distinguishes itself from siblings by naming word_read for reading and word_edit with track=true for tracked edits, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is given: 'To read comments or tracked changes use word_read; to make tracked edits use word_edit with track=true.' It also states a hard precondition ('refuse a document open in Word') and names live_set_track_changes as the alternative for open documents, covering when-to-use and when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

word_structureWord Tables, Lists and LayoutA
Destructive

Tables, lists and page layout: create and change tables and lists, sections, page setup, headers and footers, and page numbers. Body text is word_edit. Every edit backs the file up first and saves atomically. set_cells edits a document open in Word live; the other ops refuse it. Ops, one per line, as name(required; opt optional): what it does. file_path, live and backup are not repeated; word_help shows them:

  • set_header_footer(part, text; opt section ref_type alignment include_page_number replace_content): Set a section's header or footer text, replacing the whole part. ref_type 'first' is a different first page, no section break needed.

  • set_section_properties(opt section orientation page_width_pt page_height_pt margins_pt columns line_numbering): Set one section's page size, orientation, margins, columns and line numbering; with no changes it returns the current values.

  • insert_list(items; opt kind location continue_from start_at levels): Insert a bulleted or numbered list with real bullet/number glyphs (numbering.xml as needed).

  • create_table(data; opt location header_row width_pt): Create a table from 2D string data with single-line borders and a bold repeating header row (header_row=False for none).

  • set_table_properties(table_index; opt style banded_rows first_row_header column_widths header_row_repeat): Set table-wide attributes; pass any combination.

  • set_cells(table_index; opt edits block nested track author): Write many table cells in one call.

  • delete_table(table_index): Delete a whole table and its contents.

  • modify_table_structure(table_index, action; opt target at count copy_format_from width_pt start end columns range row cell at_row): Insert or delete rows or columns, or merge, unmerge or split one table (action picks which; extra arguments are refused).

  • format_cells(table_index, targets, formatting): Format table cells in bulk. More ops follow, in the same format, in the op parameter's description.

NameRequiredDescriptionDefault
opYesThe operation to run: an op listed in this tool's description, or one of these, in the same format: - sort_table(table_index, column; opt numeric descending has_header): Sort a table's data rows by one column (CELL index, 0-based). - import_table(data; opt table_index at_end after_text has_header): Fill a table from data: a .csv path, a .json path (export_table's form or a bare row list), or an inline list of lists. - set_list_numbering(num_id; opt restart_at level continue_from levels force): Change how one existing list numbers itself (num_id from list_elements(type='lists')). - set_page_numbers(opt section position alignment prefix x_of_y format): Add a page-number field to the header or footer, and set a section's number format and starting number. - setup_chapter_headers(opt level include_number alignment first_page_blank scope): Put the current chapter title in each page's running header with a STYLEREF field; other header content is replaced. - move_section(heading_text; opt before_heading after_heading at_end): Move a heading and its ENTIRE section (content and tables until the next same-or-higher heading) before or after another heading, or to the end.
argsNoThe op's arguments as an object. Include file_path (the absolute .docx path) unless the op's line names other paths or the op reads no document; unknown keys are refused. word_help lists every argument.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that every edit backs up the file first and saves atomically, and that all ops except set_cells refuse a live Word document. It also notes destructive actions like deleting a whole table and replacing the whole header/footer part, which is valuable behavioral context for a destructiveHint=true tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but warranted for a 15-op tool. Purpose and critical behavioral constraints are front-loaded, and the one-op-per-line catalog is structured for scanning; the note that remaining ops appear in the op parameter description prevents duplication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-operation mutation tool with no output schema, the definition covers invocation details, safety behavior, live-document constraints, and op-specific argument requirements. The split between main description and op enum description is clearly signposted, leaving no obvious gap for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds operation-level semantics: required versus optional arguments for each listed op, meaning of values like ref_type 'first', and refusal of extra arguments in modify_table_structure. It also correctly delegates file_path/live/backup details to word_help rather than repeating them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: tables, lists, page layout, sections, headers/footers, and page numbers. It distinguishes itself from the sibling word_edit by stating 'Body text is word_edit,' so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly identifies the alternative for body text and gives a key usage condition: 'set_cells edits a document open in Word live; the other ops refuse it.' The operation catalog further clarifies when to use each op, including special cases like no section break being needed for a first-page header.

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.

  1. 39 tool updates
    • Removedapply_edits
    • Removedapply_style
    • Removedcopy_document
    • Removedcreate_document
    • Removedcreate_table
    • Removeddelete_element
    • Removeddelete_paragraphs
    • Removeddelete_table
    • Removeddiagnose_document
    • Removeddisable_tools
    • Removedenable_tools
    • Removedfind_text
    • Removedformat_text
    • Removedget_document_info
    • Removedget_document_view
    • Removedget_outline
    • Removedget_server_info
    • Removedget_table
    • Removedget_text
    • Removedget_workflows
    • Removedinsert_break
    • Removedinsert_list
    • Removedinsert_paragraphs
    • Removedlist_elements
    • Removedmanage_backups
    • Removedsearch_and_replace
    • Removedset_cells
    • Removedset_paragraph_format
    • Removedset_paragraph_text
    • Addedword_app
    • Addedword_document
    • Addedword_edit
    • Addedword_format
    • Addedword_help
    • Addedword_media
    • Addedword_read
    • Addedword_references
    • Addedword_review
    • Addedword_structure
  2. 12 tool updatesv2.2.1
    • Changedapply_edits2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changeddelete_paragraphs2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedfind_text2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedformat_text2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedget_document_info2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedget_outline2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedget_text2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedinsert_paragraphs2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedsearch_and_replace2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedset_cells2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedset_paragraph_format2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
    • Changedset_paragraph_text2 fields changed
      • addedInput schema / properties / live / description
        Added value: +"auto: file or live; force: live; off: refuse"
      • addedInput schema / properties / live / enum
        Added value: +[
        +  "auto",
        +  "force",
        +  "off"
        +]
  3. 2 tool updatesv2.0.3
    • Addedget_server_info
    • Changedinsert_list3 fields changed
      • addedInput schema / properties / continue_from
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / levels
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {},
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / start_at
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  4. 1 tool updatev2.0.1
    • Changeddelete_paragraphs2 fields changed
      • addedInput schema / properties / expect_end
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / expect_start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  5. 192 tool updatesv2.0.0
    • Removedaccept_revisions
    • Removedadd_bookmark
    • Removedadd_caption
    • Removedadd_chart
    • Removedadd_comment
    • Removedadd_cross_reference
    • Removedadd_endnote
    • Removedadd_equation
    • Removedadd_footnote
    • Removedadd_heading
    • Removedadd_hyperlink
    • Removedadd_image
    • Removedadd_list
    • Removedadd_page_break
    • Removedadd_page_numbers
    • Removedadd_section_break
    • Removedadd_source
    • Removedadd_watermark
    • Removedanonymize_for_review
    • Removedapply_character_style
    • Addedapply_edits
    • Removedapply_manuscript_format
    • Changedapply_style4 fields changed
      • removedInput schema / properties / indices
        Removed value: -{
        -  "items": {
        -    "type": "integer"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / range
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / target
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • changedInput schema / required
        Previous value: -[
        -  "file_path",
        -  "indices",
        -  "style"
        -]New value: +[
        +  "file_path",
        +  "style"
        +]
    • Removedapply_table_style
    • Removedapply_template
    • Removedassemble_front_matter
    • Removedaudit_accessibility
    • Removedbatch_apply
    • Removedchange_case
    • Removedchange_heading_level
    • Removedcheck_brand_compliance
    • Removedcheck_citation_parity
    • Removedcheck_defined_terms
    • Removedcheck_image_resolution
    • Removedcheck_reference_field_integrity
    • Removedcheck_template_compliance
    • Removedcleanup_orphan_notes
    • Removedcom_close_open_document
    • Removedcom_combine_documents
    • Removedcom_compare_documents
    • Removedcom_export_pdf
    • Removedcom_import_pdf
    • Removedcom_merge_documents
    • Removedcom_proofing_errors
    • Removedcom_readability_statistics
    • Removedcom_refresh_fields
    • Removedcom_save_open_document
    • Removedcom_save_with_password
    • Removedcom_validate_opens_clean
    • Removedcom_word_status
    • Removedcomment_report
    • Removedcomment_report_multi
    • Removedconvert_citation_style
    • Removedconvert_notes
    • Removedcopy_table
    • Removedcreate_snapshot
    • Changedcreate_table4 fields changed
      • removedInput schema / properties / after_anchor
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • removedInput schema / properties / after_index
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • removedInput schema / properties / at_end
        Removed value: -{
        -  "default": false,
        -  "type": "boolean"
        -}
      • addedInput schema / properties / location
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Removeddeanonymize_document
    • Removeddefine_style
    • Removeddelete_columns
    • Removeddelete_comment
    • Addeddelete_element
    • Removeddelete_endnote
    • Removeddelete_equation
    • Removeddelete_footnote
    • Changeddelete_paragraphs5 fields changed
      • addedInput schema / properties / range
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / start / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / start / default
        Added value: +null
      • removedInput schema / properties / start / type
        Removed value: -"integer"
      • changedInput schema / required
        Previous value: -[
        -  "file_path",
        -  "start"
        -]New value: +[
        +  "file_path"
        +]
    • Removeddelete_rows
    • Removeddelete_source
    • Removeddelete_toc
    • Removeddetect_citation_system
    • Addeddisable_tools
    • Removededit_endnote
    • Removededit_footnote
    • Addedenable_tools
    • Removedexport_table
    • Removedextract_images
    • Removedfill_form_fields
    • Removedfill_template
    • Removedfind_formatted
    • Changedfind_text6 fields changed
      • addedInput schema / properties / formatting
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / query / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / query / default
        Added value: +null
      • removedInput schema / properties / query / type
        Removed value: -"string"
      • addedInput schema / properties / scope
        Added value: +{
        +  "default": "body",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "file_path",
        -  "query"
        -]New value: +[
        +  "file_path"
        +]
    • Removedfix_accessibility
    • Removedformat_cells
    • Changedformat_text11 fields changed
      • addedInput schema / properties / case
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedInput schema / properties / formatting / additionalProperties
        Removed value: -true
      • addedInput schema / properties / formatting / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / formatting / default
        Added value: +null
      • removedInput schema / properties / formatting / type
        Removed value: -"object"
      • addedInput schema / properties / occurrence / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / occurrence / default
        Previous value: -1New value: +null
      • removedInput schema / properties / occurrence / type
        Removed value: -"integer"
      • removedInput schema / properties / paragraph_index
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • addedInput schema / properties / range
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • changedInput schema / required
        Previous value: -[
        -  "file_path",
        -  "formatting"
        -]New value: +[
        +  "file_path"
        +]
    • Removedget_comments
    • Addedget_document_view
    • Removedget_headers_footers
    • Removedget_lists
    • Removedget_nested_table
    • Changedget_outline1 field changed
      • addedInput schema / properties / detect_formatted
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
    • Removedget_paragraph_format
    • Removedget_protection
    • Removedget_styles
    • Changedget_table1 field changed
      • addedInput schema / properties / nested
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedget_text1 field changed
      • addedInput schema / properties / textbox
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Removedget_textbox_text
    • Removedget_tracked_changes
    • Removedimport_table
    • Removedinsert_bibliography
    • Addedinsert_break
    • Removedinsert_caption_list
    • Removedinsert_citation
    • Removedinsert_columns
    • Removedinsert_content_control
    • Removedinsert_document
    • Removedinsert_field
    • Removedinsert_glossary
    • Removedinsert_index
    • Addedinsert_list
    • Changedinsert_paragraphs5 fields changed
      • removedInput schema / properties / after_anchor
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • removedInput schema / properties / after_index
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • removedInput schema / properties / at_end
        Removed value: -{
        -  "default": false,
        -  "type": "boolean"
        -}
      • removedInput schema / properties / before_index
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • addedInput schema / properties / location
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Removedinsert_rows
    • Removedinsert_toc
    • Removedinsert_zotero_citation
    • Removedlist_bookmarks
    • Removedlist_charts
    • Removedlist_content_controls
    • Addedlist_elements
    • Removedlist_endnotes
    • Removedlist_equations
    • Removedlist_fields
    • Removedlist_footnotes
    • Removedlist_form_fields
    • Removedlist_images
    • Removedlist_index_entries
    • Removedlist_reference_fields
    • Removedlist_section_blocks
    • Removedlist_sections
    • Removedlist_sources
    • Removedlist_tables
    • Removedlist_template_placeholders
    • Removedlive_insert_at_cursor
    • Removedlive_scroll_to
    • Removedlive_set_track_changes
    • Removedmail_merge
    • Changedmanage_backups2 fields changed
      • addedInput schema / properties / dest_dir
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / label
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Removedmark_index_entry
    • Removedmerge_cells
    • Removedmove_section
    • Removedparse_references
    • Removedprepare_for_submission
    • Removedpreview_replace
    • Removedread_toc
    • Removedredact_text
    • Removedreject_revisions
    • Removedremove_document_protection
    • Removedremove_watermark
    • Removedreplace_formatted
    • Removedreplace_image
    • Removedreplace_paragraph_text
    • Removedreply_to_comment
    • Removedresize_image
    • Removedresolve_comment
    • Removedrevision_analytics
    • Removedrevision_summary
    • Changedsearch_and_replace2 fields changed
      • addedInput schema / properties / find_formatting
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / preview
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
    • Removedsearch_zotero_library
    • Removedset_bibliography_style
    • Changedset_cells7 fields changed
      • addedInput schema / properties / block
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / edits / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / edits / default
        Added value: +null
      • removedInput schema / properties / edits / items
        Removed value: -{
        -  "additionalProperties": true,
        -  "type": "object"
        -}
      • removedInput schema / properties / edits / type
        Removed value: -"array"
      • addedInput schema / properties / nested
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • changedInput schema / required
        Previous value: -[
        -  "file_path",
        -  "table_index",
        -  "edits"
        -]New value: +[
        +  "file_path",
        +  "table_index"
        +]
    • Removedset_cells_block
    • Removedset_column_widths
    • Removedset_columns
    • Removedset_content_control_value
    • Removedset_document_properties
    • Removedset_document_protection
    • Removedset_footer
    • Removedset_header
    • Removedset_header_row_repeat
    • Removedset_image_alt_text
    • Removedset_line_numbering
    • Removedset_nested_cells
    • Removedset_page_number_format
    • Changedset_paragraph_format11 fields changed
      • addedInput schema / properties / end
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedInput schema / properties / formatting / additionalProperties
        Removed value: -true
      • addedInput schema / properties / formatting / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / formatting / default
        Added value: +null
      • removedInput schema / properties / formatting / type
        Removed value: -"object"
      • addedInput schema / properties / indices / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / indices / default
        Added value: +null
      • removedInput schema / properties / indices / items
        Removed value: -{
        -  "type": "integer"
        -}
      • removedInput schema / properties / indices / type
        Removed value: -"array"
      • addedInput schema / properties / start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • changedInput schema / required
        Previous value: -[
        -  "file_path",
        -  "indices",
        -  "formatting"
        -]New value: +[
        +  "file_path"
        +]
    • Addedset_paragraph_text
    • Removedset_section_properties
    • Removedset_textbox_text
    • Removedset_update_fields_flag
    • Removedsetup_chapter_headers
    • Removedsort_table
    • Removedsplit_document
    • Removedsplit_table
    • Removedstructured_diff
    • Removedunmerge_cells
    • Removedupdate_chart_data
    • Removedvalidate_captions
    • Removedvalidate_chapter_headers
    • Removedvalidate_cross_references
    • Removedvalidate_document
    • Removedvalidate_form_completeness
    • Removedvalidate_notes
    • Removedverify_redaction
    • Removedword_count
    • Removedword_count_with_exclusions
    • Removedword_live_repair
  6. 84 tool updatesv1.6.1
    • Addedadd_chart
    • Addedadd_equation
    • Addedanonymize_for_review
    • Addedapply_manuscript_format
    • Addedassemble_front_matter
    • Addedaudit_accessibility
    • Addedbatch_apply
    • Addedchange_heading_level
    • Addedcheck_brand_compliance
    • Addedcheck_defined_terms
    • Addedcheck_image_resolution
    • Addedcheck_reference_field_integrity
    • Addedcheck_template_compliance
    • Addedcom_import_pdf
    • Addedcomment_report
    • Addedcomment_report_multi
    • Addedconvert_citation_style
    • Changedcopy_document1 field changed
      • addedInput schema / properties / overwrite
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
    • Addedcopy_table
    • Addedcreate_snapshot
    • Addeddeanonymize_document
    • Addeddelete_equation
    • Changeddelete_paragraphs1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Addeddetect_citation_system
    • Addeddiagnose_document
    • Addedexport_table
    • Addedextract_images
    • Addedfill_form_fields
    • Addedfill_template
    • Addedfind_formatted
    • Changedfind_text5 fields changed
      • addedInput schema / properties / include_textboxes
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / anyOf
        Added value: +[
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / result / items
        Removed value: -{}
      • removedOutput schema / properties / result / type
        Removed value: -"array"
    • Addedfix_accessibility
    • Changedformat_text1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Changedget_comments1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Changedget_document_info1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Changedget_outline4 fields changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / anyOf
        Added value: +[
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / result / items
        Removed value: -{}
      • removedOutput schema / properties / result / type
        Removed value: -"array"
    • Addedget_paragraph_format
    • Changedget_text5 fields changed
      • addedInput schema / properties / include_textboxes
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / anyOf
        Added value: +[
        +  {
        +    "items": {},
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / result / items
        Removed value: -{}
      • removedOutput schema / properties / result / type
        Removed value: -"array"
    • Addedget_textbox_text
    • Addedget_workflows
    • Addedimport_table
    • Addedinsert_content_control
    • Addedinsert_document
    • Addedinsert_field
    • Addedinsert_glossary
    • Changedinsert_paragraphs3 fields changed
      • addedInput schema / properties / copy_format_from
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / inherit_format
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Addedinsert_zotero_citation
    • Addedlist_charts
    • Addedlist_content_controls
    • Addedlist_equations
    • Addedlist_fields
    • Addedlist_form_fields
    • Addedlist_reference_fields
    • Addedlist_template_placeholders
    • Addedlive_insert_at_cursor
    • Addedlive_scroll_to
    • Addedlive_set_track_changes
    • Addedmail_merge
    • Addedmanage_backups
    • Addedparse_references
    • Addedprepare_for_submission
    • Addedpreview_replace
    • Addedredact_text
    • Addedreplace_formatted
    • Changedreplace_paragraph_text2 fields changed
      • addedInput schema / properties / expect
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Addedrevision_analytics
    • Changedsearch_and_replace1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Addedsearch_zotero_library
    • Changedset_cells1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Addedset_content_control_value
    • Changedset_paragraph_format1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Addedset_textbox_text
    • Addedsetup_chapter_headers
    • Addedsplit_document
    • Addedstructured_diff
    • Addedupdate_chart_data
    • Addedvalidate_captions
    • Addedvalidate_chapter_headers
    • Addedvalidate_cross_references
    • Addedvalidate_form_completeness
    • Addedverify_redaction
    • Changedword_count1 field changed
      • addedInput schema / properties / live
        Added value: +{
        +  "default": "auto",
        +  "type": "string"
        +}
    • Addedword_count_with_exclusions
    • Addedword_live_repair
  7. 119 tool updatesv1.2.1
    • First observedaccept_revisions
    • First observedadd_bookmark
    • First observedadd_caption
    • First observedadd_comment
    • First observedadd_cross_reference
    • First observedadd_endnote
    • First observedadd_footnote
    • First observedadd_heading
    • First observedadd_hyperlink
    • First observedadd_image
    • First observedadd_list
    • First observedadd_page_break
    • First observedadd_page_numbers
    • First observedadd_section_break
    • First observedadd_source
    • First observedadd_watermark
    • First observedapply_character_style
    • First observedapply_style
    • First observedapply_table_style
    • First observedapply_template
    • First observedchange_case
    • First observedcheck_citation_parity
    • First observedcleanup_orphan_notes
    • First observedcom_close_open_document
    • First observedcom_combine_documents
    • First observedcom_compare_documents
    • First observedcom_export_pdf
    • First observedcom_merge_documents
    • First observedcom_proofing_errors
    • First observedcom_readability_statistics
    • First observedcom_refresh_fields
    • First observedcom_save_open_document
    • First observedcom_save_with_password
    • First observedcom_validate_opens_clean
    • First observedcom_word_status
    • First observedconvert_notes
    • First observedcopy_document
    • First observedcreate_document
    • First observedcreate_table
    • First observeddefine_style
    • First observeddelete_columns
    • First observeddelete_comment
    • First observeddelete_endnote
    • First observeddelete_footnote
    • First observeddelete_paragraphs
    • First observeddelete_rows
    • First observeddelete_source
    • First observeddelete_table
    • First observeddelete_toc
    • First observededit_endnote
    • First observededit_footnote
    • First observedfind_text
    • First observedformat_cells
    • First observedformat_text
    • First observedget_comments
    • First observedget_document_info
    • First observedget_headers_footers
    • First observedget_lists
    • First observedget_nested_table
    • First observedget_outline
    • First observedget_protection
    • First observedget_styles
    • First observedget_table
    • First observedget_text
    • First observedget_tracked_changes
    • First observedinsert_bibliography
    • First observedinsert_caption_list
    • First observedinsert_citation
    • First observedinsert_columns
    • First observedinsert_index
    • First observedinsert_paragraphs
    • First observedinsert_rows
    • First observedinsert_toc
    • First observedlist_bookmarks
    • First observedlist_endnotes
    • First observedlist_footnotes
    • First observedlist_images
    • First observedlist_index_entries
    • First observedlist_section_blocks
    • First observedlist_sections
    • First observedlist_sources
    • First observedlist_tables
    • First observedmark_index_entry
    • First observedmerge_cells
    • First observedmove_section
    • First observedread_toc
    • First observedreject_revisions
    • First observedremove_document_protection
    • First observedremove_watermark
    • First observedreplace_image
    • First observedreplace_paragraph_text
    • First observedreply_to_comment
    • First observedresize_image
    • First observedresolve_comment
    • First observedrevision_summary
    • First observedsearch_and_replace
    • First observedset_bibliography_style
    • First observedset_cells
    • First observedset_cells_block
    • First observedset_column_widths
    • First observedset_columns
    • First observedset_document_properties
    • First observedset_document_protection
    • First observedset_footer
    • First observedset_header
    • First observedset_header_row_repeat
    • First observedset_image_alt_text
    • First observedset_line_numbering
    • First observedset_nested_cells
    • First observedset_page_number_format
    • First observedset_paragraph_format
    • First observedset_section_properties
    • First observedset_update_fields_flag
    • First observedsort_table
    • First observedsplit_table
    • First observedunmerge_cells
    • First observedvalidate_document
    • First observedvalidate_notes
    • First observedword_count

TDQS

A4.6/5.0

Scored across 10 tools

Disambiguation4/5

The ten top-level tools target mostly distinct areas such as reading, editing body text, formatting, structure, media, review, references, whole-document operations, and live Word actions. Descriptions explicitly redirect overlapping tasks, but boundaries between word_edit and word_format/word_structure, and between word_document and word_app, can still blur because of live-versus-closed-file routing.

Naming Consistency5/5

The exposed tool names all follow a clean word_<domain> snake_case pattern: word_read, word_edit, word_format, word_structure, word_media, word_review, word_references, word_document, word_app, word_help. Internal op names use some mixed prefixes such as com_ and live_, but the top-level tool naming itself is highly predictable.

Tool Count4/5

Ten top-level category tools is a reasonable count for a broad Word automation server, and each category maps to a recognizable capability area. However, several tools bundle a very large number of operations, so the nominal count understates the true surface complexity.

Completeness5/5

The surface covers document reading, body editing, formatting, tables and lists, media, comments and revisions, citations and references, file assembly, backups, templates, and live Word integration. This is effectively full lifecycle coverage for Word documents, with additional operations indicated behind 'More ops follow'.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers