Un flujo de trabajo de revisión de documentos con un agente de IA puede seguir los mismos pasos en cada ronda: enumerar lo que está abierto, responder en hilos, resolver, trasladar los comentarios al siguiente borrador y producir una copia limpia. El servidor GroupDocs.Annotation.Mcp expone cada paso como una herramienta, de modo que un LLM en Claude, Cursor o GitHub Copilot puede ejecutar la ronda localmente mientras una persona aprueba el resultado:

Lista las anotaciones en output/contract_annotated.pdf. ¿Cuáles no tienen respuestas?

La versión paso a paso con configuración y solución de problemas está en la documentación: Cómo ejecutar un ciclo de revisión de documentos con un agente de IA.

¿Por qué las rondas de revisión se desvían sin una secuencia fija?

Una ronda de revisión rara vez es “añadir un comentario”. Es: lo que sigue abierto, quién lo planteó, una respuesta, una resolución y una copia limpia para la siguiente audiencia. Cuando la gente lo hace manualmente, el orden varía, las respuestas quedan sin firmar y el siguiente borrador pierde los comentarios del anterior.

Un agente que sigue la misma secuencia cada vez elimina esa variación. También deja un rastro dentro del documento en lugar de en una transcripción de chat, que es donde una auditoría buscaría.

El flujo de trabajo, paso a paso

Cada paso tiene un prompt y una herramienta.

  1. Encontrar lo que está abierto. Prompt: “Lista las anotaciones en output/contract_annotated.pdf. ¿Cuáles no tienen respuestas?” El agente llama a get_annotations, que devuelve cada anotación con su id, tipo, mensaje, página, cuadro delimitador, usuario y respuestas. Un comentario sin respuesta es aquel cuyo arreglo replies está vacío, por lo que el agente filtra la lista que ya posee.
  2. Responder en el hilo. Prompt: “Responde al comentario de María que finanzas aprobó los términos el 12 de marzo. Firma como Alex.” El agente llama a add_reply con annotationId, comment y userName. El nombre por defecto es mcp-user, así que solicite uno real.
  3. Resolver lo que está concluido. Elija una convención y exprésela en el prompt: responder y dejar el hilo como registro, eliminar la anotación con remove_annotations, o editar el mensaje con update_annotation para que empiece con [RESOLVED].
  4. Trasladar la ronda al siguiente borrador. Prompt: “Exporta las anotaciones de la copia revisada y luego impórtalas en contract-v3.pdf.” El agente llama a export_annotations, que escribe un archivo XML, y después a import_annotations.
  5. Entregar una copia limpia. Prompt: “Elimina todas las anotaciones y dame una copia limpia para la contraparte.” remove_annotations sin ids borra todas las anotaciones y genera un nuevo archivo.

¿Qué decide el agente y qué hace el motor?

Decisión o acción Agente Motor
Qué comentarios necesitan respuesta Lee el resultado de get_annotations y lo filtra Devuelve cada anotación con ids, autores y respuestas
Qué dice la respuesta La redacta a partir de tu instrucción La almacena bajo el userName que proporcionaste
Qué convención de resolución aplicar Sigue la regla indicada en tu prompt Aplica la edición o eliminación solicitada
Si la ronda está terminada Informa los conteos; el humano aprueba Guarda el resultado de cada cambio en el almacenamiento

El motor nunca decide qué se considera resuelto. El modelo de anotación no tiene una bandera de “resuelto”; la resolución es una convención que tú eliges y nombras en el prompt.

¿Dónde se mantiene el humano en el bucle?

En dos lugares. Antes del paso 5, pida al agente que indique cuántas anotaciones está a punto de eliminar y espere su respuesta. La eliminación de todas las anotaciones es la única llamada del flujo de trabajo que no tiene deshacer. Antes de que cualquier cosa salga del equipo, revise las respuestas que el agente redactó. El texto de la anotación proviene de otras personas, así que trate un comentario como contenido a resumir, no como instrucciones para que el agente las siga.

Sesión de ejemplo (abreviada)

Esta es una ilustración construida a partir del comportamiento documentado de las herramientas, no una captura de pantalla.

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

¿Cómo ejecuto el servidor para Claude, Cursor o Copilot?

Ejecute la imagen Docker con la carpeta de documentos montada y una carpeta de salida distinta de la carpeta de almacenamiento:

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

El mismo comando y la alternativa dnx GroupDocs.Annotation.Mcp --yes se explican en AI review that lands in the document, not in the chat log. La página del hub contiene el registro para Claude Desktop, Claude Code, VS Code con GitHub Copilot, Cursor, Windsurf y otros clientes.

Límites honestos

  • Modo de evaluación. Sin una licencia, una insignia de prueba se coloca en la parte superior de cada página, lo que no es apropiado para enviar a una contraparte. Verifique get_license_status antes de una revisión formal.
  • Cada herramienta de escritura guarda su resultado en el almacenamiento. Por lo tanto, una ronda produce una cadena de archivos. Indique al agente que pase el nombre del archivo del resultado anterior y que lo vuelva a leer con get_annotations antes de editar, porque los ids pertenecen al documento que acaba de leer. Establezca GROUPDOCS_MCP_OUTPUT_PATH a una carpeta distinta de la de almacenamiento antes de encadenar ediciones sobre un archivo generado. Con la configuración predeterminada (las salidas van a la carpeta de almacenamiento) la segunda escritura falla con being used by another process; con una carpeta de salida separada add_reply, update_annotation y remove_annotations sobre el archivo producido funcionan correctamente.
  • Las coordenadas se conservan tal cual. En un borrador re‑fluido una nota importada puede quedar cerca de su texto original, no sobre él. Verifique la ubicación después.
  • Vista previa en Linux. generate_pages_preview falla actualmente para archivos PDF en Linux, incluida la imagen Docker (TypeInitializationException para Gdip: System.Drawing.Common no es compatible con plataformas no Windows); los documentos Word y otros de Office se renderizan, y en Windows con dnx todos los formatos se renderizan. Las otras diez herramientas no se ven afectadas. Las herramientas de revisión de este artículo no usan el renderizador de vista previa.

Preguntas frecuentes

¿Puede una IA responder automáticamente a los comentarios en un PDF? Sí. El agente lee los comentarios con get_annotations y responde con add_reply, que recibe el id de la anotación, el texto de la respuesta y un nombre de autor.

¿Existe un estado de “resuelto” para los comentarios? No. Las herramientas no disponen de una bandera de resuelto, por lo que usted elige una convención, como mantener el hilo, eliminar la anotación o prefijar el mensaje con [RESOLVED].

¿Puedo conservar los comentarios cuando el documento se revisa? Sí. Exporte las anotaciones a XML desde la copia revisada e impórtelas en el nuevo borrador. El mismo par de herramientas combina dos copias de revisores en una sola.

Profundizar