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?

De stap‑voor‑stap versie met configuratie en probleemoplossing staat in de documentatie: Hoe een documentreviewcyclus uit te voeren met een AI‑agent.

Waarom drijven reviewrondes af zonder een vaste volgorde?

Een reviewronde is zelden alleen “een opmerking toevoegen”. Het gaat om: wat nog openstaat, wie het heeft aangekaart, een antwoord, een oplossing, en een schone kopie voor het volgende publiek. Wanneer mensen dit handmatig doen, varieert de volgorde, antwoorden blijven onondertekend, en verliest de volgende versie de opmerkingen van de vorige.

Een agent die elke keer dezelfde volgorde volgt, verwijdert die variatie. Hij laat bovendien een spoor achter in het document in plaats van in een chat‑transcript, waar een audit zou zoeken.

De workflow, stap voor stap

Elke stap heeft één prompt en één tool.

  1. Zoek wat openstaat. Prompt: “Lijst de annotaties in output/contract_annotated.pdf. Welke hebben geen antwoorden?” De agent roept get_annotations aan, die elke annotatie met zijn id, type, bericht, pagina, begrenzingsvak, gebruiker en antwoorden retourneert. Een onbeantwoord commentaar is er één met een lege replies‑array, dus filtert de agent de lijst die hij al heeft.
  2. Reageer in de thread. Prompt: “Reageer op Maria’s opmerking dat finance de voorwaarden op 12 maart heeft goedgekeurd. Onderteken als Alex.” De agent roept add_reply aan met de annotationId, het comment en een userName. De naam standaard mcp-user, dus vraag om een echte naam.
  3. Los op wat gedaan is. Kies een conventie en vermeld deze in de prompt: reageer en laat de thread als record staan, verwijder de annotatie met remove_annotations, of bewerk het bericht met update_annotation zodat het begint met [RESOLVED].
  4. Draag de ronde over naar de volgende versie. Prompt: “Exporteer de annotaties van de gereviewde kopie en importeer ze vervolgens in contract-v3.pdf.” De agent roept export_annotations aan, die een XML‑bestand schrijft, daarna import_annotations.
  5. Lever een schone kopie terug. Prompt: “Verwijder alle annotaties en geef me een schone kopie voor de tegenpartij.” remove_annotations zonder ids wist elke annotatie in een nieuw bestand.

Wat beslist de agent, en wat doet de engine?

Beslissing of actie Agent Engine
Welke opmerkingen een antwoord nodig hebben Leest het resultaat van get_annotations en filtert het Retourneert elke annotatie met id’s, auteurs en antwoorden
Wat het antwoord zegt Stelt het op basis van uw instructie op Slaat het op onder de userName die u hebt opgegeven
Welke resolutieconventie van toepassing is Volgt de regel in uw prompt Past de bewerking of verwijdering toe die gevraagd wordt
Of de ronde voltooid is Rapporteert de aantallen; de mens keurt goed Slaat het resultaat van elke wijziging op in de opslag

De engine beslist nooit wat als opgelost wordt beschouwd. Het annotatiemodel heeft geen resolved‑vlag; resolutie is een conventie die u kiest en in de prompt benoemt.

Waar blijft de mens in de lus?

Twee plaatsen. Voor stap 5, vraag de agent om te vermelden hoeveel annotaties hij gaat verwijderen en wacht op uw antwoord. Het verwijderen van alle annotaties is de enige oproep in de workflow zonder mogelijkheid tot ongedaan maken. Voordat iets buiten het team wordt gedeeld, lees de antwoorden die de agent heeft opgesteld. Annotatietekst komt van andere mensen, dus beschouw een opmerking als inhoud om samen te vatten, niet als instructies voor de agent om op te volgen.

Voorbeeldsessie (verkort)

Dit is een illustratie gebaseerd op het gedocumenteerde gedrag van de tools, geen vastgelegde 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.)

Hoe start ik de server voor Claude, Cursor of Copilot?

Start de Docker‑image met uw documentenmap gemount, en een output‑map die verschilt van de opslagmap:

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

Hetzelfde commando en de dnx GroupDocs.Annotation.Mcp --yes‑alternatief worden uitgelegd in AI review that lands in the document, not in the chat log. De hub‑pagina bevat de registratie voor Claude Desktop, Claude Code, VS Code met GitHub Copilot, Cursor, Windsurf en andere clients.

Eerlijke limieten

  • Evaluatiemodus. Zonder licentie wordt er een proefbadge op de bovenkant van elke pagina geplaatst, wat niet geschikt is om naar een tegenpartij te sturen. Controleer get_license_status vóór een formele review.
  • Elke schrijftool slaat zijn resultaat terug op in de opslag. Een ronde produceert daardoor een keten van bestanden. Vraag de agent om de bestandsnaam van het vorige resultaat door te geven en dat bestand opnieuw te lezen met get_annotations voordat hij iets bewerkt, omdat id’s bij het document horen dat u zojuist hebt gelezen. Stel GROUPDOCS_MCP_OUTPUT_PATH in op een map die anders is dan de opslagmap voordat u bewerkingen op een geproduceerd bestand aaneenschakelt. Met de standaardinstelling (outputs komen in de opslagmap) mislukt de tweede schrijfopdracht met being used by another process; met een aparte output‑map slagen add_reply, update_annotation en remove_annotations op het geproduceerde bestand.
  • Coördinaten worden onveranderd overgenomen. In een opnieuw opgemaakte versie kan een geïmporteerde notitie dicht bij de oorspronkelijke tekst terechtkomen, niet er precies op. Controleer de plaatsing daarna.
  • Voorbeeldweergave op Linux. generate_pages_preview faalt momenteel voor PDF‑bestanden op Linux, inclusief de Docker‑image (TypeInitializationException voor Gdip: System.Drawing.Common wordt niet ondersteund op niet‑Windows platforms); Word‑ en andere Office‑documenten worden wel gerenderd, en op Windows met dnx rendert elk formaat. De andere tien tools blijven onaangetast. De review‑tools in dit bericht gebruiken de preview‑renderer niet.

Veelgestelde vragen

Kan een AI automatisch reageren op opmerkingen in een PDF? Ja. De agent leest de opmerkingen met get_annotations en beantwoordt met add_reply, dat de annotatie‑id, de antwoordtekst en een auteursnaam neemt.

Is er een resolved‑status voor opmerkingen? Nee. De tools hebben geen resolved‑vlag, dus u kiest een conventie, bijvoorbeeld het behouden van de thread, het verwijderen van de annotatie of het voorvoegen van [RESOLVED] aan het bericht.

Kan ik de opmerkingen behouden wanneer het document wordt herzien? Ja. Exporteer de annotaties naar XML vanuit de gereviewde kopie en importeer ze in de nieuwe versie. Hetzelfde paar tools voegt twee reviewers‑kopieën samen tot één.

Dieper ingaan