UseJunior/safe-docx

UseJunior/safe-docx

от usejunior
Safe Docx — MCP сервер для хирургического редактирования существующих .docx и .odt файлов без потери форматирования. Помогает разработчикам и юристам автоматизировать правки контрактов через ИИ-агентов. Поддерживает отслеживание изменений, комментарии и сноски, сохраняя структуру документа.

Safe Docx

Edit Word and OpenDocument files with coding agents.

CI codecov npm version License: Apache 2.0 GitHub last commit GitHub issues closed

English · Español · 简体中文 · Português · Deutsch

Safe Docx is a local MCP server and CLI for reading, searching, editing, comparing, converting, and saving document files. It preserves DOCX structure and can produce clean or tracked-changes output.

Example

Ask your coding agent:

Edit NDA.docx. Change the governing law from New York to Delaware.
Save a clean copy and a tracked-changes copy. Do not change anything else.

Safe Docx finds the clause, applies the targeted edit, and writes both files for review. The rest of the document stays outside the requested edit.

Follow the complete editing walkthrough.

Comparisons

  • SuperDoc
  • Claude's built-in DOCX editing
  • python-docx
  • DOCX compatibility matrix

Install

npm install --global @usejunior/safe-docx

Then configure your MCP client with the installed executable's absolute path. For Claude Code:

claude mcp add safe-docx -- /absolute/path/to/safe-docx
Antigravity CLI

Add Safe Docx to ~/.gemini/config/mcp_config.json:

Часто задаваемые вопросы

Инструменты были проиндексированы:
accept_ai_edits

Выборочно принимает отслеженные изменения по идентификатору ревизии или автору в сеансе в памяти, оставляя все остальные ревизии (например, стороннего рецензента) нетронутыми на уровне байтов. Не записывает file_path; для сохранения изменения вызовите save. Принимает revision_ids (массив значений w:id) для выбора конкретных ревизий или author для принятия всех ревизий одного автора. Обрабатывает document.xml и поддерживаемые вспомогательные части (сноски, концевые сноски, комментарии). Неоднозначное перекрытие — целевая ревизия, структурно содержащая или содержащаяся в нецелевой ревизии (вложенные ins/del/move) — вызывает жёсткую ошибку с кодом AMBIGUOUS_REVISION_OVERLAP и структурированным списком overlaps, если не задан normalize_first (best-effort, без гарантии побайтовой идентичности).

Параметры
  • authorstring

    Принимает каждую ревизию, созданную этим автором (w:author). Удобная альтернатива указанию revision_ids.

  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • normalize_firstboolean

    Выполняет разрешение наилучшим возможным образом при неоднозначном (перекрывающемся) графе ревизий, вместо жёсткой ошибки. Гарантии побайтовой идентичности нет. По умолчанию: false.

  • revision_idsstring | number[]

    w:id значения ревизий, которые нужно принять. Взаимно предпочтительнее, чем author.

accept_changes

Принимает все поддерживаемые отслеживаемые изменения в теле документа, включая ревизии вставленных и удаленных строк таблицы. Возвращает статистику принятия; unresolvedRowRevisions остается 0 для поддерживаемых маркеров строк.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

add_comment

Добавляет комментарий или вложенный ответ к документу. Принимает target_paragraph_id + anchor_text для корневых комментариев или parent_comment_id для ответов. Поддерживает DOCX и ODT (ODT использует office:annotation для комментариев; вложенные ответы доступны только в DOCX).

Параметры
  • anchor_textstring

    Текст внутри абзаца, к которому привязывается комментарий. Если не указано, привязка идёт ко всему абзацу.

  • authorstringобязательный

    Имя автора комментария.

  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • initialsstring

    Инициалы автора (по умолчанию — первая буква имени автора).

  • parent_comment_idnumber

    ID родительского комментария для веток ответов.

  • target_paragraph_idstring

    Идентификатор абзаца для привязки комментария (для корневых комментариев).

  • textstringобязательный

    Текст комментария.

add_footnote

Добавляет сноску, привязанную к абзацу. Опционально размещает ссылку после заданного текста с помощью after_text. Примечание: маркеры [^N] в выводе read_file предназначены только для отображения и не являются частью редактируемого текста, используемого replace_text.

Параметры
  • after_textstring

    Текст, после которого вставляется ссылка на сноску. Если не указан, она добавляется в конец абзаца.

  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • target_paragraph_idstringобязательный

    Идентификатор абзаца, к которому нужно привязать сноску.

  • textstringобязательный

    Текст сноски.

batch_edit

Применяет несколько шагов редактирования (replace_text, insert_paragraph) к документу за один вызов через единую точку входа для одного агента. Сначала проверяет все шаги, отклоняет конфликты до применения чего-либо, затем последовательно выполняет допустимые шаги. Две подтверждённые источником связанные вставки заголовка/тела могут использовать общий якорь и позицию, когда обе объявляют одинаковый bonded_pair_id и различные значения style_source_id; несвязанные вставки в тот же слот остаются конфликтами. Принимает встроенные шаги или JSON-массив в plan_file_path. Surface: revisionable - каждый применённый шаг создаёт нативные отслеживаемые изменения OOXML.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • plan_file_pathstring

    Путь к файлу .json, содержащему массив шагов редактирования. Взаимоисключающе с steps.

  • stepsobject[]

    JSON-массив шагов редактирования. Каждый шаг требует step_id, operation и поля, специфичные для операции.

clear_formatting

Очищает конкретное форматирование на уровне фрагментов (жирный, курсив, подчеркивание, выделение, цвет, шрифт) из абзацев.

Параметры
  • clear_boldboolean

    В предоставленном тексте нет жирного форматирования. Если вы имели в виду что-то другое, уточните, пожалуйста.

  • clear_colorboolean

    Понял. Мои переводы — это обычный текст без какого-либо цветового форматирования. Если вы хотите, чтобы я перевёл фразу «Remove font color», вот перевод: Убрать цвет шрифта. Если же вы имели в виду что-то другое — уточните, пожалуйста.

  • clear_fontboolean

    Удаляет семейство шрифтов и размер.

  • clear_highlightboolean

    Убрать форматирование выделения.

  • clear_italicboolean

    Удалите курсивное форматирование.

  • clear_underlineboolean

    Удалите форматирование подчёркивания.

  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • paragraph_idsstring[]

    Идентификаторы абзацев, из которых нужно очистить форматирование. Если не указаны, очищается форматирование во всех абзацах.

close_file

Закрывает открытую сессию файла или закрывает все сессии с явным подтверждением. Поддерживает DOCX, ODT и Google Docs.

Параметры
  • clear_allboolean
  • confirmboolean
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

compare_documentsтолько чтение

Сравнивает два документа и создаёт выходной документ с отслеживаемыми изменениями. Принимает original_file_path + revised_file_path для автономного сравнения или file_path для сравнения правок сеанса с оригиналом. DOCX и ODF (.odt) поддерживают оба режима. Выходной документ DOCX всегда использует изменённый архив как основу пакета и публикует помеченные ревизии; селекторы engine, strategy, reconstruction, premerge и refinement не раскрываются. Статистика DOCX считает вставки/удаления как смежные диапазоны, раскрывает итоги tagged-token-v1 как insertedAtoms/deletedAtoms вместе с atomMetricVersion и сообщает formatChanges отдельно от modifiedParagraphs. Когда различие во входном документе DOCX сохраняется в выходном документе без разметки отслеживаемых изменений (например, верхний или нижний колонтитул удалённого раздела или неподдерживаемая топология колонтитулов), ответ включает unrepresented_changes (объекты с полями scope, kind, sectionIndex; для областей header/footer - role, а для области contentControl - идентификатор contentControl: изменённый w:sdtPr/w:sdtEndPr публикуется как изменённые свойства без разметки, поскольку CT_SdtPr не допускает элементов ревизий) плюс одна строка warnings для каждой записи, и сообщение получает статус WARNING. Оба поля отсутствуют, когда не обнаружено ни одного непредставленного изменения, о котором нужно сообщить; детектор охватывает свойства разделов, выбранные истории верхних/нижних колонтитулов и свойства элементов управления содержимым, поэтому их отсутствие не гарантирует отсутствия различий за пределами этой области. ODF сравнивает на уровне инлайновых элементов (изменённый абзац размечается на месте: зачёркиваются или вставляются только изменённые фрагменты).

Параметры
  • authorstring

    Имя автора для отслеживания изменений. По умолчанию: «Comparison» (DOCX) или настроенный ИИ-автор (ODF).

  • compare_movesboolean

    Обнаруживать перемещённое содержимое (только DOCX). По умолчанию: true.

  • file_pathstring

    Путь к файлу DOCX или ODT.

  • ignore_formattingboolean

    Игнорировать различия в форматировании (только DOCX). По умолчанию: false.

  • original_file_pathstring

    Путь к исходному файлу DOCX или .odt.

  • revised_file_pathstring

    Путь к изменённому файлу DOCX или .odt.

  • save_to_local_pathstringобязательный

    Путь для сохранения файла с отслеживанием изменений (DOCX или .odt).

convert_to_odt

Преобразует документ DOCX в OpenDocument Text (.odt) с помощью встроенного конвертера модель-в-модель (без участия LibreOffice). Записывает .odt (по умолчанию: путь источника с расширением .odt), проверяет безопасность упаковки ODF перед записью и возвращает путь к выходному файлу вместе со сводкой lossiness, в которой перечислены все пониженные конструкции. Преобразование семантическое и намеренно с потерями: текст, заголовки, полужирный/курсив/подчёркивание, гиперссылки, списки и таблицы сопоставляются; более богатое оформление, отслеживаемые изменения, комментарии, а также верхние и нижние колонтитулы — нет. DOCX на входе, ODT на выходе — Google Docs и входные .odt не поддерживаются.

Параметры
  • allow_overwriteboolean

    Перезаписывает output_path, если он уже существует. По умолчанию: false.

  • file_pathstring

    Путь к файлу DOCX или ODT.

  • output_pathstring

    Куда записать .odt. По умолчанию используется исходный путь с расширением .odt.

delete_comment

Удаляет комментарий и все его ответы с вложенными обсуждениями из документа. Каскадно удаляет все дочерние элементы.

Параметры
  • comment_idnumberобязательный

    ID комментария для удаления.

  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

delete_footnote

Удаляет сноску и её ссылку из документа.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • note_idnumberобязательный

    ID сноски для удаления.

export

Экспортирует документ в портативное представление (Markdown, семантический HTML или обычный текст). Записывает выходной файл (по умолчанию: путь к исходному файлу с расширением формата, например .md, .html или .txt) и возвращает его путь, размер в байтах и преобразованное содержимое (в поле content). Умышленно с потерями (необратимо); HTML — это семантический уровень, а не пиксельная точность. Только DOCX - Google Docs не поддерживается.

Параметры
  • allow_overwriteboolean

    Перезаписывает output_path, если он уже существует. По умолчанию: false.

  • file_pathstring

    Путь к файлу DOCX или ODT.

  • formatenum

    Формат вывода: 'markdown' (по умолчанию, записывает .md), 'html' (записывает .html) или 'plaintext' (записывает .txt).

  • include_markdownboolean

    Включает отображаемое содержимое (в разделе content) в ответ. По умолчанию: true; устанавливайте false для больших документов.

  • output_pathstring

    Куда записать результат рендеринга. По умолчанию — путь к исходному файлу с расширением формата.

extract_revisionsтолько чтение

Извлекает отслеживаемые изменения в виде структурированного JSON с текстом до/после для каждого абзаца, деталями ревизии и комментариями. Строки таблицы, вставленные или удалённые целиком, и изменения свойств строк (w:trPr > w:ins / w:del / w:trPrChange) возвращаются как записи с областью действия "row", у которых ключом служит первый абзац строки, а ревизии представлены элементами ROW_INSERTION / ROW_DELETION / FORMAT_CHANGE, содержащими идентификатор ревизии, автора и дату. Поддерживает пагинацию через offset и limit. Только чтение - не изменяет документ.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • limitnumber

    Максимум записей на странице (1-500). По умолчанию: 50.

  • offsetnumber

    Смещение для пагинации, отсчитываемое от нуля. По умолчанию: 0.

format_layout

Применяет элементы управления макетом (межстрочный интервал, высота строк таблицы, внутренние отступы ячеек). Google Docs поддерживает только межстрочный интервал.

Параметры
  • cell_paddingobject
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • paragraph_spacingobject
  • row_heightobject
  • strictboolean
format_numbering

Изменяет прямую ссылку на нумерацию одного абзаца тела документа DOCX. Используйте remove=true, чтобы удалить прямой w:numPr, match_paragraph_id, чтобы перенять явную нумерацию другого абзаца, или num_id с ilvl, чтобы сослаться на существующее определение нумерации. Этот инструмент не создает определения нумерации и не изменяет нумерацию, унаследованную от стиля. Эффективные изменения создают нативный w:pPrChange; идентичные запросы не выполняют никаких действий.

Параметры
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • ilvlinteger

    Существующий уровень нумерации для num_id; требует num_id.

  • match_paragraph_idstring

    Копирует полные direct num_id и ilvl этого абзаца в target.

  • num_idstring

    Существующий положительный десятичный w:numId из этого DOCX; требует ilvl.

  • removeboolean

    Устанавливает значение true, чтобы удалить прямой w:numPr целевого абзаца.

  • target_paragraph_idstringобязательный

    Якорь целевого абзаца, возвращаемый read_file.

format_section

Частично обновляет в одном разделе DOCX перезапуск нумерации страниц, размеры/ориентацию страницы или поля, используя отсчитываемый от нуля section_index из get_sections. Результативные вызовы создают один нативный w:sectPrChange и сохраняют топологию раздела, формат нумерации страниц, колонки, тип разрыва и ссылки на верхние и нижние колонтитулы. Ориентация трактуется буквально и не меняет размеры местами автоматически. Этот инструмент не создаёт разделы и не редактирует содержимое верхних и нижних колонтитулов.

Параметры
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • marginsobject

    Частичное обновление полей в twips. Все семь значений обязательны, когда w:pgMar отсутствует.

  • page_number_startinteger

    Неотрицательный номер страницы, с которой начинается этот раздел.

  • page_sizeobject

    Частичное обновление размера страницы. Оба размера нужны, если w:pgSz отсутствует.

  • section_indexintegerобязательный

    Индекс с отсчётом от нуля относительно сессии, который возвращает get_sections.

get_commentsтолько чтение

Получает все комментарии из документа с идентификаторами, авторами, датами, текстом и идентификаторами прикреплённых абзацев. Комментарии DOCX с привязкой к диапазону также предоставляют опциональные поля end_paragraph_id, start_run_index, start_char_offset, end_run_index и end_char_offset, описывающие охваченный диапазон. Включает ответы в виде цепочек (DOCX). Поддерживает DOCX и ODT. Только для чтения.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

get_document_outlineтолько чтение

Получает компактную структурную карту заголовков документа (только DOCX). Каждая запись: {paragraph_id, text, level, source}. Детерминированные источники: word_style, list_metadata и outline_level; они выбираются в указанном порядке приоритета и включены по умолчанию. Эвристические источники: run_in_header, title_with_period, title_with_colon, title_caps_centered и title_bare; установите include_heuristic_headings=true, чтобы их включить. JSON сохраняет уровни 1-9; Markdown ограничивает визуальную глубину ATX до 6. Только для чтения.

Параметры
  • file_pathstring

    Путь к файлу DOCX.

  • formatenum

    Формат вывода: json (по умолчанию, структурированный массив структуры) или markdown (структура ATX с отступами внутри content).

  • include_heuristic_headingsboolean

    Когда значение true, также включает эвристические заголовки (title, run-in, centered-caps) вместе с детерминированными заголовками (word_style, list_metadata, outline_level). По умолчанию: false (только детерминированные источники).

get_file_statusтолько чтение

Получает метаданные файла/сеанса, включая количество правок, статистику нормализации и информацию о кэше. Поддерживает DOCX, ODT и Google Docs.

Параметры
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

get_footnotesтолько чтение

Получает все сноски из документа с идентификаторами, отображаемыми номерами, текстом и идентификаторами привязанных абзацев. Только для чтения.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

get_sectionsтолько чтение

Читает основные разделы документа DOCX в порядке документа. Возвращает значения section_index, отсчитываемые от нуля и относительно текущей сессии, метаданные границ абзаца/тела, нумерацию страниц, размер страницы, поля и ссылки на связи верхних/нижних колонтитулов. Вызывайте снова после любой операции, изменяющей топологию разделов. Только чтение.

Параметры
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

grepтолько чтение

Ищет абзацы с помощью регулярного выражения. Использует file_path для поиска в рамках сессии, file_paths для поиска без сохранения состояния в нескольких файлах или google_doc_id для Google Документов. ODT поддерживается только через file_path (один файл).

Параметры
  • case_sensitiveboolean
  • context_charsnumber
  • dedupe_by_paragraphboolean
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • file_pathsstring[]

    Несколько путей к файлам для поиска по нескольким файлам без сохранения состояния. Сессия не создаётся.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • include_contextboolean

    Когда false, пропускайте контекст просмотра документа (метки списка, заголовки), чтобы результаты были быстрее. По умолчанию: true.

  • max_resultsnumber
  • patternstring
  • patternsstring[]
  • search_xmlboolean

    Если true, выполняется поиск по необработанному XML (word/document.xml), а не по тексту абзаца.

  • whole_wordboolean
has_tracked_changesтолько чтение

Проверяет, содержит ли тело документа маркеры отслеживаемых изменений (вставки, удаления, перемещения и записи об изменении свойств). Только для чтения.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

insert_paragraph

Вставляет абзац до/после опорного абзаца по идентификатору абзаца. Ответы DOCX включают structural_warnings, когда размещение может разрезать иерархию, нарушить уровни списка или перенумеровать список. Поддерживает DOCX, ODT и Google Docs. (Идентификаторы абзацев ODT позиционные и сдвигаются после вставки: перечитайте перед дальнейшими правками.) Surface: revisionable. Вставки DOCX создают нативные отслеживаемые изменения OOXML.

Параметры
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • instructionstringобязательный
  • new_stringstringобязательный
  • positionenum
  • positional_anchor_node_idstringобязательный

    Опорный абзац. Принимает идентификатор _bk_* в формате safe-docx или (только для DOCX) любое другое имя закладки, например, стабильную закладку абзаца хост-приложения, чей диапазон с парным w:id охватывает ровно этот абзац. Точное совпадение имени; точечная закладка или диапазон из нескольких абзацев отклоняется.

  • style_source_idstring

    Якорь абзаца для клонирования форматирования (pPr и шаблонного run) вместо позиционного якоря. Принимает идентификатор _bk_* или (только для DOCX) любое другое имя закладки, чей диапазон, парный по w:id, охватывает ровно один абзац. Если не найдено, возвращается к якорю с предупреждением.

insert_section_break

Вставляет отслеживаемый разрыв раздела DOCX после стабильного абзаца основного текста. Новая граница сохраняет параметры страницы и ссылки на связи верхних и нижних колонтитулов содержащего раздела. Следующий раздел по умолчанию наследует текущие свойства; установите inherit_properties=false, чтобы сбросить свойства, не связанные с отношениями, и при необходимости укажите переопределения номера страницы, размера страницы и полей в new_section. После успешного выполнения снова вызовите get_sections, потому что индексы разделов меняются.

Параметры
  • break_typeenumобязательный

    Поведение OOXML при начале следующего раздела.

  • file_pathstring

    Путь к файлу DOCX или ODT.

  • inherit_propertiesboolean

    Определяет, сохраняет ли следующий раздел текущие свойства, не относящиеся к связям. По умолчанию: true. Ссылки в верхнем/нижнем колонтитуле всегда сохраняются.

  • new_sectionobject

    Необязательные переопределения page-number и page-setup для следующего раздела. Требуется полный размер страницы/поля, когда reset удаляет эти элементы.

  • paragraph_idstringобязательный

    Стабильный идентификатор абзаца, возвращаемый read_file; должен указывать на прямой абзац основного текста, который ещё не завершает раздел.

read_fileтолько чтение

Читает содержимое документа (DOCX, ODT или Google Doc). Вывод по умолчанию ограничен ~14 тысячами токенов, с метаданными пагинации (has_more, next_offset). Используйте offset/limit для пагинации.

Параметры
  • comment_renderingenum

    Как отображать комментарии в выводе read_file. Используйте "paragraph_notes" (по умолчанию) для комментариев, привязанных к абзацам, "inline_markers" для добавления маркеров [cm-start:N]/[cm-end:N] в выводе TOON (в сочетании с блоками обсуждений), "endnotes" для сбора комментариев в отдельный блок #COMMENTS в конце вывода TOON, или "none" для прежнего формата вывода без отображения комментариев.

  • file_pathstring

    Путь к файлу DOCX или ODT.

  • formatenum
  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • include_fingerprintboolean

    Когда значение true и format="json", включайте переносимый content_fingerprint ("sha256:nfkc:<32hex>") для каждого абзаца. Это метаданные только для чтения, полученные из нормализованного видимого текста абзаца; это НЕ якорь редактирования. Инструменты редактирования принимают идентификатор _bk_* или (только для DOCX) любое другое имя закладки, чей диапазон, связанный с w:id, охватывает ровно этот абзац. На вывод TOON это не влияет. Для Google Docs и ODT игнорируется.

  • include_fingerprint_ordinalboolean

    Когда значение true вместе с include_fingerprint и format="json", добавляет метаданные для устранения неоднозначности дубликатов к каждому параграфу: content_fingerprint_ordinal (позиция в порядке документа, начиная с 1, среди параграфов с одинаковым content_fingerprint), content_fingerprint_count_in_document (общее количество таких параграфов во всём документе, даже при разбиении на страницы), и portable_paragraph_ref ("<content_fingerprint>#<ordinal>"). Доступен только для чтения различитель, а не якорь редактирования; изменение порядка дубликатов может изменить порядковые номера. Не действует без include_fingerprint и не влияет на вывод TOON/простой. Игнорируется для Google Docs и ODT. По умолчанию: false.

  • include_footnotesboolean

    Одноразовый вызов + извлечение сносок. Если значение true и format="json", ответ получает массив footnotes верхнего уровня на весь документ — каждая запись содержит {id, display_number, ref_paragraph_ids (массив id абзацев, которые ссылаются на эту сноску), paragraphs[] ({text, tagged_text с тегами форматирования на уровне прогонов, style})} — сохраняется многоабзацность и форматирование внутри сносок (жирный/курсив/цитаты). Этот массив верхнего уровня НЕ встраивается в content[], поэтому инвариант индексации content[] 1:1 сохраняется. Для обратной совместимости к каждому абзацу-якорю также прикрепляется облегчённый массив footnotes ({id, display_number, text}), ограниченный возвращаемым срезом. Если значение true и format="toon", в конец добавляется вспомогательный блок #FOOTNOTES (симметрично #COMMENTS). Сноски с пустым телом или display_number 0 исключаются. На обычный вывод не влияет. Для Google Docs и ODT игнорируется. По умолчанию: false.

  • limitnumber

    Максимальное количество возвращаемых абзацев. Если параметр не задан, вывод ограничивается примерно 14 000 токенов с разбивкой на страницы.

  • node_idsstring[]

    Селекторы абзацев. Каждый принимает безопасный docx-идентификатор _bk_* или (только для DOCX) любое другое имя закладки - например, собственную стабильную закладку абзаца хост-приложения - чей диапазон, связанный с w:id, охватывает ровно один абзац. Требуется точное совпадение имени; точечная закладка или многоабзацный диапазон отклоняются. Возвращаемые строки всегда сообщают канонический идентификатор _bk_* абзаца, даже когда выбор сделан по другому имени закладки; результаты дедуплицируются и возвращаются в порядке документа.

  • offsetnumber

    Смещение абзаца с отсчетом от 1 для постраничной разбивки. Отрицательные значения отсчитываются от конца.

  • show_formattingboolean

    Когда значение равно true (по умолчанию), отображаются строчные теги форматирования (<b>, <i>, <u>, <highlighting>, <a>). Когда значение равно false, выводится обычный текст без строчных тегов.

reject_ai_edits

Выборочно отклоняет отслеживаемые изменения по идентификатору версии или автору в сессии в памяти (восстанавливая их состояние до редактирования), не затрагивая остальные версии ни на байт. Не записывает file_path; вызовите save, чтобы сохранить изменение. Симметрично accept_ai_edits: укажите revision_ids или author, обрабатывает document.xml и поддерживаемые дополнительные части, и выдаёт жёсткую ошибку при неоднозначном перекрытии (код AMBIGUOUS_REVISION_OVERLAP со структурированным списком overlaps), если только не установлен normalize_first.

Параметры
  • authorstring

    Отклоняет каждую правку, созданную этим w:author. Удобная альтернатива revision_ids.

  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • normalize_firstboolean

    Выполняет разрешение наилучшим возможным образом при неоднозначном (перекрывающемся) графе ревизий, вместо жёсткой ошибки. Гарантии побайтовой идентичности нет. По умолчанию: false.

  • revision_idsstring | number[]

    w:id значения ревизий, которые нужно отклонить. Взаимно предпочтительнее, чем author.

replace_text

Заменяет текст в абзаце по идентификатору абзаца провайдера, сохраняя форматирование там, где это поддерживается. Поддерживает DOCX, ODT и Google Docs. Чтобы удалить обычный абзац тела документа DOCX, передайте его полный видимый текст как old_string и пустую строку как new_string: чистое сохранение удаляет абзац, а сохранение с отслеживанием изменений оставляет удаление для проверки. Не используйте этот приём для абзацев, которые содержат свойства раздела, структурно необходимы ячейке таблицы или имеют якоря закладок/комментариев, предварительно не изучив структуру. Поверхность: поддерживает ревизии. Правки DOCX создают нативные отслеживаемые изменения OOXML (w:ins/w:del/w:rPrChange).

Параметры
  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • instructionstringобязательный
  • new_stringstringобязательный
  • normalize_firstboolean

    Объединяйте смежные фрагменты с одинаковым форматированием перед поиском. Полезно, когда текст разбит на фрагменты.

  • old_stringstringобязательный
  • target_paragraph_idstringобязательный

    Якорь абзаца принимает идентификатор _bk_* из safe-docx или, только для DOCX, любое другое имя закладки — например, стабильную закладку абзаца от хост-приложения, — чей диапазон, заданный парой w:id, охватывает ровно один абзац. Требуется точное совпадение имени; закладка-точка или диапазон из нескольких абзацев не принимаются.

save

Сохраняет документ. Для DOCX: сохраняет чистый вывод и/или вывод с отслеживанием изменений. Для ODT: сохраняет пакет .odt. Для Google Docs: контрольная точка (по умолчанию) возвращает revisionId, или снимок экспортирует как DOCX.

Параметры
  • allow_discard_preserved_revisionsboolean

    Явно разрешает чистому артефакту автоматически принимать оставшиеся правки от ИИ-автора сессии после того, как accept_ai_edits/reject_ai_edits выборочно оставили правки неразрешенными. По умолчанию: false.

  • allow_overwriteboolean
  • clean_bookmarksboolean

    Управляет удалением внутренних закладок из вывода DOCX. Поведение намеренно трёхвариантное: OMIT (рекомендуется для отслеживаемых/сохраняемых версий) сохраняет собственные закладки документа — удаляются только безопасные якоря абзацев (_bk_*). Явный true дополнительно убирает закладки областей редактирования (edit-*), чтобы получить чистый результат; не передавайте его, когда отслеживаемый вывод идёт в конвейер отслеживания изменений, иначе это воспроизведёт потерю якорей edit-* из версии до #609. false сохраняет все закладки. Отсутствие параметра не эквивалентно true — разница именно в том, сохраняются ли исходные закладки edit-*.

  • fail_on_rebuild_fallbackboolean

    Устарело и игнорируется (#126). Сохранение по умолчанию больше не запускает движок реконструкции сравнения, поэтому нет резервного механизма пересборки, от которого нужно защищаться; оставлено только для обратной совместимости.

  • file_pathstring

    Путь к файлу DOCX или ODT.

  • google_doc_idstring

    Google Doc ID или URL (альтернатива file_path). Извлекается из URL: docs.google.com/document/d/{ID}/edit

  • save_formatenum
  • save_to_local_pathstringобязательный
  • tracked_changes_authorstring
  • tracked_changes_engineenum

    Устарело и игнорируется (#126). Теперь красная линия — это разметка отслеживания изменений на момент записи сессии, сериализованная напрямую, нет механизма сравнения для выбора. Используйте инструмент compare_documents для сравнения на основе красных линий.

  • tracked_save_to_local_pathstring
update_footnote

Обновляет текстовое содержимое существующей сноски.

Параметры
  • file_pathstringобязательный

    Путь к файлу DOCX или ODT.

  • new_textstringобязательный

    Новый текст тела сноски.

  • note_idnumberобязательный

    Идентификатор сноски для обновления.

0.25.0основная
0.24.0
0.23.1
0.23.0
0.22.1
0.22.0
0.21.3
0.21.2
0.19.1
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.1
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.0.1

Выберите клиент, чтобы установить UseJunior/safe-docx:

Любой клиент

Конфиг добавления MCP сервера стандартный, обычно он не меняется вообще, поэтому подходит практически к любому ИИ клиенту, поддерживающему MCP.

{
  "mcpServers": {
    "usejunior-safe-docx-l5tq72juph": {
      "command": "npx",
      "args": [
        "-y",
        "@usejunior/safe-docx"
      ]
    }
  }
}
CursorCursor

Перейдите по ссылке и сервер автоматически будет добавлен в Cursor. Либо откройте/создайте файл ~/.cursor/mcp.json(%USERPROFILE%\.cursor\mcp.json на Windows) и добавьте конфиг сервера:

{
  "mcpServers": {
    "usejunior-safe-docx-l5tq72juph": {
      "command": "npx",
      "args": [
        "-y",
        "@usejunior/safe-docx"
      ]
    }
  }
}
VS Code

Создайте .vscode/mcp.json в проекте (ключ верхнего уровня — servers):

{
  "servers": {
    "usejunior-safe-docx-l5tq72juph": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@usejunior/safe-docx"
      ]
    }
  }
}

Либо добавьте сервер через терминал:

code --add-mcp "{\"name\":\"usejunior-safe-docx-l5tq72juph\",\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"-y\",\"@usejunior/safe-docx\"]}"
ClaudeClaude Desktop

Откройте Settings → Developer → Edit Config — это откроет файл claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Впишите сервер и полностью перезапустите Claude Desktop:

{
  "mcpServers": {
    "usejunior-safe-docx-l5tq72juph": {
      "command": "npx",
      "args": [
        "-y",
        "@usejunior/safe-docx"
      ]
    }
  }
}
Claude CodeClaude Code

Добавьте сервер одной командой в терминале:

claude mcp add usejunior-safe-docx-l5tq72juph -- npx -y @usejunior/safe-docx

Либо через JSON-конфиг:

claude mcp add-json usejunior-safe-docx-l5tq72juph "{\"command\":\"npx\",\"args\":[\"-y\",\"@usejunior/safe-docx\"]}"
CodexCodex

Добавьте сервер командой в терминале:

codex mcp add usejunior-safe-docx-l5tq72juph -- npx -y @usejunior/safe-docx

Либо вручную в ~/.codex/config.toml(%USERPROFILE%\.codex\config.toml на Windows):

[mcp_servers.usejunior-safe-docx-l5tq72juph]
command = "npx"
args = ["-y", "@usejunior/safe-docx"]
PerplexityPerplexity

MCP доступен подписчикам Perplexity Pro / Max / Enterprise. Локальные серверы — только в приложении для macOS.

  1. Откройте Настройки аккаунта → Connectors.
  2. Установите вспомогательное приложение PerplexityXPC (один раз).
  3. Нажмите Add Connector → вкладка Simple.
  4. В поле Server Name укажите UseJunior/safe-docx, а в поле команды запуска — строку ниже:
npx -y @usejunior/safe-docx

Нажмите Save и дождитесь статуса Running.

WindsurfWindsurf

Откройте Windsurf Settings → Cascade → MCP Servers или отредактируйте файл ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "usejunior-safe-docx-l5tq72juph": {
      "command": "npx",
      "args": [
        "-y",
        "@usejunior/safe-docx"
      ]
    }
  }
}
ClineCline

В панели Cline нажмите иконку MCP Servers → Configure → Configure MCP Servers (или отредактируйте ~/.cline/mcp.json) и добавьте сервер:

{
  "mcpServers": {
    "usejunior-safe-docx-l5tq72juph": {
      "command": "npx",
      "args": [
        "-y",
        "@usejunior/safe-docx"
      ],
      "disabled": false,
      "autoApprove": []
    }
  }
}
Continue

Создайте файл в .continue/mcpServers/ (например usejunior-safe-docx-l5tq72juph.yaml) или добавьте блок в config.yaml. MCP работает только в режиме agent:

mcpServers:
  - name: usejunior-safe-docx-l5tq72juph
    command: npx
    args:
      - "-y"
      - "@usejunior/safe-docx"
Zed

Выполните agent: add context server или откройте настройки (zed: open settings file) и добавьте сервер в объект context_servers:

{
  "context_servers": {
    "usejunior-safe-docx-l5tq72juph": {
      "command": "npx",
      "args": [
        "-y",
        "@usejunior/safe-docx"
      ]
    }
  }
}

Похожие MCP-сервера

SecurityRonin/docx-mcp

SecurityRonin/docx-mcp

от securityronin

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

Python⭐ 65
vivekvells/mcp-pandoc

vivekvells/mcp-pandoc

от vivekvells

Конвертирует документы между Markdown, PDF, DOCX и другими через Pandoc. Работает с файлами и текстом, сохраняет оформление.

Python⭐ 583
AryanBV/pdf-toolkit-mcp

AryanBV/pdf-toolkit-mcp

от aryanbv

MCP сервер с 22 инструментами для чтения, создания и редактирования PDF с AES-256 шифрованием. Умеет создавать PDF из Markdown, рендерить страницы для vision-моделей и заполнять формы. Работает чер...

TypeScript⭐ 11
mrjoshuak/godoc-mcp

mrjoshuak/godoc-mcp

от mrjoshuak

MCP-сервер для быстрого доступа к документации Go-пакетов. Он помогает LLM понимать код без чтения целых файлов, экономя токены. Полезен Go-разработчикам, использующим ИИ-ассистентов.

Go⭐ 125
FacundoLucci/plsreadme

FacundoLucci/plsreadme

от facundolucci

MCP сервер plsreadme превращает markdown в красивые веб-страницы и создаёт ссылки для шаринга. Помогает разработчикам и редакторам публиковать README, PRD и заметки. Работает с AI-редакторами (Claude, Cursor), поддерживает комментирование и версионирование.

TypeScript⭐ 4
laradji/deadzone

laradji/deadzone

от laradji

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

Go⭐ 4
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин