Terbitkan game dari aplikasi AI Anda dengan MCP PlayDrop
Cara agen AI menerbitkan ke PlayDrop lewat MCP: jalur sederhana dan jalur paket, pengujian privat, publish_game_version, pembaruan, batas, dan pemulihan.
Server MCP PlayDrop memungkinkan aplikasi AI menerbitkan game ke akun PlayDrop penggunanya dan mengembalikan tautan yang tetap berfungsi di setiap pembaruan. Panduan ini berisi urutan langkahnya. Setiap langkah menautkan ke panduan yang berisi detailnya.
Sebelum membangun
- Panggil
get_documentation({topic:"index"})dan baca panduan untuk fitur yang akan dipakai game, sebelum menulis kode. Merencanakan tata letak layar penuh, simpanan, dan kontrol sejak awal membuat game tidak perlu ditulis ulang nanti. Untuk signature metode yang persis, baca topiksdk-types,server-sdk-types, danshared-types. - Panggil
list_games. Jika game sudah ada, Anda akan memperbaruinya dan mempertahankanname-nya, sehingga game tetap memiliki tautan dan pemainnya. - Pilih jalurnya. Satu berkas HTML mandiri tanpa SDK PlayDrop memakai jalur sederhana. Semua yang lain, termasuk fitur SDK apa pun, media listingan, atau server, memakai paket.
Simpan sendiri proyek sumber kreator. PlayDrop hanya menerima hasil build: PlayDrop bukan cadangan sumber dan tidak bisa mengembalikan kode sumber.
Jalur sederhana: upload_game
Kirim requestId, HTML lengkap (maksimal 10 MiB, 10.485.760 byte UTF-8), dan katalog mini. Berikan gameId untuk memperbarui game yang sudah ada. Nomor versi naik secara otomatis. Lihat game HTML sederhana untuk field-nya.
Jalur paket: siapkan, unggah, selesaikan
Panggil prepare_catalogue_upload dengan requestId, expectedCurrentVersion, dan satu bentuk input:
- Folder:
catalogue(isi catalogue.json) ditambahfiles, satu deskriptor per berkas dengan jalur relatifnya. Deskriptor berisitextlangsung, deskripsi unggahan bertanda tangan, pengikatan lampiran, ataureuseberkas dari versi yang dipertahankan. - ZIP lokal atau .play: ekstrak secara lokal, lalu kirim katalog root dan deskriptor folder. Jangan pernah memasukkan byte arsip base64 ke dalam panggilan alat.
- Lampiran ChatGPT: berikan ZIP atau .play yang sudah disediakan host sebagai
archive, dengandownload_urldanfile_idaslinya. Ukurannya boleh hingga 20 MiB terkompresi dan catalogue.json harus berada di root.
Untuk unggahan bertanda tangan, setiap deskriptor menyertakan path, contentType, sizeBytes, sha256 (64 karakter heksadesimal huruf kecil), dan md5Base64, yang dihitung secara lokal dari byte yang persis. Lakukan PUT byte tersebut ke setiap URL yang dikembalikan dengan semua header yang dikembalikan, lalu panggil complete_catalogue_upload dengan requestId yang sama.
Di ChatGPT, berkas folder bisa berasal dari lampiran yang diikat berdasarkan posisi:
attachments: [htmlFile, iconFile]
files: [{path:"index.html", attachmentIndex:0}, {path:"listing/icon.png", attachmentIndex:1, role:"LISTING", app:"my-game"}]Setiap aplikasi memerlukan version yang dideklarasikan, visibilitas (di permintaan atau di aplikasi), dan entri di expectedCurrentVersion dengan kunci berupa namanya: null untuk membuatnya, atau versi terbitan saat ini dari list_games untuk memperbaruinya. Nilai yang usang ditolak, sehingga unggahan lain tidak pernah tertimpa secara tidak sengaja.
Uji secara privat, lalu rilis
Unggah dengan visibility: "private" jika game memakai SDK atau server, atau jika pengguna Anda ingin mencobanya terlebih dahulu. Buka url di tanda terima untuk memainkan versi yang persis itu di dalam PlayDrop dengan host SDK sungguhan. Fungsi server yang di-hosting hanya berjalan di versi yang sudah diunggah, jadi uji dengan cara ini.
Setelah berfungsi, rilis versi yang persis itu dengan publish_game_version, dengan memberikan gameId, version, expectedCurrentVersion, dan, jika pengguna Anda memilihnya, visibility (public atau unlisted). Panggilan ini memakai ulang berkas, listingan, dan tinjauan yang sudah diuji. Jangan mengunggah game lagi untuk merilisnya.
Untuk mencoba build lokal di frame PlayDrop sebelum mengunggah, buka https://www.playdrop.ai/@<username>/<slug>/dev?url=<URL-encoded local address> di browser biasa pada komputer yang menjalankan server lokal.
Pilih siapa yang bisa bermain
visibility menerima public, unlisted, dan private. Untuk game baru tanpa pilihan, gunakan pengaturan yang disimpan kreator: upload_game menerapkannya saat Anda tidak menyertakan visibilitas, dan get_account menampilkannya sebagai publishing.defaultVisibility. Untuk pembaruan, pertahankan gameVisibility game dari list_games kecuali pengguna Anda mengubahnya; upload_game melakukannya saat Anda tidak menyertakan visibilitas, sedangkan paket menyatakannya. Tidak publik berarti siapa saja yang punya tautan bisa bermain; ini bukan daftar teman. Jangan pernah membuat game lebih terlihat daripada yang dimaksudkan pengguna Anda. Detail: siapa yang bisa bermain.
Berikan tautan yang tepat
Tanda terima untuk game publik dan tidak publik menyertakan shareUrl, halaman game yang bertahan: berikan tautan itu kepada pengguna Anda. Versi privat mengembalikan url, tautan versi persis untuk pemiliknya. Tanda terima paket mencantumkan setiap item; item yang sudah selesai tetap diterbitkan meskipun item berikutnya gagal.
Perbarui game
Baca list_games dan versi saat ini, pertahankan name, lalu kirim snapshot lengkap: setiap berkas yang dimaksud dan semua metadata yang dimaksud, karena field yang tidak disertakan tidak ada di versi baru. Item katalog yang tidak disertakan tidak pernah dihapus. Gunakan get_game_version untuk membaca katalog persis dari versi yang Anda ubah, termasuk status Tweaks-nya.
Batas
- Jalur sederhana: satu berkas HTML berukuran maksimal 10 MiB.
- Paket: 512 deskriptor berkas folder atau 512 entri arsip (termasuk catalogue.json dan direktori), 50 MiB per berkas, total 200 MiB setelah diekstrak, dan 1 MiB JSON katalog.
- Arsip: hanya jalur relatif yang aman; jalur duplikat, symlink, serta arsip terenkripsi, multipart, dan ZIP64 ditolak.
- Unggahan yang sudah disiapkan kedaluwarsa setelah 30 menit.
Kesalahan dan percobaan ulang
Kesalahan berisi error, message, retryable, nextAction, docsUrl, dan documentationTopic. Ikuti nextAction. Setelah respons hilang, coba lagi konten yang identik dengan requestId yang sama; konten yang diubah memerlukan ID baru. Lihat kesalahan dan pemulihan.
Gunakan send_feedback untuk melaporkan masalah yang bisa direproduksi atau langkah yang membingungkan, tanpa token atau URL bertanda tangan.