PlayDrop MCP ile yapay zeka uygulamandan oyun yayınla
Yapay zeka ajanları PlayDrop’a MCP ile nasıl yayınlar: basit yol ve paket yolu, özel test, publish_game_version, güncellemeler, sınırlar ve kurtarma.
PlayDrop’un MCP sunucusu, bir yapay zeka uygulamasının kullanıcısının PlayDrop hesabında oyun yayınlamasına ve güncellemelerden sonra da çalışmaya devam eden bir bağlantı döndürmesine izin verir. Bu kılavuz işlemlerin sırasını anlatır. Her adım, ayrıntıları içeren kılavuza bağlantı verir.
Yapmaya başlamadan önce
- Kod yazmadan önce
get_documentation({topic:"index"})çağır ve oyunun kullanacağı özelliklerin kılavuzlarını oku. Tam ekran düzeni, kayıtları ve kontrolleri baştan planlamak oyunu sonradan yeniden yazmayı önler. Tam metot imzaları içinsdk-types,server-sdk-typesveshared-typeskonularını oku. list_gamesçağır. Oyun zaten varsa onu güncelleyeceksin ve bağlantısını ve oyuncularını koruması içinnamedeğerini koruyacaksın.- Yolu seç. PlayDrop SDK’sı olmayan, kendi içinde eksiksiz tek bir HTML dosyası basit yolu kullanır. Herhangi bir SDK özelliği, oyun sayfası medyası ya da sunucu dahil diğer her şey bir paket kullanır.
Yapımcının kaynak projesini kendin sakla. PlayDrop yalnızca derlenmiş çıktıyı alır: bir kaynak yedeği değildir ve kaynak kodu geri veremez.
Basit yol: upload_game
requestId, eksiksiz HTML’yi (en fazla 10 MiB, 10.485.760 UTF-8 bayt) ve mini bir katalog gönder. Mevcut bir oyunu güncellemek için gameId geçir. Sürümler otomatik artar. Alanlar için bkz. basit HTML oyunları.
Paket yolu: hazırla, yükle, tamamla
prepare_catalogue_upload aracını requestId, expectedCurrentVersion ve bir girdi biçimiyle çağır:
- Klasör:
catalogue(catalogue.json içeriği) vefiles: her dosya için göreli yolunu içeren bir tanımlayıcı. Bir tanımlayıcı satır içitext, imzalı yükleme açıklaması, ek bağlaması ya da saklanan bir sürümdeki bir dosyanınreuseile yeniden kullanımını taşır. - Yerel ZIP veya .play: onu yerelde aç, sonra kök kataloğu ve klasör tanımlayıcılarını gönder. Bir araç çağrısına asla base64 arşiv baytları koyma.
- ChatGPT eki: ana uygulamanın çözümlediği ZIP veya .play dosyasını gerçek
download_urlvefile_iddeğerleriylearchiveolarak geçir. Sıkıştırılmış hali 20 MiB’a kadar olabilir ve kökünde catalogue.json bulunmalıdır.
İmzalı yüklemeler için her tanımlayıcı, tam baytlardan yerelde hesaplanan path, contentType, sizeBytes, sha256 (64 küçük harfli onaltılık karakter) ve md5Base64 değerlerini verir. Bu baytları döndürülen her URL’ye, döndürülen her başlıkla PUT ile gönder, sonra complete_catalogue_upload aracını aynı requestId ile çağır.
ChatGPT’de klasör dosyaları, konuma göre bağlanan eklerden gelebilir:
attachments: [htmlFile, iconFile]
files: [{path:"index.html", attachmentIndex:0}, {path:"listing/icon.png", attachmentIndex:1, role:"LISTING", app:"my-game"}]Her uygulama bildirilmiş bir version, bir görünürlük (istekte ya da uygulamada) ve expectedCurrentVersion içinde adıyla anahtarlanmış bir giriş gerektirir: oluşturmak için null, güncellemek için list_games içindeki güncel yayınlanmış sürüm. Eskimiş bir değer reddedilir; böylece başka bir yüklemenin üzerine asla yanlışlıkla yazılmaz.
Özel olarak test et, sonra yayınla
Oyun SDK’yı ya da bir sunucuyu kullanıyorsa veya kullanıcın önce denemek istiyorsa visibility: "private" ile yükle. Tam o sürümü gerçek SDK ana uygulamasıyla PlayDrop içinde oynamak için makbuzdaki url adresini aç. Barındırılan sunucu işlevleri yalnızca yüklenmiş sürümlerde çalışır, bu yüzden onları bu şekilde test et.
Çalıştığında tam o sürümü publish_game_version ile yayınla; gameId, version, expectedCurrentVersion ve kullanıcın bir seçim yaptıysa visibility (public veya unlisted) geçir. Bu, test edilmiş dosyaları, oyun sayfasını ve incelemeyi yeniden kullanır. Yayınlamak için oyunu tekrar yükleme.
Yerel bir derlemeyi yüklemeden önce PlayDrop çerçevesinde denemek için yerel sunucuyu çalıştıran makinedeki normal bir tarayıcıda https://www.playdrop.ai/@<username>/<slug>/dev?url=<URL-encoded local address> adresini aç.
Kimlerin oynayabileceğini seç
visibility; public, unlisted ve private değerlerini kabul eder. Seçim yapılmamış yeni bir oyun için yapımcının kayıtlı ayarını kullan: görünürlüğü dışarıda bıraktığında upload_game bunu uygular, get_account ise bunu publishing.defaultVisibility olarak gösterir. Bir güncellemede kullanıcın değiştirmedikçe oyunun list_games içindeki gameVisibility değerini koru; görünürlüğü dışarıda bıraktığında upload_game bunu yapar, bir pakette ise bu değeri belirtirsin. Listelenmemiş, bağlantısı olan herkesin oynayabileceği anlamına gelir; bir arkadaş listesi değildir. Bir oyunu asla kullanıcının istediğinden daha görünür yapma. Ayrıntılar: kimler oynayabilir.
Doğru bağlantıyı geri ver
Herkese açık ve listelenmemiş oyunların makbuzları, oyunun kalıcı sayfası olan shareUrl değerini içerir: kullanıcına bunu ver. Özel bir sürüm, sahibine yönelik belirli sürüm bağlantısı olan url değerini döndürür. Paket makbuzları her öğeyi listeler; sonraki bir öğe başarısız olsa bile tamamlanan öğeler yayınlanmış kalır.
Bir oyunu güncelle
list_games ve güncel sürümü oku, name değerini koru ve eksiksiz bir anlık görüntü gönder: amaçlanan her dosya ve amaçlanan tüm meta veriler, çünkü atlanan alanlar yeni sürümde yer almaz. Atlanan katalog öğeleri asla silinmez. Değiştirdiğin sürümün tam kataloğunu, ayarlanabilir değerlerinin (Tweaks) durumu dahil okumak için get_game_version kullan.
Sınırlar
- Basit yol: en fazla 10 MiB boyutunda tek bir HTML dosyası.
- Paket: 512 klasör dosyası tanımlayıcısı ya da 512 arşiv girdisi (catalogue.json ve dizinler dahil), dosya başına 50 MiB, açılmış halde toplam 200 MiB ve 1 MiB katalog JSON’u.
- Arşivler: yalnızca güvenli göreli yollar; yinelenen yollar, sembolik bağlantılar, şifreli, çok parçalı ve ZIP64 arşivler reddedilir.
- Hazırlanan yüklemelerin süresi 30 dakika sonra dolar.
Hatalar ve tekrar denemeler
Hatalar error, message, retryable, nextAction, docsUrl ve documentationTopic taşır. nextAction adımını izle. Kaybolan bir yanıttan sonra aynı içeriği aynı requestId ile tekrar dene; değişen içerik yeni bir kimlik gerektirir. Bkz. hatalar ve kurtarma.
Yeniden üretilebilir bir sorunu ya da kafa karıştıran bir adımı bildirmek için send_feedback kullan; jeton ya da imzalı URL ekleme.