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‑агентом.
Почему раунды рецензирования отклоняются без фиксированной последовательности?
Раунд рецензирования редко сводится к «добавить комментарий». Он включает: что ещё открыто, кто поднял вопрос, ответ, решение и чистую копию для следующей аудитории. Когда люди делают это вручную, порядок меняется, ответы остаются без подписи, и в следующем черновике теряются комментарии из предыдущего.
Агент, который каждый раз следует одной и той же последовательности, устраняет эту вариативность. Он также оставляет след внутри документа, а не в транскрипте чата, где обычно ищут аудит.
Рабочий процесс, шаг за шагом
Каждый шаг имеет один запрос и один инструмент.
- Найти, что открыто. Запрос: «List the annotations in output/contract_annotated.pdf. Which ones have no replies?». Агент вызывает
get_annotations, который возвращает каждую аннотацию с еёid, типом, сообщением, страницей, ограничивающим прямоугольником, пользователем и ответами. Неотвеченный комментарий — это тот, у которого массивrepliesпуст, поэтому агент фильтрует уже полученный список. - Ответить в ветке. Запрос: «Reply to Maria’s comment that finance approved the terms on 12 March. Sign it as Alex». Агент вызывает
add_replyс параметрамиannotationId,commentиuserName. Имя по умолчаниюmcp-user, поэтому запросите реальное. - Разрешить выполненное. Выберите конвенцию и укажите её в запросе: оставить ветку как запись, удалить аннотацию с помощью
remove_annotationsили отредактировать сообщение черезupdate_annotation, добавив префикс[RESOLVED]. - Перенести раунд в следующий черновик. Запрос: «Export the annotations from the reviewed copy, then import them into contract-v3.pdf». Агент вызывает
export_annotations, который записывает XML‑файл, затемimport_annotations. - Вернуть чистую копию. Запрос: «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 из проверенной копии и импортируйте их в новый черновик. Та же пара инструментов объединяет две версии рецензентов в одну.
Углубиться
- Документация, канонический how‑to: Как запустить цикл рецензирования документа с AI‑агентом
- Хаб документации: GroupDocs.Annotation MCP Server
- Начните здесь: AI‑рецензирование, которое попадает в документ, а не в журнал чата
- Связанное: 3 способа извлечь каждый комментарий из набора документов с MCP
- Связанное: Покажите агенту, что он сделал
- On‑premise и модель безопасности: 3 архитектуры для AI‑обработки документов, и та, что держит файлы внутри вашей сети
- Вопросы: GroupDocs Annotation forum
- Исходный код: GroupDocs.Annotation.Mcp on GitHub