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: How to run a document review cycle with an AI agent.

Чому раунди перегляду відхиляються без фіксованої послідовності?

Раунд перегляду рідко обмежується лише «додати коментар». Це: що ще залишилося відкритим, хто це підняв, відповідь, рішення та чиста копія для наступної аудиторії. Коли люди роблять це вручну, порядок варіюється, відповіді залишаються без підпису, і наступний чернетка втрачає коментарі з попередньої.

Агент, який щоразу дотримується однієї й тієї ж послідовності, усуває цю варіативність. Він також залишає слід всередині документа, а не в чат‑транскрипті, що саме буде перевіряти аудит.

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

Кожен крок має один запит і один інструмент.

  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 попросіть агента вказати, скільки анотацій він збирається видалити, і дочекайтеся вашої відповіді. Видалення всіх анотацій — це єдиний виклик у робочому процесі без можливості скасування. Перш ніж будь‑що виходить за межі команди, перегляньте відповіді, які підготував агент. Текст анотації походить від інших людей, тому розглядайте коментар як контент для підсумку, а не як інструкцію для агента.

Приклад сесії (скорочений)

This is an illustration built from the documented behavior of the tools, not a captured screenshot.

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 review that lands in the document, not in the chat log. На головній сторінці хабу є реєстрація для 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 усі формати рендеряться. Інші десять інструментів не постраждали. Інструменти перегляду в цьому дописі не використовують рендерер попереднього перегляду.

Питання та відповіді

Чи може ШІ автоматично відповідати на коментарі в PDF? Так. Агент читає коментарі за допомогою get_annotations і відповідає за допомогою add_reply, який приймає id анотації, текст відповіді та ім’я автора.

Чи існує статус «вирішено» для коментарів? Ні. У інструментів немає прапорця resolved, тому ви обираєте конвенцію, наприклад залишати тему, видаляти анотацію або додавати префікс [RESOLVED].

Чи можу я зберегти коментарі при оновленні документа? Так. Експортуйте анотації в XML з переглянутої копії та імпортуйте їх у новий чернеток. Така пара інструментів об’єднує два варіанти рецензій в один.

Поглибити