المفاهيم · فصل ٤

الكلاينت: لما السيرفر يسأل اليوزر

Elicitation · MRTR · Roots deprecated · Sampling deprecated
🎯 الهدف: تفرّق الـ host عن الكلاينت، وتعرف إزاي السيرفر يطلب معلومة في نص الشغل.

الكلاينتس بيعملها الـ host عشان يكلموا سيرفرات معينة. الـ host (زي Claude.ai أو الـ IDE) بيدير تجربة اليوزر وبينسّق بين كلاينتس كتير. كل كلاينت بيتعامل مع سيرفر واحد بس.

إيه اللي الكلاينت يقدّمه للسيرفر؟

Elicitation لسه شغال: السيرفر يطلب معلومة منظمة من اليوزر وقت التفاعل، زي تفضيل المقعد أو نوع الأوضة.

Roots و Sampling اتلغوا من 2026-07-28 ومتجدولين للإزالة. هنفهمهم عشان تلاقيهم في سيرفرات قديمة، بس التنفيذ الجديد يستخدم البديل.

Elicitation

بدل ما السيرفر يطلب كل حاجة من الأول أو يفشل لما داتا ناقصة، يوقف ويطلب مدخل محدد. في وضعين:

Form

السيرفر يدي schema، والكلاينت يبني فورم ويعمل تحقق على الرد. للداتا المنظمة العادية.

URL

السيرفر يدي رابط اليوزر يفتحه. التفاعل بره الكلاينت، والداتا ما بتعديش عليه. ده مكان الباسوردات ومفاتيح الـ API والتوكنز وبيانات الدفع و OAuth لطرف تالت.

ممنوع وضع الفورم للحاجات الحساسة دي، عشان ما تعديش على الكلاينت ولا على سياق الموديل. الكلاينت يقدر يرفض الطلب المشبوه، ويخلي اليوزر يراجع الفورم قبل الإرسال.

في وضع الرابط: اعرض العنوان كامل، وخد موافقة صريحة، ومتفتحهوش أوتوماتيك. الكلاينت يعرف بس هل اليوزر وافق. التفاعل نفسه بين اليوزر والموقع.

نمط MRTR

الاسم Multi Round-Trip Requests. السيرفر وهو بيعالج tools/call يرد بـ InputRequiredResult وفيه inputRequests (طلب elicitation/create أو أكتر) و requestState اختياري. الكلاينت يجمع الإدخال ويعيد الريكوست الأصلي ومعاه inputResponses، ويرجّع الـ requestState زي ما السيرفر حاطه.

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

Roots اتلغى

كان الكلاينت يقول للسيرفر يركز على أنهي فولدرات، بمسارات file:// بس. الحدود استشارية: المواصفة بتقول السيرفرات SHOULD تحترمها، مش MUST، لأن السيرفر بيشغّل كود الكلاينت مش متحكم فيه. الأمان الحقيقي على نظام التشغيل أو الـ sandbox. الهدف منع الحوادث مش وقف الأذى المتعمد.

البديل: مرّر الملفات والفولدرات كمعاملات أداة، أو URIs لموارد، أو إعدادات السيرفر.

القائمة كانت بتتغير مع المشاريع، والسيرفر يشوفها المرة الجاية في roots/list.

Sampling اتلغى

كانت الفكرة: السيرفر يعمل مهمة محتاجة موديل من غير ما يدفع لمزود، ويطلب من الكلاينت اللي عنده الموديل يعملها. الكلاينت كان متحكم في الصلاحيات، والطلب ماشي بنفس MRTR عبر sampling/createMessage. اليوزر يراجع البرومبت والرد قبل ما يرجع للسيرفر.

السيرفر كان يقدر يطلب أدوات جوه الـ sampling بمصفوفة tools، بشرط الكلاينت يكون معلن قدرة sampling.tools. ممنوع يبعت أدوات لكلاينت ما أعلنهاش.

البديل: تكامل مباشر مع واجهة مزود الموديل.

خلّصت الفصل لما

🧠 اختبر نفسك
١) السيرفر محتاج مفتاح API من اليوزر. أنهي وضع؟ وليه؟
وضع URL. الداتا الحساسة ما تعديش على الكلاينت ولا على سياق الموديل.
٢) إيه اللي الكلاينت يرجّعه مع إعادة الريكوست في MRTR؟
inputResponses، وأي requestState السيرفر كان حاطه.
٣) هل Roots حد أمني؟
لأ. استشاري. الأمان على مستوى نظام التشغيل أو العزل.
٤) إيه شرط إرسال sampling فيه أدوات؟
الكلاينت يكون معلن قدرة sampling.tools. والميزة كلها اتلغت.