# انشر الألعاب من تطبيق الذكاء الاصطناعي مع PlayDrop MCP

كيف ينشر وكلاء الذكاء الاصطناعي على PlayDrop عبر MCP: المسار البسيط ومسار الحزمة، والاختبار الخاص، وpublish_game_version، والتحديثات والحدود والاستعادة.

Source: https://www.playdrop.ai/ar/create/learn/mcp-publishing

يتيح خادم MCP في PlayDrop لتطبيق الذكاء الاصطناعي نشر لعبة في حساب PlayDrop الخاص بالشخص الذي يعمل معه، وإعادة رابط يبقى صالحًا عبر التحديثات. يعرض هذا الدليل ترتيب العمليات. وتربط كل خطوة بالدليل الذي يحتوي على التفاصيل.

## قبل أن تبني

1. استدعِ `get_documentation({topic:"index"})` واقرأ أدلة الميزات التي ستستخدمها اللعبة، قبل كتابة الكود. التخطيط لملء الشاشة والحفظ وأدوات التحكم من البداية يجنّبك إعادة كتابة اللعبة لاحقًا. ولمعرفة توقيعات الدوال الدقيقة اقرأ المواضيع `sdk-types` و`server-sdk-types` و`shared-types`.
2. استدعِ `list_games`. إذا كانت اللعبة موجودة بالفعل، فستحدّثها وتحتفظ بـ `name` الخاص بها، لتحتفظ برابطها ولاعبيها.
3. اختر المسار. ملف HTML واحد مكتفٍ بذاته دون PlayDrop SDK يستخدم [المسار البسيط](https://www.playdrop.ai/ar/create/learn/html-games). وكل ما عدا ذلك، بما في ذلك أي ميزة من SDK أو وسائط صفحة اللعبة أو خادم، يستخدم [حزمة](https://www.playdrop.ai/ar/create/learn/packaging).

احتفظ أنت بالمشروع المصدري للمبدع. لا يستلم PlayDrop إلا الناتج المبني: فهو ليس نسخة احتياطية للمصدر ولا يستطيع إعادة الكود المصدري.

## المسار البسيط: upload_game

أرسل `requestId` وملف HTML الكامل (10 MiB كحد أقصى، أي 10,485,760 بايت بترميز UTF-8) وكتالوجًا مصغّرًا. مرّر `gameId` لتحديث لعبة موجودة. تزداد أرقام الإصدارات تلقائيًا. راجع [ألعاب HTML البسيطة](https://www.playdrop.ai/ar/create/learn/html-games) لمعرفة الحقول.

## مسار الحزمة: التحضير والرفع والإكمال

استدعِ `prepare_catalogue_upload` مع `requestId` و`expectedCurrentVersion` وصيغة إدخال واحدة:

- **مجلد:** `catalogue` (محتوى catalogue.json) إضافة إلى `files`، واصف واحد لكل ملف مع مساره النسبي. يحمل الواصف `text` مضمّنًا، أو وصفًا لرفع موقّع، أو ربطًا بمرفق، أو `reuse` لملف من إصدار محفوظ.
- **ملف ZIP أو .play محلي:** فك ضغطه محليًا، ثم أرسل الكتالوج الجذري وواصفات المجلد. لا تضع أبدًا بايتات أرشيف بترميز base64 في استدعاء أداة.
- **مرفق ChatGPT:** مرّر ملف ZIP أو .play الذي يوفّره المضيف بوصفه `archive`، مع `download_url` و`file_id` الحقيقيين. يمكن أن يصل حجمه إلى 20 MiB مضغوطًا، ويحتاج إلى catalogue.json في الجذر.

في الرفع الموقّع، يقدّم كل واصف `path` و`contentType` و`sizeBytes` و`sha256` (64 حرفًا ست عشريًا صغيرًا) و`md5Base64`، محسوبة محليًا من البايتات الدقيقة. أرسل تلك البايتات بطلب PUT إلى كل رابط مُعاد مع كل ترويسة مُعادة، ثم استدعِ `complete_catalogue_upload` بـ `requestId` نفسه.

في ChatGPT، يمكن أن تأتي ملفات المجلد من مرفقات مربوطة بحسب موضعها:

```
attachments: [htmlFile, iconFile]
files: [{path:"index.html", attachmentIndex:0}, {path:"listing/icon.png", attachmentIndex:1, role:"LISTING", app:"my-game"}]
```

يحتاج كل تطبيق إلى `version` مصرّح به، وقيمة ظهور (في الطلب أو في التطبيق)، ومدخل في `expectedCurrentVersion` مفهرس باسمه: `null` لإنشائه، أو الإصدار المنشور الحالي من `list_games` لتحديثه. وتُرفض القيمة القديمة، حتى لا تُستبدل عملية رفع أخرى عن طريق الخطأ أبدًا.

## اختبر في إصدار خاص، ثم انشر

ارفع باستخدام `visibility: "private"` عندما تستخدم اللعبة SDK أو خادمًا، أو عندما يريد الشخص الذي تعمل معه تجربتها أولًا. افتح `url` من الإيصال للعب ذلك الإصدار تحديدًا داخل PlayDrop مع مضيف SDK الحقيقي. لا تعمل وظائف الخادم المستضاف إلا على الإصدارات المرفوعة، لذا اختبرها بهذه الطريقة.

عندما تعمل، انشر ذلك الإصدار تحديدًا باستخدام `publish_game_version`، ممررًا `gameId` و`version` و`expectedCurrentVersion`، و`visibility` (`public` أو `unlisted`) إن اختار الشخص الذي تعمل معه ظهورًا. تعيد الأداة استخدام الملفات وصفحة اللعبة والمراجعة التي اختُبرت. لا ترفع اللعبة مجددًا لنشرها.

لتجربة نسخة محلية داخل إطار PlayDrop قبل رفعها، افتح `https://www.playdrop.ai/@<username>/<slug>/dev?url=<URL-encoded local address>` في متصفح عادي على الجهاز الذي يشغّل الخادم المحلي.

## اختر من يمكنه اللعب

تقبل `visibility` القيم `public` و`unlisted` و`private`. وللعبة جديدة دون اختيار، استخدم الإعداد المحفوظ للمبدع: يطبّقه `upload_game` عندما تُغفل الظهور، ويعرضه `get_account` بوصفه `publishing.defaultVisibility`. وللتحديث، احتفظ بقيمة `gameVisibility` الخاصة باللعبة من `list_games` ما لم يغيّرها الشخص الذي تعمل معه؛ يفعل `upload_game` ذلك عندما تُغفل الظهور، وتصرّح به الحزمة. اللعبة غير المدرجة يستطيع كل من لديه رابطها أن يلعبها؛ فهي ليست قائمة أصدقاء. لا تجعل لعبة أكثر ظهورًا مما أراد الشخص الذي تعمل معه أبدًا. التفاصيل: [من يمكنه اللعب](https://www.playdrop.ai/ar/create/learn/distribution).

## أعطِ الرابط الصحيح

تتضمن إيصالات الألعاب العامة وغير المدرجة `shareUrl`، الصفحة الدائمة للعبة: أعطِ هذا الرابط للشخص الذي تعمل معه. أما الإصدار الخاص فيعيد `url`، رابط ذلك الإصدار تحديدًا للمالك. وتسرد إيصالات الحزم كل عنصر؛ وتبقى العناصر المكتملة منشورة حتى إن فشل عنصر لاحق.

## حدّث لعبة

اقرأ `list_games` والإصدار الحالي، واحتفظ بـ `name`، وأرسل لقطة كاملة: كل ملف مقصود وكل البيانات الوصفية المقصودة، لأن الحقول المُغفلة تغيب عن الإصدار الجديد. ولا تُحذف عناصر الكتالوج المُغفلة أبدًا. استخدم `get_game_version` لقراءة الكتالوج الدقيق للإصدار الذي تغيّره، بما في ذلك حالة Tweaks فيه.

## الحدود

- المسار البسيط: ملف HTML واحد بحجم 10 MiB كحد أقصى.
- الحزمة: 512 واصف ملف للمجلد أو 512 مدخلًا في الأرشيف (بما في ذلك catalogue.json والمجلدات)، و50 MiB لكل ملف، و200 MiB إجمالًا بعد فك الضغط، و1 MiB لـ JSON الكتالوج.
- الأرشيفات: المسارات النسبية الآمنة فقط؛ وتُرفض المسارات المكررة والروابط الرمزية والأرشيفات المشفرة ومتعددة الأجزاء وأرشيفات ZIP64.
- تنتهي صلاحية عمليات الرفع المحضّرة بعد 30 دقيقة.

## الأخطاء وإعادة المحاولة

تحمل الأخطاء `error` و`message` و`retryable` و`nextAction` و`docsUrl` و`documentationTopic`. اتبع `nextAction`. بعد ضياع الرد، أعد إرسال المحتوى المطابق بـ `requestId` نفسه؛ ويحتاج المحتوى المتغير إلى معرّف جديد. راجع [الأخطاء والاستعادة](https://www.playdrop.ai/ar/create/learn/errors).

استخدم `send_feedback` للإبلاغ عن مشكلة يمكن تكرارها أو خطوة مربكة، دون رموز الوصول أو الروابط الموقّعة.

## أدلة ذات صلة

- [ألعاب HTML البسيطة](https://www.playdrop.ai/ar/create/learn/html-games): انشر ملف HTML واحدًا مكتفيًا بذاته حتى 10 MiB باستخدام upload_game: ما يناسب، والكتالوج المصغّر، والظهور، والتحديثات، ومتى تنتقل إلى حزمة.
- [التحزيم و.play](https://www.playdrop.ai/ar/create/learn/packaging): نظّم مجلد لعبة مبنية أو ملف ZIP أو .play مع catalogue.json في جذره، وصرّح بوسائط صفحة اللعبة والخوادم، وارفعه باستخدام prepare_catalogue_upload.
- [الظهور والانتشار](https://www.playdrop.ai/ar/create/learn/distribution): اختر من يمكنه فتح لعبة على PlayDrop، وكيف يعمل الإعداد الافتراضي للحساب ونشر الإصدارات، وكيف يجلب التعزيز وتبادل اللعب وInstant والبحث لاعبين جددًا.
- [الأخطاء والاستعادة](https://www.playdrop.ai/ar/create/learn/errors): شكل الأخطاء التي تعيدها أدوات MCP في PlayDrop، ومتى تعيد المحاولة بـ requestId نفسه، وطريقة إصلاح كل رمز خطأ شائع.
