safe-docx
Safe DOCX Suite
English | Español | 简体中文 | Português (Brasil) | Deutsch
safe-docx от UseJunior — используйте агентов кодирования и для работы с документами.
Часть инструментов разработчика UseJunior.
Safe Docx — это TypeScript-стек с открытым исходным кодом для точечного редактирования существующих файлов Microsoft Word .docx. Он создан для рабочих процессов, где агент предлагает изменения, а человеку по-прежнему требуется надежное редактирование документа с сохранением форматирования.
Если вы проверяете контракты с помощью ИИ, самым медленным этапом часто является применение принятых рекомендаций в Word. Safe Docx превращает это в детерминированные вызовы инструментов.
Зачем это нужно
CLI для ИИ-кодинга отлично работают с кодом и текстовыми файлами, но слабы в редактировании существующих (brownfield) файлов .docx. Бизнес- и юридические процессы по-прежнему завязаны на документах Word, поэтому мы создали нативный TypeScript-путь для:
чтения и поиска в существующих документах в форматах, эффективных с точки зрения токенов
выполнения точечных правок без нарушения форматирования
создания чистых/отслеживаемых результатов и артефактов извлечения правок
Миссия: позволить агентам кодирования заниматься и бумажной работой. Safe Docx фокусируется на детерминированных правках существующих файлов Word, где форматирование и семантика проверки должны сохраняться при автоматизации.
Related MCP server: docx-mcp
Позиционирование
Safe Docx оптимизирован для рабочих процессов агентов, которым требуются детерминированные, локальные правки существующих файлов .docx:
типизированные инструменты MCP для редактирования, сравнения, извлечения правок, комментариев, сносок и макета
проверяемое поведение с доказательствами тестирования и артефактами прослеживаемости
распространение среды выполнения TypeScript без необходимости использования Python или LibreOffice для поддерживаемого использования
Safe Docx не предназначен для замены библиотек для генерации .docx с нуля.
Нам доверяют
Юридическая фирма из топ-10 Am Law — многоэтапный конвейер перевода контрактов
Региональная фирма со 150 юристами — обработано более 22 млн токенов разметки контрактов
Gemini CLI — совместимое расширение MCP для редактирования Word
С чего начать
npx -y @usejunior/safe-docxПодробную информацию о настройке и справочник инструментов см. в packages/docx-mcp/README.md.
Пример: Агент редактирует контракт
Когда вы даете задание агенту кодирования (Claude Code, Cursor, Gemini CLI) с установленным Safe Docx, агент делает вызовы инструментов MCP, подобные этим:
User: Edit the NDA at ~/docs/NDA.docx — change the governing law
from "State of New York" to "State of Delaware" and save both
a clean copy and a tracked-changes copy.
Agent calls:
1. read_file(file_path="~/docs/NDA.docx", format="toon")
→ Returns paragraphs with stable IDs: _bk_1, _bk_2, ...
2. grep(file_path="~/docs/NDA.docx", pattern="State of New York")
→ Match in paragraph _bk_47
3. replace_text(
file_path="~/docs/NDA.docx",
target_paragraph_id="_bk_47",
old_string="State of New York",
new_string="State of Delaware",
instruction="Change governing law to Delaware"
)
4. save(
file_path="~/docs/NDA.docx",
save_to_local_path="~/docs/NDA-clean.docx",
tracked_save_to_local_path="~/docs/NDA-tracked.docx",
save_format="both"
)Агент автоматически обрабатывает вызовы инструментов. Вы получаете чистый файл и файл с отслеживаемыми изменениями для проверки человеком.
Быстрый старт MCP
Claude Code
claude mcp add safe-docx -- npx -y @usejunior/safe-docxClaude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"safe-docx": {
"command": "npx",
"args": ["-y", "@usejunior/safe-docx"]
}
}
}Gemini CLI
{
"mcpServers": {
"safe-docx": {
"command": "npx",
"args": ["-y", "@usejunior/safe-docx"]
}
}
}Любой клиент MCP
Команда:
npxАргументы:
["-y", "@usejunior/safe-docx"]Транспорт: stdio
Для чего оптимизирован Safe Docx
Редактирование существующих файлов
.docxЗамена текста и вставка абзацев с сохранением форматирования
Рабочие процессы с комментариями и сносками
Вывод результатов с отслеживаемыми изменениями для проверки (
download,compare_documents)Извлечение правок в виде структурированного JSON (
extract_revisions)
Для чего Safe Docx НЕ оптимизирован
Safe Docx — это не инструментарий для создания документов с нуля.
Если ваша основная потребность — создание новых файлов .docx из шаблонов/программной верстки, используйте пакеты, такие как docx.
Локальная среда выполнения Safe Docx также намеренно пока отклоняет файлы шаблонов Word (.dotx). Преобразуйте шаблон в обычный документ .docx перед открытием здесь.
Семейства документов
Автоматизированное покрытие фикстур в этом репозитории
Фикстуры взаимного NDA в стиле Common Paper
Фикстура взаимного NDA Bonterms
Фикстура письма о намерениях (LOI)
Фикстуры правок соглашений об ограниченном партнерстве ILPA
Разработано для сложных юридических и бизнес-классов .docx
Финансовые формы NVCA
YC SAFE
Инвестиционные меморандумы
Формы заказов и соглашения об оказании услуг
Соглашения об ограниченном партнерстве
Пакеты
@usejunior/docx-core: примитивы + движок сравнения для существующих документов.docx@usejunior/docx-mcp: реализация сервера MCP и интерфейс инструментов@usejunior/safe-docx: каноническое имя установки для конечного пользователя (npx -y @usejunior/safe-docx)@usejunior/safedocx-mcpb: приватный оберточный пакет MCP
Надежность и поверхность доверия
Схемы инструментов генерируются из
packages/docx-mcp/src/tool_catalog.ts.Матрица прослеживаемости OpenSpec:
packages/docx-mcp/src/testing/SAFE_DOCX_OPENSPEC_TRACEABILITY.mdМатрица допущений:
packages/docx-mcp/assumptions.mdРуководство по соответствию:
docs/safe-docx/sprint-3-conformance.md
Часто задаваемые вопросы
Что такое Safe Docx?
TypeScript-стек для редактирования DOCX, предназначенный для рабочих процессов агентов кодирования, которым требуются детерминированные правки существующих документов Word с сохранением форматирования.
Сохраняется ли форматирование при правках?
Это основная цель дизайна. Интерфейс инструментов построен вокруг хирургических операций (replace_text, insert_paragraph, элементы управления макетом), которые максимально сохраняют структуру документа и семантику форматирования.
Требуется ли .NET, Python или LibreOffice при обычном использовании?
Нет. Поддерживаемое использование среды выполнения — JavaScript/TypeScript с jszip + @xmldom/xmldom.
Можно ли генерировать контракты с нуля?
Это не является основной задачей. Для генерации с нуля используйте пакеты, такие как docx.
На каких типах документов это тестировалось в фикстурах репозитория?
Взаимные NDA (включая фикстуры в стиле Common Paper/Bonterms), письма о намерениях и фикстуры правок соглашений об ограниченном партнерстве ILPA.
Это только для юристов?
Нет. Те же проблемы редактирования существующих .docx возникают в HR, закупках, финансах, операционном отделе продаж и других процессах, насыщенных бумажной работой.
С чего мне начать как пользователю MCP?
Используйте @usejunior/safe-docx через npx, затем следуйте примерам настройки в packages/docx-mcp/README.md.
Где можно изучить схемы инструментов?
См. сгенерированный справочник в packages/docx-mcp/docs/tool-reference.generated.md.
Разработка
npm ci
npm run build
npm run lint --workspaces --if-present
npm run test:run
npm run check:spec-coverage
npm run test:coverage:packages
npm run coverage:packages:check
npm run coverage:matrixСм. также
Open Agreements — заполнение стандартных юридических шаблонов с помощью агентов кодирования (NDA, SAFE, NVCA)
Инструменты разработчика UseJunior — страница продукта с вариантами установки и каталогом инструментов
Конфиденциальность
Safe Docx работает полностью на вашем локальном компьютере. Содержимое документов не отправляется на внешние серверы. Подробности см. в нашей Политике конфиденциальности.
Управление
Available Tools
26 toolsaccept_ai_editsADestructive
Selectively accept tracked changes by revision id or author, leaving all other (e.g. third-party reviewer) revisions byte-untouched. Provide revision_ids (array of w:id values) to target specific revisions, or author to accept every revision by one actor. Sweeps document.xml and supported side-story parts (footnotes, endnotes, comments). An ambiguous overlap — a targeted revision structurally containing, or contained by, a non-targeted revision (nested ins/del/move) — hard-errors with code AMBIGUOUS_REVISION_OVERLAP and a structured overlaps list unless normalize_first is set (best-effort, no byte-identical promise).
| Name | Required | Description | Default |
|---|---|---|---|
| author | No | Accept every revision authored by this w:author. Convenience alternative to revision_ids. | |
| file_path | Yes | Path to the DOCX or ODT file. | |
| revision_ids | No | w:id values of the revisions to accept. Mutually preferred over author. | |
| normalize_first | No | Attempt best-effort resolution on an ambiguous (overlapping) revision graph instead of hard-erroring. No byte-identical guarantee. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description adds substantial behavioral detail: non-targeted revisions remain byte-untouched, multiple document parts are swept, and ambiguous overlaps cause a hard-error with a structured error code and overlaps list unless normalize_first is set. This fully discloses the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the main action. It contains necessary detail without redundancy, though it could be slightly more concise in the error handling part.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, destructive effect, error cases) and no output schema, the description covers all essential aspects: operation, parameter usage, scope, error behavior, and options. It is complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining that revision_ids target specific w:id values, author is a convenience alternative, and normalize_first is best-effort with no byte-identical guarantee. This context goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool selectively accepts tracked changes by revision id or author, and specifies the scope (document.xml and side-story parts). It also distinguishes behavior for ambiguous overlaps, making the purpose very specific and distinct from sibling tools like accept_changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use revision_ids vs author, and the normalize_first option for ambiguous overlaps. However, it does not explicitly compare with sibling tool 'accept_changes' to indicate when one should be preferred over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
accept_changesADestructive
Accept all tracked changes in the document body, producing a clean document with no revision markup. Returns acceptance stats.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the DOCX or ODT file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds that it produces a clean document and returns acceptance stats, but it does not elaborate on irreversible changes, performance implications, or what happens if no changes exist. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundant information. The action and key outcomes are front-loaded. Every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description mentions 'returns acceptance stats' but does not specify what stats (count, success, etc.). The tool is destructive, but reversibility or confirmation steps are not mentioned. Slightly incomplete for a decision-critical operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter 'file_path' described as 'Path to the DOCX or ODT file.' The description adds no further meaning (e.g., file format validation, path examples), so it meets the baseline without exceeding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Accept all tracked changes') and clearly identifies the resource (document body) and outcome ('clean document with no revision markup'). It distinguishes this tool from siblings like 'has_tracked_changes' (checking) and 'extract_revisions' (extracting).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It states the action but lacks context on prerequisites, exclusion criteria, or references to other tools like 'delete_comment' or 'batch_edit'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_commentADestructive
Add a comment or threaded reply to a document. Provide target_paragraph_id + anchor_text for root comments, or parent_comment_id for replies. Supports DOCX and ODT (ODT backs comments with office:annotation; threaded replies are DOCX-only). Surface: revisionable + package-mutation — the body-story comment reference is tracked (w:ins), while comment text and author metadata are recorded in the save report non-revision change manifest.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Comment body text. | |
| author | Yes | Comment author name. | |
| initials | No | Author initials (defaults to first letter of author name). | |
| file_path | Yes | Path to the DOCX or ODT file. | |
| anchor_text | No | Text within the paragraph to anchor the comment to. If omitted, anchors to entire paragraph. | |
| parent_comment_id | No | Parent comment ID for threaded replies. | |
| target_paragraph_id | No | Paragraph ID to anchor the comment to (for root comments). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explains beyond annotations: it is revisionable with tracked changes (w:ins) in body-story, and comment text/author metadata recorded in non-revision change manifest. Also notes ODT format behavior (office:annotation). Annotations only indicate destructiveHint=true, so this adds significant value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured: starts with main purpose, then usage patterns, format differences, and behavioral details. Every sentence adds value, though it could be slightly shortened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and complexity of threaded comments vs root, the description covers purpose, parameter use cases, format limitations, and behavioral impact. It does not explain return values, but that is acceptable without an output schema. Slightly more could be done to clarify prerequisites or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining two usage patterns (root vs reply), the effect of omitting anchor_text (anchors to entire paragraph), and defaults for initials. This goes beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool adds comments or threaded replies, distinguishes two modes (root vs reply), and specifies supported formats (DOCX, ODT) with DOCX-only for threaded replies. This distinguishes it from sibling tools like delete_comment or get_comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear instructions on when to use target_paragraph_id+anchor_text versus parent_comment_id, and notes format-specific limitations. However, it does not explicitly state when not to use this tool or compare it to alternatives like batch_edit or insert_paragraph.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_footnoteADestructive
Add a footnote anchored to a paragraph. Optionally position the reference after specific text using after_text. Note: [^N] markers in read_file output are display-only and not part of the editable text used by replace_text. Surface: revisionable + package-mutation — the footnote reference and note text are tracked (w:ins), while footnote-part creation and registration are recorded in the save report non-revision change manifest.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Footnote body text. | |
| file_path | Yes | Path to the DOCX or ODT file. | |
| after_text | No | Text after which to insert the footnote reference. If omitted, appends at end of paragraph. | |
| target_paragraph_id | Yes | Paragraph ID to anchor the footnote to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations ('destructiveHint: true'), the description details revision tracking behavior: footnote reference and text are tracked as insertions, while footnote-part creation is recorded in the save report as non-revision changes. This provides valuable context for AI agent decision-making.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and a note. The first sentence plainly states purpose, the second adds optional parameter. The technical note about revision tracking, while dense, is relevant for transparency. Could be slightly streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers what happens on invocation: tracked changes and save report details. It explains the effect of 'after_text' and the revision behavior, leaving little ambiguity for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra semantics, only clarifying that 'after_text' is optional and used for positioning. No additional depth beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Add') and resource ('footnote anchored to a paragraph'), distinguishing it from sibling tools like 'update_footnote' and 'delete_footnote'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use this tool (to add a footnote) and mentions optional positioning with 'after_text', but lacks explicit guidance on when not to use it or alternatives beyond the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_editADestructive
Single-agent front door for applying multiple edit steps (replace_text, insert_paragraph) to a document in one call. Validates all steps first, rejects conflicts before applying anything, then executes valid steps sequentially. Accepts inline steps or a plan_file_path JSON array. Surface: revisionable — every applied step emits native OOXML tracked changes.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | JSON array of edit steps. Each step needs step_id, operation, and operation-specific fields. | |
| file_path | Yes | Path to the DOCX or ODT file. | |
| plan_file_path | No | Path to a .json file containing an array of edit steps. Mutually exclusive with steps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and readOnlyHint=false. The description adds valuable behavioral details: validates all steps first, rejects conflicts, executes sequentially, and emits tracked changes, going beyond annotation-only information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each adding essential information without redundancy. Purpose, behavior, and outcome are clearly communicated with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: batch operation, validation, conflict handling, and output (tracked changes). However, lacks details on error handling for individual step failures or partial execution, leaving some gaps for complex scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds meaning by explaining that steps can be inline or via plan_file_path, and that each step needs step_id, operation, and operation-specific fields, compensating for the schema's empty items properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is for applying multiple edit steps (replace_text, insert_paragraph) to a document in one call, distinguishing it from individual sibling tools like replace_text and insert_paragraph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It identifies itself as a 'single-agent front door' for batch edits, implying usage for multiple steps. It mentions validation and conflict rejection but does not explicitly state when not to use it or compare to alternatives beyond the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_formattingADestructive
Clear specific run-level formatting (bold, italic, underline, highlight, color, font) from paragraphs. Surface: revisionable — clearing emits a native run-property-change revision (w:rPrChange).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the DOCX or ODT file. | |
| clear_bold | No | Remove bold formatting. | |
| clear_font | No | Remove font family and size. | |
| clear_color | No | Remove font color. | |
| clear_italic | No | Remove italic formatting. | |
| paragraph_ids | No | Paragraph IDs to clear formatting from. If omitted, clears from all paragraphs. | |
| clear_highlight | No | Remove highlight formatting. | |
| clear_underline | No | Remove underline formatting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, but the description adds important context: the operation is revisionable and emits a native run-property-change revision. This goes beyond annotations and helps the agent understand the side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The first sentence states the core function, the second adds behavioral context. Well-structured and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters (1 required) and no output schema, the description covers purpose, behavior (revisionable), and scope (paragraphs). It could mention error conditions or file modification details, but the combination with schema annotations is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with descriptions for all parameters. The description repeats the list of formatting types but adds context about run-level and revisions. Since schema coverage is high, baseline is 3; the description offers moderate added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool clears specific run-level formatting (bold, italic, underline, highlight, color, font) from paragraphs, which is a specific verb+resource. It distinguishes from sibling tools like format_layout which likely deals with layout-level formatting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for clearing run-level formatting but does not explicitly state when to use this tool versus alternatives (e.g., format_layout). No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_fileADestructive
Close an open file session, or close all sessions with explicit confirmation. Supports DOCX, ODT, and Google Docs.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| clear_all | No | ||
| file_path | No | Path to the DOCX or ODT file. | |
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds supported file formats but does not disclose what happens to unsaved changes or other side effects of closing. Some additional behavioral context would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the core purpose. It is front-loaded and contains no unnecessary words, though a bit more structure (e.g., separate lines for usage) could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and the destructive nature, the description is minimal. It does not explain return values, side effects, or parameter interactions. For a closing tool, more detail on what happens after closing (e.g., saving) would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, but the description does not explain any parameter semantics. It does not clarify the roles of clear_all and confirm (which lack schema descriptions), nor does it add meaning beyond the schema for file_path and google_doc_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('close') and resource ('open file session'), and distinguishes from sibling tools like read_file, save, and batch_edit by clearly indicating this is about closing sessions. It also specifies supported file formats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an open file session exists and mentions explicit confirmation for closing all sessions, but provides no when-not guidance or alternatives. It lacks details on prerequisites or comparison to other closing scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_documentsBRead-only
Compare two documents and produce a tracked-changes output document. Provide original_file_path + revised_file_path for standalone comparison, or file_path to compare session edits against the original. DOCX and ODF (.odt) support both modes. DOCX stats count insertions/deletions as contiguous ranges, expose atom totals as insertedAtoms/deletedAtoms, and report formatChanges separately from modifiedParagraphs. ODF compares at inline granularity (a modified paragraph is marked up in place — only the changed spans are struck or inserted).
| Name | Required | Description | Default |
|---|---|---|---|
| author | No | Author name for track changes. Default: 'Comparison' (DOCX) or the configured AI author (ODF). | |
| engine | No | Comparison engine (DOCX only). Default: 'auto'. | |
| file_path | No | Path to the DOCX or ODT file. | |
| revised_file_path | No | Path to the revised DOCX or .odt file. | |
| original_file_path | No | Path to the original DOCX or .odt file. | |
| save_to_local_path | Yes | Path to save the tracked-changes output (DOCX or .odt). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool creates a tracked-changes output file, but annotations include readOnlyHint=true, which indicates the tool should not modify any state. Creating a file is a state modification, constituting a contradiction. The description does not clarify this inconsistency or disclose other behavioral traits like permissions or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise but packed with detail; it front-loads the purpose then segments into mode explanations and format-specific notes. A minor improvement would be to move granular stats to parameter descriptions, but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains input modes and output behavior, but lacks information on the tool's return value (e.g., success message/filename). With no output schema, this is a gap. It also does not clarify handling of conflicting parameters (e.g., providing both original/revised and file_path).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions, but the description adds significant value: it explains the two comparison modes, file-type behaviors (e.g., DOCX atom statistics, ODF inline granularity), and default author/engine values. This enriches parameter understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: comparing two documents and producing a tracked-changes output. It explains two modes (standalone and session edit) and supported formats (DOCX, ODF), distinguishing it from siblings like 'extract_revisions' or 'accept_changes'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (for comparing documents) but does not explicitly state when not to use it or mention alternatives among siblings. It contrasts modes but lacks exclusionary guidance, such as 'use extract_revisions for existing tracked changes'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_odtA
Convert a DOCX document to OpenDocument Text (.odt) using the native model-to-model converter (no LibreOffice involved). Writes the .odt (default: source path with the .odt extension), validates ODF packaging safety before writing, and returns the output path plus a lossiness summary itemizing every downgraded construct. Conversion is semantic and intentionally lossy: text, headings, bold/italic/underline, hyperlinks, lists, and tables are mapped; richer styling, tracked changes, comments, and headers/footers are not. DOCX in, ODT out — Google Docs and .odt inputs are not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | Path to the DOCX or ODT file. | |
| output_path | No | Where to write the .odt. Defaults to the source path with the .odt extension. | |
| allow_overwrite | No | Overwrite output_path if it already exists. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the write operation, safety validation, lossy nature with specific mapped and unmapped constructs, and return values. This goes well beyond the annotations, which only indicate non-read-only and non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each adding essential information. It is front-loaded with the core action and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers inputs, output, processing details, limitations, and return value structure. Without an output schema, it adequately explains what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description adds no extra parameter meaning beyond what the schema provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description precisely states the tool converts DOCX to ODT using a native converter, lists what is preserved and lost, and notes unsupported inputs. It clearly distinguishes from sibling tools like 'export' by specifying the conversion direction and limitations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the input requirement (DOCX) and output format (ODT), and lists unsupported features. However, it does not explicitly state when to avoid this tool or suggest alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_commentADestructive
Delete a comment and all its threaded replies from the document. Cascade-deletes all descendants. Surface: revisionable + package-mutation — the body-story comment reference removal is tracked (w:del), while comment/reply text cleanup is recorded in the save report non-revision change manifest.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the DOCX or ODT file. | |
| comment_id | Yes | Comment ID to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true. The description adds valuable behavioral details: cascade-deletes all descendants and specifics about tracking (w:del, non-revision change manifest). This goes beyond the annotations, disclosing side effects and recording behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each serving a purpose. The first sentence is a clear action, the second adds technical behavioral context. Front-loaded but the second sentence may be dense; still efficient with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with 2 parameters and no output schema, the description covers the core action and side effects. However, it lacks information on error conditions, prerequisites (e.g., file must be open), or what the response looks like, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The tool description does not add extra meaning or syntax details beyond the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a comment and all its threaded replies') and identifies the resource (comment). It distinguishes this tool from siblings like add_comment or get_comments by specifying deletion of threaded replies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for deleting comments but does not explicitly state when to use or avoid this tool, nor does it mention alternatives (e.g., delete_footnote). Some context is given but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_footnoteADestructive
Delete a footnote and its reference from the document. Surface: revisionable — the reference and note text are removed as native OOXML tracked deletions (w:del).
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | Footnote ID to delete. | |
| file_path | Yes | Path to the DOCX or ODT file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds valuable detail: that the deletion is revisionable and performed as native OOXML tracked deletions (w:del), providing transparency beyond the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary action. Every sentence adds value: purpose and technical detail. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 required parameters and no output schema, the description is complete. It explains the core behavior and tracked changes mechanism. Could optionally mention that note_id should come from get_footnotes, but not necessary for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters described in schema). The description adds no additional meaning beyond the schema, but the schema itself is clear. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a footnote and its reference, distinguishing it from sibling tools like add_footnote and update_footnote. The verb 'delete' combined with the resource 'footnote' gives unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided, nor are alternatives mentioned. However, the context from sibling tools makes it clear this is the deletion tool, providing some implicit guidance. Could be improved by noting prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exportA
Export a document to a portable rendering (Markdown, semantic HTML, or plain text). Writes an output file (default: source path with the format extension, e.g. .md, .html, or .txt) and returns its path, byte count, and the rendered content (under content). Intentionally lossy (no round-trip); HTML is the semantic tier, not pixel-faithful. DOCX only — Google Docs is not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: 'markdown' (default, writes .md), 'html' (writes .html), or 'plaintext' (writes .txt). | |
| file_path | No | Path to the DOCX or ODT file. | |
| output_path | No | Where to write the rendering. Defaults to the source path with the format extension. | |
| allow_overwrite | No | Overwrite output_path if it already exists. Default: false. | |
| include_markdown | No | Include the rendered content (under `content`) in the response. Default: true; set false for large documents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (both false), the description details output file writing, return values (path, byte count, content), lossy behavior, and semantic HTML nature. This fully discloses behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with main action, no wasted words. Every sentence provides essential information: purpose, output behavior, and limitations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no output schema, the description covers all needed context: formats, output file behavior, return values, and constraints (DOCX only, lossy). It is fully sufficient for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining default output path behavior and the return of rendered content under 'content', which clarifies the include_markdown parameter's effect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports a document to Markdown, HTML, or plain text. It distinguishes from siblings like convert_to_odt by focusing on rendering formats, and specifies DOCX-only, providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context (DOCX only, not Google Docs) but does not explicitly state when to use this tool over alternatives. However, siblings are distinct, so it is sufficient for guiding usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_revisionsARead-only
Extract tracked changes as structured JSON with before/after text per paragraph, revision details, and comments. Supports pagination via offset and limit. Read-only - does not modify the document.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries per page (1-500). Default: 50. | |
| offset | No | 0-based offset for pagination. Default: 0. | |
| file_path | Yes | Path to the DOCX or ODT file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that the tool is read-only and does not modify the document, which aligns with annotations (readOnlyHint=true). It also describes the output format and pagination behavior, providing helpful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first explains the core function, second adds pagination and read-only status. No wasted words and front-loads key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a good overview of the return format. Parameter details are fully covered in schema. It lacks specifics about error handling or file accessibility, but overall sufficient for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already provides detailed parameter descriptions (offset default 0, limit default 50, max 500). The description only adds that pagination is supported, offering minimal extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it extracts tracked changes as structured JSON with specific details (before/after text, revisions, comments) and supports pagination. This distinguishes it from sibling tools like accept_changes or has_tracked_changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions pagination support and read-only nature, which helps in understanding usage context. However, it does not explicitly state when to use this tool versus alternatives (e.g., for retrieving revision data vs. accepting changes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_layoutADestructive
Apply layout controls (paragraph spacing, table row height, cell padding). Google Docs supports paragraph spacing only. Surface: revisionable — DOCX geometry edits emit native property-change revisions (w:pPrChange/w:trPrChange/w:tcPrChange).
| Name | Required | Description | Default |
|---|---|---|---|
| strict | No | ||
| file_path | No | Path to the DOCX or ODT file. | |
| row_height | No | ||
| cell_padding | No | ||
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit | |
| paragraph_spacing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by detailing that edits are revisionable (emit native property-change revisions) and notes platform-specific behavior. Annotations already indicate destructiveHint=true, and the description adds valuable context about tracked changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the purpose and then add key behavioral context. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters with nested objects, no output schema), the description lacks detail on how to use parameters (e.g., row_indexes, cell_indexes) and the meaning of 'strict'. It does not cover return values or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only file_path and google_doc_id have descriptions). The description does not explain the semantics of parameters like 'strict', 'row_height', 'cell_padding', or 'paragraph_spacing' beyond naming the categories. An agent would need more detail to set these correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies layout controls (paragraph spacing, table row height, cell padding). It differentiates from sibling tools like 'clear_formatting' by focusing on specific layout properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of 'Google Docs supports paragraph spacing only' provides some context about when to use which parameter, but there is no explicit guidance on when to use this tool versus alternatives like 'clear_formatting' or 'insert_paragraph'. Usage context is implied but not fully elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commentsARead-only
Get all comments from the document with IDs, authors, dates, text, and anchored paragraph IDs. Range-anchored DOCX comments also expose optional end_paragraph_id, start_run_index, start_char_offset, end_run_index, and end_char_offset fields describing the covered span. Includes threaded replies (DOCX). Supports DOCX and ODT. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the DOCX or ODT file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description's 'Read-only' is consistent. It adds value by listing specific return fields and mentioning threaded replies and optional range-anchored fields, which go beyond what annotations provide. No contradictions are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two sentences that front-load the core purpose ('Get all comments from the document') and then expand with relevant details. Every sentence adds value without redundancy. It is efficiently structured for quick parsing by an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter, 100% schema coverage, and no output schema, the description sufficiently covers the return values (IDs, authors, dates, text, anchored paragraph IDs, and optional span fields). The mention of threaded replies and supported formats completes the picture for a read-only comment retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a single 'file_path' parameter described as 'Path to the DOCX or ODT file.' The description does not add additional meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb+resource combination ('Get all comments from the document') and lists specific fields (IDs, authors, dates, text, anchored paragraph IDs). It distinguishes itself from sibling tools like add_comment or delete_comment by focusing on retrieval. The mention of range-anchored DOCX comments and threaded replies adds specificity without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it supports DOCX and ODT formats and is read-only, which implicitly guides when to use (read scenarios) versus write operations (e.g., add_comment, delete_comment). It does not explicitly exclude use cases or list alternatives, but the context of sibling tools provides sufficient differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_outlineARead-only
Get a compact structural map of a document's headings (DOCX only). Returns one entry per heading paragraph with its text, outline level, source, and stable _bk_* paragraph_id — so an agent can read the cheap outline first, then scope a targeted read_file/replace_text to the right section instead of scanning the whole body. Style-based (Word HeadingN) headings only by default; set include_heuristic_headings=true to also include heuristic titles/run-in headers. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: 'json' (default, structured outline array) or 'markdown' (indented ATX outline under `content`). | |
| file_path | No | Path to the DOCX file. | |
| include_heuristic_headings | No | When true, also include heuristically-detected headings (manual title / run-in / centered-caps) alongside Word HeadingN styles. Default: false (style-based only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds value beyond annotations by detailing that it returns one entry per heading with text, outline level, source, and paragraph_id, and explains the difference between style-based and heuristic headings. Annotations already declare readOnlyHint=true and destructiveHint=false; description reinforces read-only nature without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no fluff. Every sentence earns its place, efficiently communicating key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description fully explains the return structure and parameter effects. Covers all relevant behavioral aspects for a read-only outline tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (format, file_path, include_heuristic_headings) are explained in the description with additional context on default values and behavior, complementing the schema coverage of 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description specifies verb 'Get', resource 'compact structural map of a document's headings', and includes domain 'DOCX only'. Distinguishes from siblings like read_file and replace_text by targeting outlines specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: 'read the cheap outline first, then scope a targeted read_file/replace_text'. Also states 'DOCX only' and explains the default behavior for style-based vs heuristic headings, providing clear context for agent decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_statusARead-only
Get file/session metadata including edit count, normalization stats, and cache info. Supports DOCX, ODT, and Google Docs.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | Path to the DOCX or ODT file. | |
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating safe read operation. Description adds minimal context about return data (edit count, normalization stats, cache info) but does not elaborate on side effects or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, focused sentence with no extraneous information. Front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately hints at return values. Combined with strong annotations, it provides sufficient context for a simple metadata retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with clear descriptions for both parameters. Description mentions supported formats (DOCX, ODT, Google Docs) which aligns with schema, but adds no additional semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get file/session metadata' with specific examples (edit count, normalization stats, cache info), and mentions supported formats. This distinguishes it from sibling tools like get_comments or get_footnotes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. While it lists supported file types, it does not specify contexts where get_file_status is preferred over other metadata tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_footnotesARead-only
Get all footnotes from the document with IDs, display numbers, text, and anchored paragraph IDs. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the DOCX or ODT file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds 'Read-only' and lists returned data (IDs, display numbers, text, anchored paragraph IDs). Annotations already provide readOnlyHint=true and destructiveHint=false, so description adds minor context beyond annotations but does not contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence efficiently conveys purpose, scope, and data returned with no wasted words. Front-loaded with key action 'Get all footnotes'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, description covers returned data and read-only nature. Lacks error handling or prerequisite info, but is sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with file_path fully described. Description adds no additional parameter information beyond schema, meeting baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Get all footnotes from the document' with specific attributes (IDs, display numbers, text, anchored paragraph IDs), clearly distinguishing it from sibling tools like add_footnote, delete_footnote, update_footnote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description states 'Read-only,' implying no modifications, but does not explicitly contrast with alternatives or provide when-not-to-use scenarios. Lacks explicit guidance relative to siblings, but the read-only nature is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grepARead-only
Search paragraphs with regex. Use file_path for session-based search, file_paths for stateless multi-file search, or google_doc_id for Google Docs. ODT supported via file_path (single-file) only.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | ||
| patterns | No | ||
| file_path | No | Path to the DOCX or ODT file. | |
| file_paths | No | Multiple file paths for stateless multi-file search. No session created. | |
| search_xml | No | When true, search raw XML (word/document.xml) instead of paragraph text. | |
| whole_word | No | ||
| max_results | No | ||
| context_chars | No | ||
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit | |
| case_sensitive | No | ||
| include_context | No | When false, skip document view context (list labels, headers) for faster results. Default: true. | |
| dedupe_by_paragraph | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and destructiveHint, confirming safety. The description adds behavioral context: it searches paragraphs with regex, specifies input modes, and notes ODT-only support via file_path. No contradictions. Additional details about regex flags or output format would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences that front-load the core action ('Search paragraphs with regex') and efficiently convey key usage distinctions. No redundant or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, no output schema, low schema coverage), the description is insufficient. It does not explain return values (e.g., matching paragraphs), result limits, or behavior of regex flags, leaving significant gaps for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (42%), and the description adds meaning to only the file/file-path parameters (file_path, file_paths, google_doc_id) and ODT support. The remaining 7 parameters (e.g., pattern, case_sensitive, max_results) lack description in both schema and tool description, leaving their semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search paragraphs with regex.' It specifies different input modes (file_path, file_paths, google_doc_id) and highlights the ODT limitation, effectively distinguishing it from sibling tools like read_file or replace_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use different input parameters (session-based vs stateless multi-file vs Google Docs) and notes ODT support limitations. However, it lacks explicit guidance on when not to use this tool or alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
has_tracked_changesARead-only
Check whether the document body contains tracked-change markers (insertions, deletions, moves, and property-change records). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the DOCX or ODT file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds which marker types are checked but does not describe the return value or error behavior. Since no output schema exists, this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose, no redundant information. Highly concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple boolean check tool, the description is adequate but omits return type and error cases. Given no output schema, agents may not know if the result is a boolean or something else. However, the parameter is well-documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with a clear description for file_path. The tool description does not add anything beyond that, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks for tracked-change markers with specific types (insertions, deletions, moves, property-change records) and declares it read-only. This distinguishes it from sibling tools like accept_changes or extract_revisions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it doesn't suggest using it before accept_changes or that it's lighter than extract_revisions. The purpose implies usage but is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_paragraphADestructive
Insert a paragraph before/after an anchor paragraph by paragraph id. Supports DOCX, ODT, and Google Docs. (ODT paragraph ids are positional and shift after insertion — re-read before further edits.) Surface: revisionable — DOCX insertions emit native OOXML tracked changes.
| Name | Required | Description | Default |
|---|---|---|---|
| position | No | ||
| file_path | No | Path to the DOCX or ODT file. | |
| new_string | Yes | ||
| instruction | Yes | ||
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit | |
| style_source_id | No | Paragraph _bk_* ID to clone formatting (pPr and template run) from instead of the positional anchor. Falls back to anchor with a warning if not found. | |
| positional_anchor_node_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (readOnlyHint=false) and is destructive (destructiveHint=true). The description adds context about ODT positional ID behavior and DOCX tracked changes, which goes beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences. The first sentence covers the main purpose and mechanism. The second sentence adds important warnings and surface behavior. While efficient, it could be improved with line breaks or bullet points for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and three supported formats, the description covers key constraints (ODT ID shifting, DOCX tracked changes) but leaves parameter semantics vague. It is moderately complete but could include more details on parameter usage and return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 43%, with descriptions only for file_path, google_doc_id, and style_source_id. Required parameters (positional_anchor_node_id, new_string, instruction) lack schema descriptions. The description clarifies positional_anchor_node_id via 'anchor paragraph by paragraph id' but does not explain new_string or instruction. The style_source_id parameter is explained in schema, so the description adds limited value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Insert), the resource (paragraph), the positioning mechanism (before/after an anchor paragraph by paragraph id), and the supported formats (DOCX, ODT, Google Docs). This distinguishes it from sibling tools like add_comment or replace_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies supported document types and gives a critical warning about ODT paragraph IDs being positional and shifting after insertion, advising re-read before further edits. It also mentions that DOCX insertions emit tracked changes. However, it does not explicitly state when to use this tool versus alternatives, earning a 4 instead of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileARead-only
Read document content (DOCX, ODT, or Google Doc). Output is token-limited (~14k tokens) by default with pagination metadata (has_more, next_offset). Use offset/limit to paginate.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max paragraphs to return. When omitted, output is token-limited to ~14k tokens with pagination. | |
| format | No | ||
| offset | No | 1-based paragraph offset for pagination. Negative values count from end. | |
| node_ids | No | ||
| file_path | No | Path to the DOCX or ODT file. | |
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit | |
| show_formatting | No | When true (default), shows inline formatting tags (<b>, <i>, <u>, <highlighting>, <a>). When false, emits plain text with no inline tags. | |
| comment_rendering | No | How to render comments in read_file output. Use "paragraph_notes" (default) for paragraph-local comment threads, "inline_markers" to add `[cm-start:N]`/`[cm-end:N]` milestones in TOON output (combined with the thread blocks), "endnotes" to collect threaded comments into a trailing #COMMENTS block in TOON output, or "none" for the legacy output with no comment rendering. | |
| include_footnotes | No | When true and format="json", attach a `footnotes` array ({id, display_number, text}) to each paragraph node for the footnotes anchored to it. Windowed to the returned slice (a paginated walk returns each footnote exactly once) and counted toward the read token budget. Footnotes with an empty body or no anchored paragraph are excluded — use get_footnotes for the authoritative full enumeration. No effect on TOON/simple output. Ignored for Google Docs and ODT. Default: false. | |
| include_fingerprint | No | When true and format="json", include a portable content_fingerprint ("sha256:nfkc:<32hex>") on each paragraph. Read-only metadata derived from the paragraph's normalized visible text; NOT an edit anchor. Edit tools accept only `_bk_*` IDs. No effect on TOON/simple output. Ignored for Google Docs and ODT. | |
| include_fingerprint_ordinal | No | When true together with include_fingerprint and format="json", add duplicate-disambiguation metadata to each paragraph: `content_fingerprint_ordinal` (1-based document-order position among paragraphs sharing the same content_fingerprint), `content_fingerprint_count_in_document` (total paragraphs sharing it, document-wide even under pagination), and `portable_paragraph_ref` ("<content_fingerprint>#<ordinal>"). Read-only disambiguator, NOT an edit anchor; reordering duplicates may change ordinals. No effect without include_fingerprint, and no effect on TOON/simple output. Ignored for Google Docs and ODT. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds pagination behavior (token limit, has_more, next_offset), which is useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences covering core functionality and pagination. Extremely efficient, no unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers basic purpose and pagination, but doesn't guide on parameter combinations (e.g., format selection, comment rendering). Schema fills many gaps, but description could offer more context for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 82%, so most parameters are well-documented in the schema. The description briefly mentions offset/limit for pagination, reinforcing schema details but adding limited new value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Read document content' and specifies supported file types (DOCX, ODT, Google Doc). The purpose is distinct from sibling tools, though no explicit differentiation is made.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_comments, grep). Does not mention when not to use or contextual scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_ai_editsADestructive
Selectively reject tracked changes by revision id or author (restoring their pre-edit state), leaving all other revisions byte-untouched. Symmetric to accept_ai_edits: provide revision_ids or author, sweeps document.xml and supported side-story parts, and hard-errors on an ambiguous overlap (code AMBIGUOUS_REVISION_OVERLAP with a structured overlaps list) unless normalize_first is set.
| Name | Required | Description | Default |
|---|---|---|---|
| author | No | Reject every revision authored by this w:author. Convenience alternative to revision_ids. | |
| file_path | Yes | Path to the DOCX or ODT file. | |
| revision_ids | No | w:id values of the revisions to reject. Mutually preferred over author. | |
| normalize_first | No | Attempt best-effort resolution on an ambiguous (overlapping) revision graph instead of hard-erroring. No byte-identical guarantee. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds beyond that by detailing the scope ('sweeps document.xml and supported side-story parts'), the guarantee of leaving other revisions byte-untouched, and the error behavior with a specific error code and structured response. This enriches the agent's understanding of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that fronts the core action and constraints, then details error handling and options. It is dense but efficient. Minor room for improvement by breaking into sentences for readability, but no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 4 parameters, the description covers the core behavior, error states, and the normalize_first escape hatch. It does not describe return values, but incomplete for a mutation tool with no output schema. Acceptable given the detail on error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema for parameters; it only restates that revision_ids or author can be used, which is already in the schema. No additional syntax, constraints, or examples are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('reject') and resource ('tracked changes'), clearly stating it restores pre-edit state. It explicitly names the sibling 'accept_ai_edits' as symmetric, distinguishing the tool's purpose from similar operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is the symmetric counterpart to 'accept_ai_edits', and explains the error handling for ambiguous overlaps with an option to normalize. However, it does not explicitly state when NOT to use this tool or offer alternative tools for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_textADestructive
Replace text in a paragraph by provider paragraph id, preserving formatting where supported. Supports DOCX, ODT, and Google Docs. Surface: revisionable — DOCX edits emit native OOXML tracked changes (w:ins/w:del/w:rPrChange).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | Path to the DOCX or ODT file. | |
| new_string | Yes | ||
| old_string | Yes | ||
| instruction | Yes | ||
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit | |
| normalize_first | No | Merge format-identical adjacent runs before searching. Useful when text is fragmented across runs. | |
| target_paragraph_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds that for DOCX, edits emit native OOXML tracked changes. This is valuable behavioral context. However, it doesn't detail what happens for ODT or Google Docs in terms of revision tracking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main action and supported formats. It is efficient with no unnecessary words, though the 'Surfacing' clause could be more integrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 params, destructive, no output schema), the description covers core purpose, format support, and a key behavioral trait. However, it lacks information on return values, error conditions, or behavior for non-DOCX formats. With no output schema, this leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 43% of parameters have schema descriptions, and the tool description adds little beyond the schema. The 'normalize_first' and 'instruction' parameters are not elaborated in the description. The required 'target_paragraph_id' lacks any description, even though the tool description mentions 'by provider paragraph id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Replace text in a paragraph by provider paragraph id'), specifies supported formats (DOCX, ODT, Google Docs), and emphasizes formatting preservation. This strongly distinguishes it from sibling tools like 'batch_edit' or 'insert_paragraph'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description outlines supported formats but provides no explicit guidance on when to use this tool versus alternatives (e.g., when a simple find/replace is needed vs. batch operations). No 'when not to use' or alternative tool mentions are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saveCDestructive
Save document. For DOCX: saves clean and/or tracked changes output. For ODT: saves an .odt package. For Google Docs: checkpoint (default) returns revisionId, or snapshot exports as DOCX. Surface: revisionable — the save report lists both the AI revisions applied and a non-revision change manifest of any package-level mutations (comment/footnote side parts, relationships) that have no tracked-change wrapper.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | Path to the DOCX or ODT file. | |
| save_format | No | ||
| google_doc_id | No | Google Doc ID or URL (alternative to file_path). Extract from URL: docs.google.com/document/d/{ID}/edit | |
| allow_overwrite | No | ||
| clean_bookmarks | No | ||
| save_to_local_path | Yes | ||
| tracked_changes_author | No | ||
| tracked_changes_engine | No | Deprecated and ignored (#126). The redline is now the session's write-time tracked markup, serialized directly — there is no comparison engine to select. Use the compare_documents tool for comparison-based redlines. | |
| fail_on_rebuild_fallback | No | Deprecated and ignored (#126). The default save no longer runs the comparison reconstruction engine, so there is no rebuild fallback to guard against; accepted for backward compatibility only. | |
| tracked_save_to_local_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description adds context about save report contents (AI revisions, package-level mutations) and Google Docs checkpoint vs snapshot. However, it does not explicitly discuss side effects like file overwriting or the impact of the 'allow_overwrite' parameter, which would enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat verbose and jumps between format-specific details. It could be more concise and better structured, but it does front-load the main purpose with 'Save document'. Overall adequate but not streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 10 parameters and no output schema, the description is incomplete. It does not explain the return value (save report) in detail, the difference between checkpoint and snapshot for Google Docs in terms of agent expectations, or how to handle tracked changes versus AI revisions. Missing guidance on when to use this tool versus related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 40%, the description should compensate but fails to explain most parameters. It mentions save_format indirectly via 'clean and/or tracked changes' but does not describe parameters like allow_overwrite, clean_bookmarks, save_to_local_path, or tracked_save_to_local_path. The parameter semantics are largely missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Save document' and elaborates on specific behaviors for DOCX, ODT, and Google Docs, including different save modes (clean/tracked/both) and checkpoint vs snapshot. However, it does not explicitly differentiate from sibling tools like 'export' or 'accept_ai_edits', which have overlapping functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives such as 'export' or 'close_file'. There is no mention of prerequisites, when-not to use, or explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_footnoteADestructive
Update the text content of an existing footnote. Surface: revisionable — note-text changes emit native OOXML tracked changes (w:ins/w:del) inside the footnote body.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | Footnote ID to update. | |
| new_text | Yes | New footnote body text. | |
| file_path | Yes | Path to the DOCX or ODT file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by disclosing that changes emit native OOXML tracked changes (w:ins/w:del). Annotations already show readOnlyHint=false and destructiveHint=true, but the description clarifies the revisionable nature, enhancing transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant information. First sentence states the core purpose; second sentence adds a critical behavioral detail. Every word is purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three simple parameters, no output schema, and clear annotations, the description provides sufficient context. It covers purpose and a key behavioral trait (tracked changes), making it complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to add much. It provides general context but does not elaborate on parameter formats or constraints beyond what is in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates the text content of an existing footnote. It uses a specific verb ('Update') and resource ('footnote'), distinguishing it from siblings like 'add_footnote' and 'delete_footnote'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating footnote text but does not explicitly state when to use this tool versus alternatives or any prerequisites. The behavioral note about tracked changes is helpful but does not provide direct usage guidance.
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. Dates show when Glama detected each change.
5 tool updates
v0.16.0- Added
accept_ai_edits - Added
get_document_outline - Changed
read_file1 field changed- added
Input schema / properties / include_fingerprint_ordinalAdded value: +{ + "description": "When true together with include_fingerprint and format=\"json\", add duplicate-disambiguation metadata to each paragraph: `content_fingerprint_ordinal` (1-based document-order position among paragraphs sharing the same content_fingerprint), `content_fingerprint_count_in_document` (total paragraphs sharing it, document-wide even under pagination), and `portable_paragraph_ref` (\"<content_fingerprint>#<ordinal>\"). Read-only disambiguator, NOT an edit anchor; reordering duplicates may change ordinals. No effect without include_fingerprint, and no effect on TOON/simple output. Ignored for Google Docs and ODT. Default: false.", + "type": "boolean" +}
- Added
reject_ai_edits - Changed
save2 fields changed- changed
Input schema / properties / fail_on_rebuild_fallback / descriptionPrevious value: -"When true, return an error instead of a destructive output if the comparison engine falls back to rebuild mode (which destroys table structure). Default: false."New value: +"Deprecated and ignored (#126). The default save no longer runs the comparison reconstruction engine, so there is no rebuild fallback to guard against; accepted for backward compatibility only." - added
Input schema / properties / tracked_changes_engine / descriptionAdded value: +"Deprecated and ignored (#126). The redline is now the session's write-time tracked markup, serialized directly — there is no comparison engine to select. Use the compare_documents tool for comparison-based redlines."
26 tool updates
v0.12.1- Changed
accept_changes1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
add_comment1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
add_footnote1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Removed
apply_plan - Added
batch_edit - Changed
clear_formatting1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
close_file1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
compare_documents6 fields changed- changed
Input schema / properties / author / descriptionPrevious value: -"Author name for track changes. Default: 'Comparison'."New value: +"Author name for track changes. Default: 'Comparison' (DOCX) or the configured AI author (ODF)." - changed
Input schema / properties / engine / descriptionPrevious value: -"Comparison engine. Default: 'auto'."New value: +"Comparison engine (DOCX only). Default: 'auto'." - changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file." - changed
Input schema / properties / original_file_path / descriptionPrevious value: -"Path to the original DOCX file."New value: +"Path to the original DOCX or .odt file." - changed
Input schema / properties / revised_file_path / descriptionPrevious value: -"Path to the revised DOCX file."New value: +"Path to the revised DOCX or .odt file." - changed
Input schema / properties / save_to_local_path / descriptionPrevious value: -"Path to save the tracked-changes DOCX output."New value: +"Path to save the tracked-changes output (DOCX or .odt)."
- Added
convert_to_odt - Changed
delete_comment1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
delete_footnote1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Added
export - Changed
extract_revisions1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
format_layout1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
get_comments1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
get_file_status1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
get_footnotes1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
grep1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
has_tracked_changes1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Removed
init_plan - Changed
insert_paragraph1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Removed
merge_plans - Changed
read_file4 fields changed- added
Input schema / properties / comment_renderingAdded value: +{ + "description": "How to render comments in read_file output. Use \"paragraph_notes\" (default) for paragraph-local comment threads, \"inline_markers\" to add `[cm-start:N]`/`[cm-end:N]` milestones in TOON output (combined with the thread blocks), \"endnotes\" to collect threaded comments into a trailing #COMMENTS block in TOON output, or \"none\" for the legacy output with no comment rendering.", + "enum": [ + "none", + "paragraph_notes", + "endnotes", + "inline_markers" + ], + "type": "string" +} - changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file." - added
Input schema / properties / include_fingerprintAdded value: +{ + "description": "When true and format=\"json\", include a portable content_fingerprint (\"sha256:nfkc:<32hex>\") on each paragraph. Read-only metadata derived from the paragraph's normalized visible text; NOT an edit anchor. Edit tools accept only `_bk_*` IDs. No effect on TOON/simple output. Ignored for Google Docs and ODT.", + "type": "boolean" +} - added
Input schema / properties / include_footnotesAdded value: +{ + "description": "When true and format=\"json\", attach a `footnotes` array ({id, display_number, text}) to each paragraph node for the footnotes anchored to it. Windowed to the returned slice (a paginated walk returns each footnote exactly once) and counted toward the read token budget. Footnotes with an empty body or no anchored paragraph are excluded — use get_footnotes for the authoritative full enumeration. No effect on TOON/simple output. Ignored for Google Docs and ODT. Default: false.", + "type": "boolean" +}
- Changed
replace_text1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
save1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
- Changed
update_footnote1 field changed- changed
Input schema / properties / file_path / descriptionPrevious value: -"Path to the DOCX file."New value: +"Path to the DOCX or ODT file."
23 tool updates
- First observed
accept_changes - First observed
add_comment - First observed
add_footnote - First observed
apply_plan - First observed
clear_formatting - First observed
close_file - First observed
compare_documents - First observed
delete_comment - First observed
delete_footnote - First observed
extract_revisions - First observed
format_layout - First observed
get_comments - First observed
get_file_status - First observed
get_footnotes - First observed
grep - First observed
has_tracked_changes - First observed
init_plan - First observed
insert_paragraph - First observed
merge_plans - First observed
read_file - First observed
replace_text - First observed
save - First observed
update_footnote
TDQS
Each tool targets a distinct operation or resource: tracked changes, comments, footnotes, formatting, editing, etc. Even similar tools like accept_ai_edits and accept_changes are clearly differentiated by selectivity vs. blanket accept.
Most tools follow a clear verb_noun pattern (e.g., add_comment, delete_footnote, replace_text). A few exceptions like batch_edit (modifier-verb) and grep (command-like) are minor deviations.
26 tools is reasonable for a feature-rich document editing server covering tracked changes, comments, footnotes, formatting, conversion, and export. Each tool serves a clear purpose, and the count is well-scoped.
The tool set covers core lifecycle operations (create, read, update, delete) for text, comments, footnotes, and tracked changes. Minor gaps like lack of explicit paragraph deletion are workable through replace_text.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Generate PDF/DOCX/XLSX/PPTX from templates+JSON. Convert Office/HTML/MD to PDF. Universal templating
Deterministic DOCX/PPTX/XLSX/PDF parser: track changes, comments, headers, footers, merged cells.
Publish drafts to Google Docs for review, then revise and resolve reviewer comments in your AI tool
Markdown in, any format out. PDFs merged, split, watermarked. Runs on our own doc engines.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA powerful Word document processing service based on FastMCP, enabling AI assistants to create, edit, and manage docx files with full formatting support. Preserves original styles when editing content.191-
- AlicenseBqualityDmaintenanceEnables comprehensive management of Microsoft Word documents with 30+ tools for reading, writing, formatting, template merging, image extraction, equation extraction, and style application.241MIT
- AlicenseAqualityAmaintenanceFill standard legal agreement templates (NDAs, SAFEs, NVCA docs, employment, cloud terms) and produce DOCX files.31,57253Apache 2.0
- AlicenseNot gradedqualityCmaintenanceA powerful Word document editing MCP server that provides complete document manipulation capabilities, including creation, editing, formatting, tables, images, and advanced features like footnotes and interface document generation.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/UseJunior/safe-docx'
If you have feedback or need assistance with the MCP directory API, please join our Discord server