افترض إن عندك متجر بيبيع أدوات قهوة، وزبون كتب لـChatGPT: «دوّرلي على مطحنة قهوة يدوية تحت 1500 جنيه في المتجر ده». ChatGPT هيفتح المتجر في متصفح، ويحاول يعمل اللي أي حد فينا بيعمله: يقرا الصفحة، ويخمّن فين مربع البحث، ويكتب فيه، ويدوّر على فلتر السعر.
المشكلة إن الـAgent هنا بيخمّن. لو مربع البحث مستخبي ورا أيقونة، أو فلتر السعر جوه قايمة مقفولة، أو التصميم اتغير الأسبوع اللي فات، الخطوات دي بتبوظ، والزبون ممكن ميوصلش للمنتج اللي عندك أصلًا.
WebMCP بيحل المشكلة دي من ناحية الموقع: بدل ما الـAgent يخمّن، الموقع نفسه بيعلن عن أدوات واضحة، زي «ابحث في المنتجات، وابعتلي اسم المنتج وأقصى سعر»، والـAgent بيستخدمها مباشرة. وفي المقال ده هنمشي مع المتجر ده من الأول للآخر: هنشوف الفرق في محاكاة، ونجهّز أدواته بالكود، ونعرف تجرّبه إزاي، وإيه علاقته بالسيو.
ما هو WebMCP؟
WebMCP واجهة جديدة في المتصفح بتخلي أي موقع يقدّم أدوات لوكلاء الذكاء الاصطناعي، أو الـAI Agents، زي ChatGPT وChrome. كل أداة ليها اسم، ووصف بيقول بتعمل إيه وإمتى تتستخدم، ومدخلات محددة زي اسم المنتج أو أقصى سعر.
والأداة نفسها بتشتغل جوه صفحة الموقع، بالـJavaScript بتاع الموقع، وبنفس جلسة المستخدم. يعني لو الزبون مسجّل دخول في المتجر، الـAgent بيستخدم الأداة بنفس الحساب، من غير ما تبني API منفصل.
| البند | التفاصيل |
|---|---|
| الحالة | مسودة من مجموعة Web Machine Learning في W3C، آخر تحديث 16 أكتوبر 2026، ومش معيار رسمي لسه |
| بيشتغل فين | جوه صفحة الموقع، في المتصفح |
| مين بيدعمه لحد دلوقتي | Chrome بفلاج للتجربة ومن نسخة 149 فيه Origin Trial، وChatGPT في ميزة Site Tools |
| شرطه الأساسي | الصفحة لازم تكون HTTPS |
| طريقة الإضافة | Attributes على فورم موجود، أو كود JavaScript |
الـAgent بيستخدم موقعك إزاي: من غير WebMCP ومعاه
خلينا نرجع لطلب الزبون، ونشوف الـAgent هيعمل إيه في الحالتين. اختار الحالة، واضغط «الخطوة التالية»، وتابع الجزء اللي الـAgent بيلمسه في الصفحة في كل خطوة.
طلب الزبون من ChatGPT
«دوّرلي على مطحنة قهوة يدوية تحت 1500 جنيه في المتجر ده.»
خطوات الـAgentالخطوة 0 من 5
الفرق مش في عدد الخطوات وبس. من غير WebMCP، كل خطوة مبنية على تخمين الـAgent لشكل الصفحة، وأي تعديل في التصميم ممكن يبوّظها. ومع WebMCP، الموقع هو اللي بيحدد الأداة ومدخلاتها، والـAgent بينفّذ.
| من غير WebMCP | مع WebMCP | |
|---|---|---|
| الـAgent بيعرف يعمل إيه منين | بيقرا الصفحة ويخمّن | الموقع بيعلن الأدوات بأسمائها ومدخلاتها |
| الخطوات في المثال | 5 خطوات | 3 خطوات |
| لو التصميم اتغير | الخطوات ممكن تبوظ | الأداة زي ما هي، طالما اسمها ومدخلاتها ثابتين |
| مين بيبعت الطلب | حسب الـAgent | في الفورم، الزبون هو اللي بيضغط إرسال |
| الموقع محتاج إيه | ولا حاجة | Attributes على الفورم، أو كود بسيط |
مثال عملي: إزاي متجر قهوة يجهّز أدواته
قبل ما تكتب أي كود، اسأل نفسك سؤال واحد: الزبون بيعمل إيه في موقعي أصلًا؟ في متجر القهوة بتاعنا، الإجابة غالبًا أربع حاجات: يدوّر على منتج، ويشوف هو متاح ولا لأ، ويضيفه للسلة، ويتابع طلبه بعد ما يشتري. وكل حاجة فيهم ممكن تبقى أداة:
| الأداة | بتعمل إيه | طريقتها | بتغيّر حاجة؟ |
|---|---|---|---|
search_products | تدوّر في المنتجات بالاسم وأقصى سعر | فورم البحث | لا، قراءة بس |
check_stock | ترجّع الكمية المتاحة من منتج | JavaScript | لا، قراءة بس |
add_to_cart | تضيف منتج للسلة | JavaScript | أيوه |
track_order | تعرض حالة طلب برقمه | فورم تتبع الطلب | لا، قراءة بس |
والعمود الأخير هو أهم عمود في الجدول. الأدوات اللي بتقرا بس آمنة تسيبها للـAgent يستخدمها براحته، لكن أي أداة بتغيّر حاجة، زي السلة أو الدفع، لازم المستخدم يفضل شايفها ومتحكم فيها. وده بالظبط اللي هنطبقه في الكود.
الطريقة الأولى: تحويل فورم موجود لأداة
أسهل بداية هي فورم البحث، لأنه موجود عندك أصلًا. كل اللي بتعمله إنك بتضيف للفورم اسم ووصف، ولكل خانة وصف اختياري، ودي الطريقة اللي توثيق Chrome بيسميها Declarative API:
<form toolname="search_products"
tooldescription="Search the store's products by name, with an optional maximum price in EGP."
action="/search">
<input name="q" toolparamdescription="Product name or type, like manual coffee grinder">
<input name="max_price" type="number" toolparamdescription="Highest price in EGP">
<button>Search</button>
</form>كده الفورم بقى أداة اسمها search_products. لما الـAgent يستدعيها، المتصفح بيركّز على الفورم ويملا الخانتين قدام الزبون، والزبون هو اللي بيضغط «بحث»، زي ما شفت في المحاكاة.
| الـAttribute | بيتحط فين | معناه |
|---|---|---|
| toolname | الفورم | اسم الأداة، ولازم يكون موجود |
| tooldescription | الفورم | وصف الأداة، ولازم يكون موجود |
| toolparamdescription | أي خانة | وصف الخانة، وده اختياري |
| toolautosubmit | الفورم | الفورم يتبعت لوحده من غير ما الزبون يضغط |
ولو شلت toolname أو tooldescription، الأداة بتختفي. أما toolautosubmit فمناسب لفورم البحث، لأنه مش بيغيّر حاجة، لكنه مش مناسب لفورم دفع أو حذف.
الطريقة التانية: أداة بالـJavaScript
مش كل حاجة فورم. الكمية المتاحة من منتج مثلًا بتيجي من API عندك، ومفيش فورم الزبون بيملاه علشانها. هنا بتسجّل الأداة بكود، ودي الطريقة اللي اسمها Imperative API:
document.modelContext.registerTool({
name: "check_stock",
description: "Returns how many units of a product are in stock.",
inputSchema: {
type: "object",
properties: { sku: { type: "string" } },
required: ["sku"],
},
annotations: { readOnlyHint: true },
execute: async ({ sku }) => {
const res = await fetch(`/api/stock?sku=${encodeURIComponent(sku)}`);
return res.json();
},
});الكود ده بيعرّف الأداة بنفس الحاجات اللي في الفورم وزيادة. name وdescription زي الفورم بالظبط، وinputSchema بيحدد المدخلات بصيغة JSON Schema، يعني الأداة محتاجة sku ونوعه نص. وexecute هو الكود اللي بيتنفذ فعلًا، واللي بيرجّعه بيوصل للـAgent. أما readOnlyHint فبيقول للـAgent إن الأداة بتقرا بس ومش بتغيّر حاجة.
ولو الأداة بتغيّر حاجة، زي add_to_cart، بتستخدم consequentialHint بدل readOnlyHint، علشان تعلّم إنها بتعمل حاجة مهمة أو مينفعش ترجع فيها.
ولو لقيت مقالات أو أمثلة بتكتب navigator.modelContext، فده الاسم القديم. المواصفة الحالية نقلته لـdocument.modelContext، فاكتب الجديد.
| الفورم | JavaScript | |
|---|---|---|
| بتكتب إيه | Attributes على HTML موجود | كود بيسجّل الأداة |
| مناسب لـ | البحث، وطلب عرض السعر، والحجز، وتتبع الطلب | أي حاجة مش فورم، زي المخزون والسلة |
| مين بيبعت الطلب | الزبون بيضغط إرسال، إلا لو ضفت toolautosubmit | الكود بيتنفذ على طول |
| محتاج مطوّر؟ | لا، تعديل بسيط في HTML | أيوه |
الفرق بين WebMCP وMCP وSchema
WebMCP بيتلخبط مع حاجتين: MCP، لأن الاسم جاي منه، وSchema، لأن الاتنين بيوصفوا الموقع لآلة. والجدول ده بيفرّق بين التلاتة:
| Schema | MCP | WebMCP | |
|---|---|---|---|
| بيقول إيه | الصفحة دي إيه: منتج، وسعره، وتقييمه | الأدوات اللي خدمة معينة بتقدمها | الأدوات اللي الصفحة دي بتقدمها |
| بيشتغل فين | جوه كود الصفحة، كبيانات | على سيرفر أو برنامج منفصل | جوه الصفحة، في المتصفح |
| مين بيستخدمه | محركات البحث وغيرها | تطبيقات الذكاء الاصطناعي | الـAgents في المتصفح، زي Chrome وChatGPT |
| تسجيل الدخول | مش محتاجه | حسب الخدمة | بيستخدم جلسة المستخدم في الموقع |
المواصفة نفسها بتوصف الصفحة اللي فيها WebMCP إنها شبه سيرفر MCP، بس أدواته مكتوبة في كود الصفحة بدل ما تكون على سيرفر. وفي نفس الوقت WebMCP مش بديل لـSchema: الـSchema بتوصف المنتج نفسه، وWebMCP بيخلي الـAgent يعمل حاجة بيه، زي إنه يدوّر عليه أو يضيفه للسلة.
إزاي تجرّب WebMCP بنفسك
WebMCP موجود في Chrome، لكنه لسه مش مفعّل لكل الناس. علشان تجربه على جهازك:
- افتح Chrome واكتب في شريط العنوان
chrome://flags/#enable-webmcp-testing، وخلّي الخيار Enabled، واقفل Chrome وافتحه تاني. - نزّل إضافة Model Context Tool Inspector اللي Chrome بيرشحها، وحط فيها API Key من Gemini، لأنها بتستخدمه علشان تجرّب الأدوات بكلام عادي.
- افتح صفحة فيها أدوات WebMCP، زي الديموهات اللي Chrome بيشاورلها، أو أي صفحة في موقعنا، لأن كل صفحاته فيها أداة
search_coursesللبحث في الكورسات، وهتلاقي الإضافة بتعرض كل أداة باسمها ووصفها ومدخلاتها. - اطلب حاجة بالكلام، زي «دوّرلي على مطحنة يدوية تحت 1500»، وتابع الأداة اتستدعت إزاي، وإيه اللي اتملى في الفورم.
ولو عايز تعرف صفحة من موقعك جاهزة ولا لأ من غير ما تفعّل حاجة في متصفحك، افحصها بـأداة فحص WebMCP، وهتقولك الصفحة فيها أدوات ولا لأ، والوكلاء يقدروا يدخلوها ولا لأ، وإيه اللي ناقصها وإزاي تصلحه.
ولما تبقى جاهز إن زوارك الحقيقيين يستخدموه، Chrome عامل Origin Trial من نسخة 149: بتسجّل موقعك، وبتحط الـToken اللي بتاخده في الصفحة. وخلي خيار Third-party matching مقفول وانت بتسجّل، لأن Chrome بيتجاهل الـToken ده لو اتحط في الصفحة نفسها، وخلي بالك كمان إن WebMCP مش بيشتغل غير على HTTPS.
وفي ChatGPT، افتح المتصفح المدمج في تطبيق الكمبيوتر وادخل الصفحة. لو فيها أدوات، هيظهر سهم في شريط العنوان، رمادي لما الأدوات متاحة وأزرق وChatGPT بيستخدمها. وشرحنا خطوات الميزة دي في مميزات شات جي بي تي المتقدمة.
هل WebMCP مهم للسيو؟
خلينا نكون واضحين من الأول: مفيش أي دليل إن WebMCP بيأثر على ترتيبك في جوجل، وتوثيق Chrome نفسه مبيتكلمش عن البحث خالص. فلو حد قالك إنه عامل ترتيب جديد، ده كلام مش مبني على مصدر.
اللي بيتغير فعلًا هو طريقة استخدام المواقع. جزء من الناس بقى يطلب من ChatGPT، أو من متصفح فيه Agent، إنه يدوّر أو يحجز بداله، والـAgent هو اللي بيدخل الموقع. ولو الموقع مش واضح للـAgent، المهمة ممكن تفشل، حتى لو صفحتك أول نتيجة في جوجل.
والجزء اللي يخصك ككاتب سيو هو كتابة الأدوات نفسها، لأن اسم الأداة ووصفها هما اللي الـAgent بيختار على أساسهم، زي ما العنوان والوصف هما اللي الزبون بيختار على أساسهم في نتايج البحث. ودي نصايح Chrome لكتابة الأدوات، بأمثلة من المتجر:
| النصيحة | مثال ضعيف | مثال أوضح |
|---|---|---|
| اسم الأداة فعل بيقول اللي هيحصل بالظبط | products | search_products |
| الوصف بيقول الأداة بتعمل إيه وإمتى تتستخدم | Product tool | Search products by name, with an optional max price. |
| خانات بأنواع محددة وأسماء مفهومة | shipping_id=1 | shipping="Express" |
| كل أداة بتعمل حاجة واحدة | أداة واحدة للبحث والسلة | search_products وadd_to_cart منفصلين |
| الأداة تاخد كلام المستخدم زي ما هو | تطلب من الـAgent يحسب الفرق بين وقتين | تاخد الوقتين، وتحسب الفرق في الكود |
قبل ما تضيف WebMCP لموقعك
ابدأ بالفورمز اللي عندك أصلًا: البحث في الموقع، وطلب عرض السعر، والحجز، وتتبع الطلب. دي أسهل خطوة، لأنها Attributes على HTML موجود، ومش محتاجة مطوّر في أغلب الأحوال. وبعد كده خلي بالك من الحاجات دي:
- أي أداة بتغيّر حاجة مينفعش ترجع فيها، زي الدفع أو الحذف، سيب فيها الإرسال للمستخدم، ومتستخدمش معاها toolautosubmit، ولو بالـJavaScript علّمها بـconsequentialHint.
- خلي رسالة الخطأ بتقول السبب، زي «المنتج ده مش متاح» أو «رقم الطلب غلط»، علشان الـAgent يفهم ويجرّب تاني ببيانات صح.
- WebMCP لسه مسودة وتفاصيله بتتغير، واسم الواجهة نفسه اتغير من navigator لـdocument، فراجع التوثيق قبل ما تطلق أي حاجة.
- الدعم الموثّق لحد دلوقتي في Chrome، وفي ChatGPT عن طريق Site Tools، فمتعتمدش عليه لوحده في أي حاجة أساسية في الموقع.
- ولما تخلّص، افحص الصفحة بـأداة فحص WebMCP علشان تتأكد إن الفورم بقى أداة، وإن كل خانة فيه ليها وصف.