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:
Listez les annotations dans output/contract_annotated.pdf. Lesquelles n’ont pas de réponses ?
The step‑by‑step version with config and troubleshooting is in the documentation: Comment exécuter un cycle de révision de document avec un agent IA.
Pourquoi les cycles de révision dérivent-ils sans séquence fixe ?
Un cycle de révision n’est rarement « ajouter un commentaire ». Il s’agit de : ce qui est encore ouvert, qui l’a soulevé, une réponse, une résolution, et une copie propre pour le prochain public. Lorsque les gens le font à la main, l’ordre varie, les réponses restent non signées, et le brouillon suivant perd les commentaires du précédent.
Un agent qui suit la même séquence à chaque fois élimine cette variation. Il laisse également une trace à l’intérieur du document plutôt que dans une transcription de chat, là où un audit s’attendrait à regarder.
Le flux de travail, étape par étape
Each step has one prompt and one tool.
- Find what is open. Prompt: « List the annotations in output/contract_annotated.pdf. Which ones have no replies? » The agent calls
get_annotations, which returns each annotation with itsid, type, message, page, bounding box, user and replies. An unanswered comment is one with an emptyrepliesarray, so the agent filters the list it already holds. - Reply in the thread. Prompt: « Reply to Maria’s comment that finance approved the terms on 12 March. Sign it as Alex. » The agent calls
add_replywith theannotationId, thecommentand auserName. The name defaults tomcp-user, so ask for a real one. - Resolve what is done. Choose a convention and state it in the prompt: reply and leave the thread as the record, remove the annotation with
remove_annotations, or edit the message withupdate_annotationto start with[RESOLVED]. - Carry the round to the next draft. Prompt: « Export the annotations from the reviewed copy, then import them into contract-v3.pdf. » The agent calls
export_annotations, which writes an XML file, thenimport_annotations. - Hand back a clean copy. Prompt: « Remove all annotations and give me a clean copy for the counterparty. »
remove_annotationswithoutidsclears every annotation into a new file.
Que décide l’agent, et que fait le moteur ?
| Décision ou action | Agent | Moteur |
|---|---|---|
| Quels commentaires nécessitent une réponse | Lit le résultat de get_annotations et le filtre |
Renvoie chaque annotation avec ses identifiants, auteurs et réponses |
| Ce que dit la réponse | La rédige à partir de votre instruction | La stocke sous le userName que vous avez fourni |
| Quelle convention de résolution s’applique | Suit la règle dans votre prompt | Applique la modification ou la suppression demandée |
| Si le cycle est terminé | Rapporte les décomptes ; l’humain approuve | Enregistre le résultat de chaque modification dans le stockage |
The engine never decides what counts as resolved. The annotation model has no resolved flag to set; resolution is a convention you choose and name in the prompt.
Où l’humain reste-t-il dans la boucle ?
Deux endroits. Avant l’étape 5, demandez à l’agent d’indiquer combien d’annotations il s’apprête à supprimer et attendez votre réponse. La suppression de toutes les annotations est le seul appel du flux de travail sans possibilité d’annuler. Avant que quoi que ce soit ne quitte l’équipe, lisez les réponses rédigées par l’agent. Le texte des annotations provient d’autres personnes, il faut donc considérer un commentaire comme du contenu à résumer, et non comme des instructions à suivre par l’agent.
Session d’exemple (abrégée)
Il s’agit d’une illustration construite à partir du comportement documenté des outils, et non d’une capture d’écran.
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.)
Comment exécuter le serveur pour Claude, Cursor ou Copilot ?
Exécutez l’image Docker avec votre dossier de documents monté, et un dossier de sortie différent du dossier de stockage :
docker run --rm -i -v $(pwd)/documents:/data \
-e GROUPDOCS_MCP_OUTPUT_PATH=/data/output \
ghcr.io/groupdocs-annotation/annotation-net-mcp:latest
La même commande et l’alternative dnx GroupDocs.Annotation.Mcp --yes sont expliquées dans AI review that lands in the document, not in the chat log. La page hub propose l’enregistrement pour Claude Desktop, Claude Code, VS Code avec GitHub Copilot, Cursor, Windsurf et d’autres clients.
Limites honnêtes
- Mode d’évaluation. Sans licence, un badge d’essai est apposé en haut de chaque page, ce qui n’est pas approprié à envoyer à une contrepartie. Vérifiez
get_license_statusavant une révision officielle. - Chaque outil d’écriture enregistre son résultat dans le stockage. Un cycle produit donc une chaîne de fichiers. Demandez à l’agent de transmettre le nom du fichier du résultat précédent et de relire ce fichier avec
get_annotationsavant de modifier quoi que ce soit, car les identifiants appartiennent au document que vous venez de lire. DéfinissezGROUPDOCS_MCP_OUTPUT_PATHsur un dossier différent de celui du stockage avant d’enchaîner les modifications sur un fichier produit. Avec la valeur par défaut (les sorties atterrissent dans le dossier de stockage) le deuxième écrit échoue avecbeing used by another process; avec un dossier de sortie séparé,add_reply,update_annotationetremove_annotationssur le fichier produit réussissent tous. - Les coordonnées sont conservées telles quelles. Sur un brouillon reformaté, une note importée peut se placer près de son texte original, et non dessus. Vérifiez le placement ensuite.
- Aperçu sous Linux.
generate_pages_previewéchoue actuellement pour les fichiers PDF sous Linux, y compris l’image Docker (TypeInitializationExceptionpourGdip:System.Drawing.Commonn’est pas pris en charge sur les plateformes non Windows) ; les documents Word et autres Office sont rendus, et sous Windows avecdnxtous les formats sont rendus. Les dix autres outils ne sont pas affectés. Les outils de révision de cet article n’utilisent pas le moteur d’aperçu.
FAQ
L’IA peut-elle répondre automatiquement aux commentaires dans un PDF ? Oui. L’agent lit les commentaires avec get_annotations et répond avec add_reply, qui prend l’identifiant de l’annotation, le texte de la réponse et un nom d’auteur.
Existe-t-il un statut résolu pour les commentaires ? Non. Les outils n’ont aucun indicateur de résolution, vous choisissez donc une convention comme conserver le fil, supprimer l’annotation ou préfixer le message avec [RESOLVED].
Puis-je conserver les commentaires lors de la révision du document ? Oui. Exportez les annotations au format XML depuis la copie révisée et importez-les dans le nouveau brouillon. La même paire d’outils fusionne les copies de deux réviseurs en une seule.
Aller plus loin
- Documentation, guide canonique : Comment exécuter un cycle de révision de document avec un agent IA
- Hub de documentation : GroupDocs.Annotation MCP Server
- Commencez ici : AI review that lands in the document, not in the chat log
- Lié : 3 façons d’extraire chaque commentaire d’un ensemble de documents avec MCP
- Lié : Montrez à l’agent ce qu’il a fait
- Modèle sur site et sécurité : 3 architectures pour le traitement de documents IA, et celle qui garde les fichiers à l’intérieur de votre réseau
- Questions : GroupDocs Annotation forum
- Source : GroupDocs.Annotation.Mcp on GitHub