Uma revisão de documentos com um agente de IA pode seguir os mesmos passos a cada rodada: listar o que está aberto, responder em tópicos, resolver, levar os comentários para o próximo rascunho e produzir uma cópia limpa. O servidor GroupDocs.Annotation.Mcp expõe cada etapa como uma ferramenta, de modo que um LLM no Claude, Cursor ou GitHub Copilot pode executar a rodada localmente enquanto uma pessoa aprova o resultado:

Liste as anotações em output/contract_annotated.pdf. Quais não têm respostas?

A versão passo a passo com configuração e solução de problemas está na documentação: How to run a document review cycle with an AI agent.

Por que as rodadas de revisão se desviam sem uma sequência fixa?

Uma rodada de revisão raramente é “adicionar um comentário”. Ela consiste em: o que ainda está aberto, quem levantou, uma resposta, uma resolução e uma cópia limpa para o próximo público. Quando as pessoas fazem isso manualmente, a ordem varia, as respostas ficam sem assinatura e o próximo rascunho perde os comentários da versão anterior.

Um agente que segue a mesma sequência todas as vezes elimina essa variação. Ele também deixa um rastro dentro do documento em vez de em uma transcrição de chat, que é onde uma auditoria procuraria.

O fluxo de trabalho, passo a passo

Cada etapa tem um prompt e uma ferramenta.

  1. Encontrar o que está aberto. Prompt: “Liste as anotações em output/contract_annotated.pdf. Quais não têm respostas?” O agente chama get_annotations, que devolve cada anotação com seu id, tipo, mensagem, página, caixa delimitadora, usuário e respostas. Um comentário sem resposta tem um array replies vazio, então o agente filtra a lista que já possui.
  2. Responder no tópico. Prompt: “Responda ao comentário da Maria que finanças aprovou os termos em 12 de março. Assine como Alex.” O agente chama add_reply com annotationId, comment e userName. O nome padrão é mcp-user, portanto solicite um nome real.
  3. Resolver o que está concluído. Escolha uma convenção e indique-a no prompt: responder e deixar o tópico como registro, remover a anotação com remove_annotations ou editar a mensagem com update_annotation iniciando com [RESOLVED].
  4. Levar a rodada para o próximo rascunho. Prompt: “Exporte as anotações da cópia revisada e importe-as em contract-v3.pdf.” O agente chama export_annotations, que grava um arquivo XML, e depois import_annotations.
  5. Entregar uma cópia limpa. Prompt: “Remova todas as anotações e me dê uma cópia limpa para a contraparte.” remove_annotations sem ids limpa todas as anotações em um novo arquivo.

O que o agente decide e o que o mecanismo faz?

Decisão ou ação Agente Mecanismo
Quais comentários precisam de resposta Lê o resultado de get_annotations e filtra Retorna todas as anotações com ids, autores e respostas
O que a resposta diz Redige a partir da sua instrução Armazena sob o userName fornecido
Qual convenção de resolução se aplica Segue a regra no seu prompt Aplica a edição ou remoção solicitada
Se a rodada está concluída Relata as contagens; o humano aprova Salva o resultado de cada alteração no armazenamento

O mecanismo nunca decide o que conta como resolvido. O modelo de anotação não possui um sinalizador de resolvido; a resolução é uma convenção que você escolhe e nomeia no prompt.

Onde o ser humano permanece no ciclo?

Em dois momentos. Antes da etapa 5, peça ao agente que informe quantas anotações ele está prestes a remover e aguarde sua resposta. A remoção de todas as anotações é a única chamada no fluxo sem possibilidade de desfazer. Antes que qualquer coisa saia da equipe, revise as respostas que o agente redigiu. O texto da anotação vem de outras pessoas, portanto trate um comentário como conteúdo a resumir, não como instrução para o agente seguir.

Sessão de exemplo (abreviada)

Esta é uma ilustração construída a partir do comportamento documentado das ferramentas, não uma captura de tela.

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.)

Como executo o servidor para Claude, Cursor ou Copilot?

Execute a imagem Docker com a pasta de documentos montada e uma pasta de saída diferente da pasta de armazenamento:

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

O mesmo comando e a alternativa dnx GroupDocs.Annotation.Mcp --yes são explicados em AI review that lands in the document, not in the chat log. A página hub contém o registro para Claude Desktop, Claude Code, VS Code com GitHub Copilot, Cursor, Windsurf e outros clientes.

Limites honestos

  • Modo de avaliação. Sem licença, um selo de avaliação é estampado no topo de cada página, o que não é adequado para enviar a uma contraparte. Verifique get_license_status antes de uma revisão formal.
  • Cada ferramenta de escrita salva seu resultado de volta ao armazenamento. Uma rodada, portanto, produz uma cadeia de arquivos. Instrua o agente a repassar o nome do arquivo do resultado anterior e a reler esse arquivo com get_annotations antes de editar qualquer coisa, pois os ids pertencem ao documento que acabou de ser lido. Defina GROUPDOCS_MCP_OUTPUT_PATH para uma pasta diferente da pasta de armazenamento antes de encadear edições em um arquivo produzido. Com o padrão (saídas vão para a pasta de armazenamento) a segunda gravação falha com being used by another process; com uma pasta de saída separada add_reply, update_annotation e remove_annotations no arquivo produzido funcionam.
  • As coordenadas são mantidas como estão. Em um rascunho reformatado, uma nota importada pode ficar próxima ao texto original, não exatamente sobre ele. Verifique o posicionamento depois.
  • Pré‑visualização no Linux. generate_pages_preview atualmente falha para arquivos PDF no Linux, inclusive na imagem Docker (TypeInitializationException para Gdip: System.Drawing.Common não é suportado em plataformas não‑Windows); documentos Word e outros do Office são renderizados, e no Windows com dnx todos os formatos são renderizados. As outras dez ferramentas não são afetadas. As ferramentas de revisão neste post não utilizam o renderizador de pré‑visualização.

Perguntas frequentes

Um IA pode responder automaticamente a comentários em um PDF? Sim. O agente lê os comentários com get_annotations e responde com add_reply, que recebe o id da anotação, o texto da resposta e um nome de autor.

Existe um status de resolvido para comentários? Não. As ferramentas não possuem sinalizador de resolvido, portanto você define uma convenção, como manter o tópico, remover a anotação ou prefixar a mensagem com [RESOLVED].

Posso manter os comentários quando o documento for revisado? Sim. Exporte as anotações para XML a partir da cópia revisada e importe‑as no novo rascunho. O mesmo par de ferramentas mescla duas cópias de revisores em uma só.

Aprofunde-se