# Publicera spel från din AI-app med PlayDrops MCP

Så publicerar AI-agenter på PlayDrop via MCP: den enkla vägen och paketvägen, privat testning, publish_game_version, uppdateringar, gränser och felhantering.

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

PlayDrops MCP-server låter en AI-app publicera ett spel på användarens PlayDrop-konto och returnera en länk som fortsätter fungera genom uppdateringar. Den här guiden visar arbetsordningen. Varje steg länkar till guiden med detaljerna.

## Innan du bygger

1. Anropa `get_documentation({topic:"index"})` och läs guiderna för de funktioner som spelet ska använda, innan du skriver kod. Att planera helskärmslayout, sparningar och kontroller från början gör att du slipper skriva om spelet senare. Exakta metodsignaturer finns i ämnena `sdk-types`, `server-sdk-types` och `shared-types`.
2. Anropa `list_games`. Om spelet redan finns uppdaterar du det och behåller dess `name`, så att det behåller sin länk och sina spelare.
3. Välj väg. En fristående HTML-fil utan PlayDrop-SDK:t använder [den enkla vägen](https://www.playdrop.ai/sv/create/learn/html-games). Allt annat, inklusive alla SDK-funktioner, media för spelsidan eller en server, använder [ett paket](https://www.playdrop.ai/sv/create/learn/packaging).

Behåll skaparens källprojekt själv. PlayDrop tar bara emot det byggda resultatet: det är ingen säkerhetskopia av källkoden och kan inte lämna tillbaka källkod.

## Den enkla vägen: upload_game

Skicka `requestId`, hela HTML-koden (högst 10 MiB, 10 485 760 UTF-8-byte) och en minikatalog. Skicka `gameId` för att uppdatera ett befintligt spel. Versionsnumret räknas upp automatiskt. Fälten beskrivs i [enkla HTML-spel](https://www.playdrop.ai/sv/create/learn/html-games).

## Paketvägen: förbered, ladda upp, slutför

Anropa `prepare_catalogue_upload` med `requestId`, `expectedCurrentVersion` och en indataform:

- **Mapp:** `catalogue` (innehållet i catalogue.json) plus `files`, en beskrivning per fil med dess relativa sökväg. En beskrivning innehåller inline-`text`, en beskrivning av en signerad uppladdning, en koppling till en bilaga eller `reuse` av en fil från en bevarad version.
- **Lokal ZIP eller .play:** packa upp den lokalt och skicka sedan catalogue.json från roten och filbeskrivningarna för mappen. Lägg aldrig arkivets byte som base64 i ett verktygsanrop.
- **Bilaga i ChatGPT:** skicka den ZIP eller .play som värden löste upp som `archive`, med dess riktiga `download_url` och `file_id`. Den får vara upp till 20 MiB komprimerad och behöver catalogue.json i roten.

För signerade uppladdningar anger varje beskrivning `path`, `contentType`, `sizeBytes`, `sha256` (64 hexadecimala tecken med gemener) och `md5Base64`, beräknade lokalt från exakt de byte som skickas. Gör PUT med de byten till varje returnerad URL med alla returnerade headers och anropa sedan `complete_catalogue_upload` med samma `requestId`.

I ChatGPT kan mappens filer komma från bilagor som kopplas efter position:

```
attachments: [htmlFile, iconFile]
files: [{path:"index.html", attachmentIndex:0}, {path:"listing/icon.png", attachmentIndex:1, role:"LISTING", app:"my-game"}]
```

Varje app behöver en deklarerad `version`, en synlighet (i förfrågan eller i appen) och en post i `expectedCurrentVersion` med appens namn som nyckel: `null` för att skapa den, eller den aktuella publicerade versionen från `list_games` för att uppdatera den. Ett inaktuellt värde avvisas, så att en annan uppladdning aldrig skrivs över av misstag.

## Testa privat och släpp sedan

Ladda upp med `visibility: "private"` när spelet använder SDK:t eller en server, eller när din användare vill prova det först. Öppna kvittots `url` för att spela exakt den versionen i PlayDrop med den riktiga SDK-värden. Funktioner på den hostade servern körs bara i uppladdade versioner, så testa dem på det här sättet.

När det fungerar släpper du exakt den versionen med `publish_game_version` och skickar `gameId`, `version`, `expectedCurrentVersion` och, om din användare har valt en, `visibility` (`public` eller `unlisted`). Anropet återanvänder de testade filerna, spelsidan och granskningen. Ladda inte upp spelet igen för att släppa det.

För att prova ett lokalt bygge i PlayDrop-ramen innan du laddar upp öppnar du `https://www.playdrop.ai/@<username>/<slug>/dev?url=<URL-encoded local address>` i en vanlig webbläsare på datorn som kör den lokala servern.

## Välj vem som kan spela

`visibility` accepterar `public`, `unlisted` och `private`. För ett nytt spel utan uttryckligt val använder du skaparens sparade inställning: `upload_game` tillämpar den när du utelämnar synligheten, och `get_account` visar den som `publishing.defaultVisibility`. För en uppdatering behåller du spelets `gameVisibility` från `list_games` om inte din användare ändrar den; `upload_game` gör det när du utelämnar synligheten, och ett paket anger den. Olistad betyder att alla som har länken kan spela; det är ingen vänlista. Gör aldrig ett spel mer synligt än din användare avsåg. Detaljer: [vem som kan spela](https://www.playdrop.ai/sv/create/learn/distribution).

## Ge tillbaka rätt länk

Kvitton för offentliga och olistade spel innehåller `shareUrl`, spelets bestående sida: ge den till din användare. En privat version returnerar `url`, länken till den exakta versionen för ägaren. Paketkvitton listar varje post; slutförda poster förblir publicerade även om en senare post misslyckas.

## Uppdatera ett spel

Läs `list_games` och den aktuella versionen, behåll `name` och skicka en fullständig ögonblicksbild: alla avsedda filer och all avsedd metadata, eftersom utelämnade fält saknas i den nya versionen. Katalogposter som du utelämnar raderas aldrig. Använd `get_game_version` för att läsa den exakta katalogen för versionen som du ändrar, inklusive tillståndet för dess Tweaks.

## Gränser

- Den enkla vägen: en HTML-fil på högst 10 MiB.
- Paket: 512 filbeskrivningar i en mapp eller 512 poster i ett arkiv (inklusive catalogue.json och mappar), 50 MiB per fil, totalt 200 MiB uppackat och 1 MiB katalog-JSON.
- Arkiv: bara säkra relativa sökvägar; dubbla sökvägar, symboliska länkar samt krypterade, flerdelade och ZIP64-arkiv avvisas.
- Förberedda uppladdningar går ut efter 30 minuter.

## Fel och nya försök

Fel innehåller `error`, `message`, `retryable`, `nextAction`, `docsUrl` och `documentationTopic`. Följ `nextAction`. Efter ett förlorat svar försöker du igen med identiskt innehåll och samma `requestId`; ändrat innehåll kräver ett nytt. Se [fel och åtgärder](https://www.playdrop.ai/sv/create/learn/errors).

Använd `send_feedback` för att rapportera ett problem som går att återskapa eller ett förvirrande steg, utan tokens eller signerade URL:er.

## Relaterade guider

- [Enkla HTML-spel](https://www.playdrop.ai/sv/create/learn/html-games): Publicera en fristående HTML-fil på upp till 10 MiB med upload_game: vad som ryms, minikatalogen, synlighet, uppdateringar och när du ska byta till ett paket.
- [Paketering och .play](https://www.playdrop.ai/sv/create/learn/packaging): Lägg upp en byggd spelmapp, ZIP eller .play med catalogue.json i roten, deklarera media för spelsidan och servrar och ladda upp med prepare_catalogue_upload.
- [Synlighet och räckvidd](https://www.playdrop.ai/sv/create/learn/distribution): Välj vem som kan öppna ett PlayDrop-spel, hur kontots standard och versionspublicering fungerar och hur Boost, Spelutbyte, Instant och sök ger nya spelare.
- [Fel och åtgärder](https://www.playdrop.ai/sv/create/learn/errors): Formatet på felen som PlayDrops MCP-verktyg returnerar, när du ska försöka igen med samma requestId och åtgärden för varje vanlig felkod.
