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.

لماذا تنحرف جولات المراجعة دون تسلسل ثابت؟

جولة المراجعة نادراً ما تكون مجرد “إضافة تعليق”. إنها تشمل ما يزال مفتوحًا، من أشار إليه، الجواب، الحل، ونسخة نظيفة للجمهور التالي. عندما يقوم الأشخاص بذلك يدويًا، يتغير الترتيب، وتكون الردود غير موقعة، وتفقد المسودة التالية التعليقات من السابقة.

وكيل يتبع نفس التسلسل في كل مرة يزيل هذا التباين. كما يترك أثرًا داخل المستند بدلاً من سجل الدردشة، وهو ما سيبحث عنه المراجعة.

سير العمل، خطوة بخطوة

كل خطوة لها موجه واحد وأداة واحدة.

  1. اكتشاف ما هو مفتوح. الموجه: “قائمة التعليقات في output/contract_annotated.pdf. أيها لا يحتوي على ردود؟” الوكيل يستدعي get_annotations، التي تُرجع كل تعليق مع id، النوع، الرسالة، الصفحة، الصندوق المحيط، المستخدم والردود. التعليق غير المجاوب هو الذي يحتوي على مصفوفة replies فارغة، لذا يقوم الوكيل بترشيح القائمة التي لديه بالفعل.
  2. الرد في السلسلة. الموجه: “رد على تعليق ماريا بأن المالية وافقت على الشروط في 12 مارس. وقع باسم أليكس.” الوكيل يستدعي add_reply مع annotationId، comment وuserName. الاسم الافتراضي هو mcp-user، لذا اطلب اسمًا حقيقيًا.
  3. حل ما تم إنجازه. اختر اتفاقية واذكرها في الموجه: رد واترك السلسلة كسجل، احذف التعليق باستخدام remove_annotations، أو حرّر الرسالة بـ update_annotation لتبدأ بـ [RESOLVED].
  4. نقل الجولة إلى المسودة التالية. الموجه: “صدّر التعليقات من النسخة المُراجَعة، ثم استوردها إلى contract-v3.pdf.” الوكيل يستدعي export_annotations التي تكتب ملف XML، ثم import_annotations.
  5. تسليم نسخة نظيفة. الموجه: “احذف جميع التعليقات وأعطني نسخة نظيفة للطرف المقابل.” remove_annotations بدون ids يمسح كل التعليقات في ملف جديد.

ماذا يقرر الوكيل، وماذا يفعل المحرك؟

القرار أو الإجراء الوكيل المحرك
أي التعليقات تحتاج إلى إجابة يقرأ نتيجة get_annotations ويرشحها يُرجع كل التعليقات مع المعرفات والمؤلفين والردود
ما سيقوله الرد يصيغه بناءً على تعليماتك يخزّنه تحت userName الذي قدمته
أي اتفاقية حل تُطبق يتبع القاعدة في موجهك يطبق التعديل أو الحذف المطلوب
ما إذا كانت الجولة انتهت يبلّغ عن الأعداد؛ يوافق الإنسان يحفظ نتيجة كل تعديل في التخزين

المحرك لا يقرر أبدًا ما يُعد مُحلًّا. نموذج التعليق لا يحتوي على علم “محلول” لتعيينه؛ الحل هو اتفاقية تختارها وتذكرها في الموجه.

أين يبقى الإنسان في الحلقة؟

في مكانين. قبل الخطوة 5، اطلب من الوكيل أن يذكر عدد التعليقات التي سيحذفها وانتظر إجابتك. حذف جميع التعليقات هو الاستدعاء الوحيد في سير العمل بدون إمكانية التراجع. قبل أن يخرج أي شيء خارج الفريق، راجع الردود التي صاغها الوكيل. نص التعليق يأتي من أشخاص آخرين، لذا اعتبره محتوى لتلخيصه، لا تعليمات للوكيل لتنفيذها.

جلسة مثال (مختصرة)

هذه توضيحة مبنية على سلوك الأدوات الموثّق، ليست لقطة شاشة مسجّلة.

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

كيف أشغّل الخادم لـ Claude أو Cursor أو Copilot؟

شغّل صورة Docker مع مجلد المستندات مركبًا، ومجلد إخراج يختلف عن مجلد التخزين:

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

نفس الأمر والبديل dnx GroupDocs.Annotation.Mcp --yes موضحان في AI review that lands in the document, not in the chat log. صفحة المركز تحتوي على التسجيل لـ Claude Desktop، Claude Code، VS Code مع GitHub Copilot، Cursor، Windsurf وغيرها من العملاء.

حدود صادقة

  • وضع التقييم. بدون ترخيص، تُطبع شارة تجريبية في أعلى كل صفحة، وهذا ليس ما يُرسل للطرف المقابل. تحقق من get_license_status قبل مراجعة رسمية.
  • كل أداة كتابة تحفظ نتيجتها في التخزين. لذا تُنتج الجولة سلسلة من الملفات. أخبر الوكيل بتمرير اسم الملف من النتيجة السابقة إلى الأمام وإعادة قراءته بـ get_annotations قبل أي تعديل، لأن المعرفات تخص المستند الذي قرأته للتو. اضبط GROUPDOCS_MCP_OUTPUT_PATH إلى مجلد غير مجلد التخزين قبل ربط التعديلات على ملف مُنتج. مع الإعداد الافتراضي (الإخراج يهبط في مجلد التخزين) الفتحة الثانية تفشل بـ being used by another process؛ مع مجلد إخراج منفصل ينجح add_reply وupdate_annotation وremove_annotations على الملف المُنتج.
  • الإحداثيات تُنقل كما هي. في مسودة مُعاد تدفقها قد يهبط ملاحظة مستوردة قرب النص الأصلي، وليس فوقه. تحقق من الموضع بعد ذلك.
  • معاينة على Linux. generate_pages_preview تفشل حاليًا لملفات PDF على Linux، بما في ذلك صورة Docker (TypeInitializationException لـ Gdip: System.Drawing.Common غير مدعوم على الأنظمة غير Windows)؛ ملفات Word وغيرها من مستندات Office تُعرض، وعلى Windows مع dnx يُعرض كل تنسيق. الأدوات العشر الأخرى غير متأثرة. أدوات المراجعة في هذه المقالة لا تستخدم مُعالج المعاينة.

الأسئلة المتكررة

هل يمكن للذكاء الاصطناعي الرد تلقائيًا على التعليقات في PDF؟ نعم. يقرأ الوكيل التعليقات بـ get_annotations ويجيب بـ add_reply، التي تأخذ معرف التعليق، نص الرد واسم المؤلف.

هل هناك حالة “محلول” للتعليقات؟ لا. لا تحتوي الأدوات على علم “محلول”، لذا تختار اتفاقية مثل إبقاء السلسلة، حذف التعليق أو إضافة البادئة [RESOLVED] للرسالة.

هل يمكنني الاحتفاظ بالتعليقات عند تعديل المستند؟ نعم. صدّر التعليقات إلى XML من النسخة المُراجَعة واستوردها إلى المسودة الجديدة. نفس زوج الأدوات يدمج نسختين من مراجعّين في نسخة واحدة.

تعمّق أكثر