# 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.

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

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

1. 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çin `sdk-types`, `server-sdk-types` ve `shared-types` konularını oku.
2. `list_games` çağır. Oyun zaten varsa onu güncelleyeceksin ve bağlantısını ve oyuncularını koruması için `name` değerini koruyacaksın.
3. Yolu seç. PlayDrop SDK’sı olmayan, kendi içinde eksiksiz tek bir HTML dosyası [basit yolu](https://www.playdrop.ai/tr/create/learn/html-games) kullanır. Herhangi bir SDK özelliği, oyun sayfası medyası ya da sunucu dahil diğer her şey [bir paket](https://www.playdrop.ai/tr/create/learn/packaging) 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ı](https://www.playdrop.ai/tr/create/learn/html-games).

## 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) ve `files`: her dosya için göreli yolunu içeren bir tanımlayıcı. Bir tanımlayıcı satır içi `text`, imzalı yükleme açıklaması, ek bağlaması ya da saklanan bir sürümdeki bir dosyanın `reuse` ile 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_url` ve `file_id` değerleriyle `archive` olarak 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](https://www.playdrop.ai/tr/create/learn/distribution).

## 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](https://www.playdrop.ai/tr/create/learn/errors).

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.

## İlgili kılavuzlar

- [Basit HTML oyunları](https://www.playdrop.ai/tr/create/learn/html-games): upload_game ile 10 MiB’a kadar tek bir HTML dosyası yayınla: neler uygun, mini katalog, görünürlük, güncellemeler ve ne zaman pakete geçmeli.
- [Paketleme ve .play](https://www.playdrop.ai/tr/create/learn/packaging): Kökünde catalogue.json olan derlenmiş bir klasör, ZIP ya da .play hazırla, oyun sayfası medyasını ve sunucuları bildir, prepare_catalogue_upload ile yükle.
- [Görünürlük ve erişim](https://www.playdrop.ai/tr/create/learn/distribution): PlayDrop oyununu kimlerin açabileceğini seç; hesap varsayılanı ve sürüm yayınlama nasıl işler, Boost, oyun takası, Instant ve arama nasıl yeni oyuncu getirir.
- [Hatalar ve kurtarma](https://www.playdrop.ai/tr/create/learn/errors): PlayDrop’un MCP araçlarının döndürdüğü hata biçimi, aynı requestId ile ne zaman tekrar denenmeli ve her yaygın hata kodunun çözümü.
