Games publiceren vanuit je AI-app met PlayDrop MCP
Hoe AI-agents via MCP op PlayDrop publiceren: de eenvoudige route en de pakketroute, privé testen, publish_game_version, updates, limieten en herstel.
Met de MCP-server van PlayDrop kan een AI-app een game publiceren op het PlayDrop-account van zijn mens en een link teruggeven die bij updates blijft werken. Deze gids beschrijft de volgorde van de stappen. Elke stap linkt naar de gids met de details.
Voordat je bouwt
- Roep
get_documentation({topic:"index"})aan en lees de gidsen voor de functies die de game gaat gebruiken, voordat je code schrijft. Wie schermvullende lay-out, saves en besturing vanaf het begin plant, hoeft de game later niet te herschrijven. Lees voor de exacte signaturen van methoden de onderwerpensdk-types,server-sdk-typesenshared-types. - Roep
list_gamesaan. Bestaat de game al, dan werk je hem bij en behoud je zijnname, zodat hij zijn link en spelers houdt. - Kies de route. Eén zelfstandig HTML-bestand zonder PlayDrop-SDK gebruikt de eenvoudige route. Al het andere, inclusief elke SDK-functie, media voor de gamepagina of een server, gebruikt een pakket.
Bewaar het bronproject van de maker zelf. PlayDrop ontvangt alleen gebouwde uitvoer: het is geen back-up van de broncode en kan geen broncode teruggeven.
Eenvoudige route: upload_game
Stuur requestId, de volledige HTML (maximaal 10 MiB, 10.485.760 UTF-8-bytes) en een minicatalogus. Geef gameId mee om een bestaande game bij te werken. Versies worden automatisch opgehoogd. Zie eenvoudige HTML-games voor de velden.
Pakketroute: voorbereiden, uploaden, afronden
Roep prepare_catalogue_upload aan met requestId, expectedCurrentVersion en één invoervorm:
- Map:
catalogue(de inhoud van catalogue.json) plusfiles, één descriptor per bestand met het relatieve pad. Een descriptor bevat inlinetext, een beschrijving voor een ondertekende upload, een koppeling aan een bijlage ofreusevan een bestand uit een bewaarde versie. - Lokale ZIP of .play: pak hem lokaal uit en stuur daarna de catalogus uit de hoofdmap en de descriptors van de map. Zet nooit base64-bytes van een archief in een toolaanroep.
- ChatGPT-bijlage: geef de ZIP of .play die de host heeft opgelost door als
archive, met de echtedownload_urlenfile_id. Hij mag gecomprimeerd tot 20 MiB groot zijn en heeft catalogue.json in de hoofdmap nodig.
Voor ondertekende uploads levert elke descriptor path, contentType, sizeBytes, sha256 (64 hexadecimale tekens in kleine letters) en md5Base64, lokaal berekend uit de exacte bytes. PUT die bytes naar elke teruggegeven URL met elke teruggegeven header en roep daarna complete_catalogue_upload aan met dezelfde requestId.
In ChatGPT kunnen bestanden in een map uit bijlagen komen die op positie worden gekoppeld:
attachments: [htmlFile, iconFile]
files: [{path:"index.html", attachmentIndex:0}, {path:"listing/icon.png", attachmentIndex:1, role:"LISTING", app:"my-game"}]Elke app heeft een opgegeven version nodig, een zichtbaarheid (op het verzoek of op de app) en een item in expectedCurrentVersion met zijn naam als sleutel: null om hem aan te maken, of de huidige gepubliceerde versie uit list_games om hem bij te werken. Een verouderde waarde wordt geweigerd, zodat een andere upload nooit per ongeluk wordt overschreven.
Eerst privé testen, dan uitbrengen
Upload met visibility: "private" wanneer de game de SDK of een server gebruikt, of wanneer je mens hem eerst wil proberen. Open de url uit het uploadbewijs om precies die versie binnen PlayDrop te spelen met de echte SDK-host. Gehoste serverfuncties draaien alleen op geüploade versies, dus test ze op deze manier.
Werkt het, breng dan precies die versie uit met publish_game_version en geef gameId, version, expectedCurrentVersion mee en, als je mens er een heeft gekozen, visibility (public of unlisted). Het hergebruikt de geteste bestanden, de gamepagina en de beoordeling. Upload de game niet opnieuw om hem uit te brengen.
Om een lokale build in het PlayDrop-frame te proberen voordat je uploadt, open je https://www.playdrop.ai/@<username>/<slug>/dev?url=<URL-encoded local address> in een gewone browser op de computer waarop de lokale server draait.
Kies wie kan spelen
visibility accepteert public, unlisted en private. Gebruik voor een nieuwe game zonder keuze de opgeslagen instelling van de maker: upload_game past die toe als je de zichtbaarheid weglaat, en get_account toont die als publishing.defaultVisibility. Behoud bij een update de gameVisibility van de game uit list_games, tenzij je mens die wijzigt; upload_game doet dat als je de zichtbaarheid weglaat, en een pakket geeft hem expliciet op. Niet vermeld betekent dat iedereen met de link kan spelen; het is geen vriendenlijst. Maak een game nooit zichtbaarder dan je mens bedoelde. Details: wie kan spelen.
Geef de juiste link terug
Uploadbewijzen voor openbare en niet-vermelde games bevatten shareUrl, de blijvende pagina van de game: geef die aan je mens. Een privéversie geeft url terug, de link naar precies die versie voor de eigenaar. Uploadbewijzen van pakketten noemen elk item; afgeronde items blijven gepubliceerd, ook als een later item mislukt.
Een game bijwerken
Lees list_games en de huidige versie, behoud de name en stuur een volledige momentopname: elk bedoeld bestand en alle bedoelde metadata, want weggelaten velden ontbreken in de nieuwe versie. Weggelaten catalogusitems worden nooit verwijderd. Gebruik get_game_version om de exacte catalogus te lezen van de versie die je wijzigt, inclusief de stand van de Tweaks.
Limieten
- Eenvoudige route: één HTML-bestand van maximaal 10 MiB.
- Pakket: 512 bestandsdescriptors voor een map of 512 items in een archief (inclusief catalogue.json en mappen), 50 MiB per bestand, in totaal 200 MiB uitgepakt en 1 MiB aan catalogus-JSON.
- Archieven: alleen veilige relatieve paden; dubbele paden, symbolische links en versleutelde, meerdelige en ZIP64-archieven worden geweigerd.
- Voorbereide uploads verlopen na 30 minuten.
Fouten en opnieuw proberen
Fouten bevatten error, message, retryable, nextAction, docsUrl en documentationTopic. Volg nextAction. Probeer na een verloren antwoord identieke inhoud opnieuw met dezelfde requestId; gewijzigde inhoud heeft een nieuwe nodig. Zie fouten en herstel.
Gebruik send_feedback om een reproduceerbaar probleem of een verwarrende stap te melden, zonder tokens of ondertekende URL's.