انشر الألعاب من تطبيق الذكاء الاصطناعي مع PlayDrop MCP
كيف ينشر وكلاء الذكاء الاصطناعي على PlayDrop عبر MCP: المسار البسيط ومسار الحزمة، والاختبار الخاص، وpublish_game_version، والتحديثات والحدود والاستعادة.
يتيح خادم MCP في PlayDrop لتطبيق الذكاء الاصطناعي نشر لعبة في حساب PlayDrop الخاص بالشخص الذي يعمل معه، وإعادة رابط يبقى صالحًا عبر التحديثات. يعرض هذا الدليل ترتيب العمليات. وتربط كل خطوة بالدليل الذي يحتوي على التفاصيل.
قبل أن تبني
- استدعِ
get_documentation({topic:"index"})واقرأ أدلة الميزات التي ستستخدمها اللعبة، قبل كتابة الكود. التخطيط لملء الشاشة والحفظ وأدوات التحكم من البداية يجنّبك إعادة كتابة اللعبة لاحقًا. ولمعرفة توقيعات الدوال الدقيقة اقرأ المواضيعsdk-typesوserver-sdk-typesوshared-types. - استدعِ
list_games. إذا كانت اللعبة موجودة بالفعل، فستحدّثها وتحتفظ بـnameالخاص بها، لتحتفظ برابطها ولاعبيها. - اختر المسار. ملف HTML واحد مكتفٍ بذاته دون PlayDrop SDK يستخدم المسار البسيط. وكل ما عدا ذلك، بما في ذلك أي ميزة من SDK أو وسائط صفحة اللعبة أو خادم، يستخدم حزمة.
احتفظ أنت بالمشروع المصدري للمبدع. لا يستلم PlayDrop إلا الناتج المبني: فهو ليس نسخة احتياطية للمصدر ولا يستطيع إعادة الكود المصدري.
المسار البسيط: upload_game
أرسل requestId وملف HTML الكامل (10 MiB كحد أقصى، أي 10,485,760 بايت بترميز UTF-8) وكتالوجًا مصغّرًا. مرّر gameId لتحديث لعبة موجودة. تزداد أرقام الإصدارات تلقائيًا. راجع ألعاب HTML البسيطة لمعرفة الحقول.
مسار الحزمة: التحضير والرفع والإكمال
استدعِ 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 ذلك عندما تُغفل الظهور، وتصرّح به الحزمة. اللعبة غير المدرجة يستطيع كل من لديه رابطها أن يلعبها؛ فهي ليست قائمة أصدقاء. لا تجعل لعبة أكثر ظهورًا مما أراد الشخص الذي تعمل معه أبدًا. التفاصيل: من يمكنه اللعب.
أعطِ الرابط الصحيح
تتضمن إيصالات الألعاب العامة وغير المدرجة 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 نفسه؛ ويحتاج المحتوى المتغير إلى معرّف جديد. راجع الأخطاء والاستعادة.
استخدم send_feedback للإبلاغ عن مشكلة يمكن تكرارها أو خطوة مربكة، دون رموز الوصول أو الروابط الموقّعة.