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.
Dlaczego rundy przeglądu dryfują bez ustalonej kolejności?
Runda przeglądu rzadko polega jedynie na „dodaniu komentarza”. To jest: co nadal jest otwarte, kto to podniósł, jaka jest odpowiedź, jakie jest rozwiązanie i czysta kopia dla kolejnego odbiorcy. Gdy ludzie robią to ręcznie, kolejność się zmienia, odpowiedzi są niepodpisane, a kolejny projekt traci komentarze z poprzedniego.
Agent, który za każdym razem podąża tą samą sekwencją, eliminuje tę zmienność. Pozostawia także ślad wewnątrz dokumentu zamiast w transkrypcji czatu, czyli tam, gdzie audytor będzie szukał.
Przebieg pracy, krok po kroku
Każdy krok ma jedną podpowiedź i jedno narzędzie.
- Znajdź, co jest otwarte. Prompt: „List the annotations in output/contract_annotated.pdf. Which ones have no replies?” Agent wywołuje
get_annotations, które zwraca każdą adnotację wraz z jejid, typem, wiadomością, stroną, ramką, użytkownikiem i odpowiedziami. Nieodpowiedziany komentarz to taki, którego tablicarepliesjest pusta, więc agent filtruje listę, którą już posiada. - Odpowiedz w wątku. Prompt: „Reply to Maria’s comment that finance approved the terms on 12 March. Sign it as Alex.” Agent wywołuje
add_replyz parametramiannotationId,commentiuserName. Domyślnie nazwa tomcp-user, więc podaj prawdziwą. - Rozwiąż to, co jest gotowe. Wybierz konwencję i podaj ją w promptcie: odpowiedz i pozostaw wątek jako zapis, usuń adnotację przy pomocy
remove_annotationslub edytuj wiadomość przy pomocyupdate_annotation, zaczynając od[RESOLVED]. - Przenieś rundę do kolejnego projektu. Prompt: „Export the annotations from the reviewed copy, then import them into contract-v3.pdf.” Agent wywołuje
export_annotations, które zapisuje plik XML, a następnieimport_annotations. - Zwróć czystą kopię. Prompt: „Remove all annotations and give me a clean copy for the counterparty.”
remove_annotationsbez podaniaidsusuwa wszystkie adnotacje i tworzy nowy plik.
Co decyduje agent, a co robi silnik?
| Decyzja lub akcja | Agent | Silnik |
|---|---|---|
| Które komentarze wymagają odpowiedzi | Czyta wynik get_annotations i filtruje go |
Zwraca każdą adnotację z id, autorami i odpowiedziami |
| Co ma zawierać odpowiedź | Tworzy ją na podstawie Twojej instrukcji | Zapisuje ją pod podanym userName |
| Która konwencja rozwiązania ma zastosowanie | Stosuje regułę z Twojego promptu | Wykonuje edycję lub usunięcie, o które poproszono |
| Czy runda jest zakończona | Raportuje liczby; człowiek zatwierdza | Zapisuje wynik każdej zmiany w pamięci |
Silnik nigdy nie decyduje, co uznaje się za rozwiązane. Model adnotacji nie posiada flagi „resolved”; rozwiązanie to konwencja, którą wybierasz i podajesz w promptcie.
Gdzie człowiek pozostaje w pętli?
Dwa miejsca. Przed krokiem 5 poproś agenta, aby podał liczbę adnotacji, które zamierza usunąć, i poczekaj na Twoją odpowiedź. Usunięcie wszystkich adnotacji jest jedynym wywołaniem w przebiegu, którego nie da się cofnąć. Zanim cokolwiek opuści zespół, przeczytaj odpowiedzi, które agent przygotował. Tekst adnotacji pochodzi od innych osób, więc traktuj komentarz jako treść do podsumowania, a nie jako instrukcję dla agenta.
Przykładowa sesja (skrócona)
To ilustracja oparta na udokumentowanym zachowaniu narzędzi, a nie zrzut ekranu.
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.)
Jak uruchomić serwer dla Claude, Cursor lub Copilot?
Uruchom obraz Dockera z zamontowanym folderem dokumentów oraz folderem wyjściowym różnym od folderu przechowywania:
docker run --rm -i -v $(pwd)/documents:/data \
-e GROUPDOCS_MCP_OUTPUT_PATH=/data/output \
ghcr.io/groupdocs-annotation/annotation-net-mcp:latest
Ten sam polecenie oraz alternatywa dnx GroupDocs.Annotation.Mcp --yes są opisane w AI review that lands in the document, not in the chat log. Strona hub zawiera rejestrację dla Claude Desktop, Claude Code, VS Code z GitHub Copilot, Cursor, Windsurf i innych klientów.
Szczere ograniczenia
- Tryb ewaluacji. Bez licencji na każdej stronie pojawia się znaczek próbny, co nie jest odpowiednie do wysyłki do kontrahenta. Sprawdź
get_license_statusprzed formalnym przeglądem. - Każde narzędzie zapisuje wynik z powrotem w pamięci. Dlatego runda tworzy łańcuch plików. Powiedz agentowi, aby przekazywał nazwę pliku z poprzedniego wyniku dalej i ponownie odczytał ten plik przy pomocy
get_annotationsprzed edycją, ponieważidnależą do dokumentu, który właśnie odczytał. UstawGROUPDOCS_MCP_OUTPUT_PATHna folder inny niż folder przechowywania, zanim połączysz edycje na wyprodukowanym pliku. Przy domyślnym ustawieniu (wyjścia trafiają do folderu przechowywania) drugi zapis kończy się błędembeing used by another process; przy oddzielnym folderzeadd_reply,update_annotationiremove_annotationsna wyprodukowanym pliku działają poprawnie. - Współrzędne przenoszą się bez zmian. W przetworzonym projekcie zaimportowana notatka może wylądować w pobliżu oryginalnego tekstu, a nie dokładnie na nim. Sprawdź pozycję po imporcie.
- Podgląd na Linuksie.
generate_pages_previewobecnie nie działa dla plików PDF na Linuksie, w tym w obrazie Dockera (TypeInitializationExceptiondlaGdip:System.Drawing.Commonnie jest wspierany na platformach nie‑Windows); dokumenty Word i inne pliki Office są renderowane, a na Windows zdnxkażdy format się wyświetla. Pozostałe dziesięć narzędzi nie jest dotkniętych. Narzędzia przeglądowe opisane w tym poście nie korzystają z renderera podglądu.
FAQ
Czy AI może automatycznie odpowiadać na komentarze w pliku PDF? Tak. Agent odczytuje komentarze przy pomocy get_annotations i odpowiada przy pomocy add_reply, które przyjmuje identyfikator adnotacji, tekst odpowiedzi i nazwę autora.
Czy istnieje status „rozwiązane” dla komentarzy? Nie. Narzędzia nie mają flagi rozwiązania, więc wybierasz konwencję, np. pozostawienie wątku, usunięcie adnotacji lub poprzedzenie wiadomości [RESOLVED].
Czy mogę zachować komentarze przy kolejnej wersji dokumentu? Tak. Wyeksportuj adnotacje do XML z przeglądanego egzemplarza i zaimportuj je do nowego projektu. Ten sam zestaw narzędzi łączy dwie wersje recenzentów w jedną.
Idź głębiej
- Dokumentacja, kanoniczny przewodnik: How to run a document review cycle with an AI agent
- Centrum dokumentacji: GroupDocs.Annotation MCP Server
- Zacznij tutaj: AI review that lands in the document, not in the chat log
- Powiązane: 3 ways to extract every comment from a document set with MCP
- Powiązane: Show the agent what it did
- Model on‑premise i bezpieczeństwo: 3 architectures for AI document processing, and the one that keeps files inside your network
- Pytania: GroupDocs Annotation forum
- Źródło: GroupDocs.Annotation.Mcp on GitHub