A document review workflow with an AI agent can follow the same steps every round: list what is open, reply in threads, resolve, carry the comments to the next draft, and produce a clean copy. The GroupDocs.Annotation.Mcp server exposes each step as a tool, so an LLM in Claude, Cursor or GitHub Copilot can run the round locally while a person approves the outcome:

List the annotations in output/contract_annotated.pdf. Which ones have no replies?

The step‑by‑step version with config and troubleshooting is in the documentation: Как запустить цикл рецензирования документа с AI‑агентом.

Почему раунды рецензирования отклоняются без фиксированной последовательности?

Раунд рецензирования редко сводится к «добавить комментарий». Он включает: что ещё открыто, кто поднял вопрос, ответ, решение и чистую копию для следующей аудитории. Когда люди делают это вручную, порядок меняется, ответы остаются без подписи, и в следующем черновике теряются комментарии из предыдущего.

Агент, который каждый раз следует одной и той же последовательности, устраняет эту вариативность. Он также оставляет след внутри документа, а не в транскрипте чата, где обычно ищут аудит.

Рабочий процесс, шаг за шагом

Каждый шаг имеет один запрос и один инструмент.

  1. Найти, что открыто. Запрос: «List the annotations in output/contract_annotated.pdf. Which ones have no replies?». Агент вызывает get_annotations, который возвращает каждую аннотацию с её id, типом, сообщением, страницей, ограничивающим прямоугольником, пользователем и ответами. Неотвеченный комментарий — это тот, у которого массив replies пуст, поэтому агент фильтрует уже полученный список.
  2. Ответить в ветке. Запрос: «Reply to Maria’s comment that finance approved the terms on 12 March. Sign it as Alex». Агент вызывает add_reply с параметрами annotationId, comment и userName. Имя по умолчанию mcp-user, поэтому запросите реальное.
  3. Разрешить выполненное. Выберите конвенцию и укажите её в запросе: оставить ветку как запись, удалить аннотацию с помощью remove_annotations или отредактировать сообщение через update_annotation, добавив префикс [RESOLVED].
  4. Перенести раунд в следующий черновик. Запрос: «Export the annotations from the reviewed copy, then import them into contract-v3.pdf». Агент вызывает export_annotations, который записывает XML‑файл, затем import_annotations.
  5. Вернуть чистую копию. Запрос: «Remove all annotations and give me a clean copy for the counterparty». remove_annotations без указания ids очищает все аннотации и сохраняет новый файл.

Что решает агент, а что делает движок?

Решение или действие Агент Движок
Какие комментарии требуют ответа Читает результат get_annotations и фильтрует его Возвращает каждую аннотацию с id, авторами и ответами
Что будет в ответе Формирует его по вашей инструкции Сохраняет под указанным userName
Какая конвенция разрешения применяется Следует правилу, заданному в запросе Выполняет редактирование или удаление, о котором просят
Завершён ли раунд Сообщает подсчёты; человек утверждает Сохраняет результат каждого изменения в хранилище

Движок никогда не решает, что считается «разрешённым». В модели аннотации нет флага resolved; разрешение — это выбранная вами конвенция, указанная в запросе.

Где человек остаётся в цепочке?

В двух местах. Перед шагом 5 попросите агента сообщить, сколько аннотаций он собирается удалить, и дождитесь вашего подтверждения. Удаление всех аннотаций — единственный вызов в рабочем процессе без возможности отмены. Прежде чем что‑то покинет команду, просмотрите ответы, сгенерированные агентом. Текст аннотации исходит от других людей, поэтому рассматривайте комментарий как материал для резюмирования, а не как инструкцию для агента.

Пример сеанса (сокращённый)

Это иллюстрация, построенная на основе задокументированного поведения инструментов, а не захваченный скриншот.

You:   List the annotations in output/contract_annotated.pdf. Which ones have no replies?

Agent: [calls get_annotations on output/contract_annotated.pdf]
       Found 4 annotations. Two have no replies:
       - id 2, page 2, Maria: "Confirm the payment terms with finance."
       - id 4, page 5, Maria: "Delivery date conflicts with Schedule B."

You:   Reply to the first one that finance approved the terms on 12 March.
       Sign it as Alex.

Agent: [calls add_reply: annotationId=2, userName="Alex",
        comment="Finance approved the terms on 12 March."]
       Added reply to annotation 2 in output/contract_annotated.pdf.
       (The agent uses the saved file name in the next call.)

Как запустить сервер для Claude, Cursor или Copilot?

Запустите Docker‑образ, смонтировав папку с документами и указав отдельную папку вывода, отличную от папки хранилища:

docker run --rm -i -v $(pwd)/documents:/data \
  -e GROUPDOCS_MCP_OUTPUT_PATH=/data/output \
  ghcr.io/groupdocs-annotation/annotation-net-mcp:latest

Та же команда и альтернатива dnx GroupDocs.Annotation.Mcp --yes описаны в статье AI‑рецензирование, которое попадает в документ, а не в журнал чата. На странице‑хабе указана регистрация для Claude Desktop, Claude Code, VS Code с GitHub Copilot, Cursor, Windsurf и других клиентов.

Честные ограничения

  • Режим оценки. Без лицензии на каждой странице появляется значок trial, что недопустимо для отправки контрагенту. Проверьте get_license_status перед официальным рецензированием.
  • Каждый инструмент записи сохраняет результат обратно в хранилище. Поэтому раунд образует цепочку файлов. Попросите агента передавать имя файла из предыдущего результата дальше и перечитывать его с помощью get_annotations перед любыми изменениями, потому что id принадлежат только тому документу, который вы только что прочитали. Установите GROUPDOCS_MCP_OUTPUT_PATH в папку, отличную от папки хранилища, перед цепочкой правок над полученным файлом. При значении по умолчанию (вывод в папку хранилища) второй вызов завершится ошибкой being used by another process; при отдельной папке add_reply, update_annotation и remove_annotations над полученным файлом выполняются успешно.
  • Координаты переносятся без изменений. При переработанном черновике импортированная заметка может оказаться рядом с оригинальным текстом, а не непосредственно на нём. Проверьте расположение после импорта.
  • Предпросмотр на Linux. generate_pages_preview сейчас падает для PDF‑файлов на Linux, включая Docker‑образ (TypeInitializationException для Gdip: System.Drawing.Common не поддерживается на платформах, отличных от Windows); Word и другие Office‑документы рендерятся, а на Windows с dnx каждый формат отображается. Остальные десять инструментов не затронуты. Инструменты рецензирования в этом посте не используют рендерер предварительного просмотра.

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

Может ли AI автоматически отвечать на комментарии в PDF? Да. Агент читает комментарии через get_annotations и отвечает с помощью add_reply, передавая id аннотации, текст ответа и имя автора.

Есть ли статус «разрешено» для комментариев? Нет. В инструментах нет флага resolved, поэтому вы выбираете конвенцию, например оставлять ветку, удалять аннотацию или префиксировать сообщение [RESOLVED].

Можно ли сохранить комментарии при изменении документа? Да. Экспортируйте аннотации в XML из проверенной копии и импортируйте их в новый черновик. Та же пара инструментов объединяет две версии рецензентов в одну.

Углубиться