PlayDrop MCP で AI アプリからゲームを公開する
AI エージェントが MCP で PlayDrop に公開する方法:シンプルな方法とパッケージの方法、非公開テスト、publish_game_version、更新、制限、復旧。
PlayDrop の MCP サーバーを使うと、AI アプリはユーザーの PlayDrop アカウントにゲームを公開し、更新しても使い続けられるリンクを返せます。このガイドでは作業の順番を説明します。各ステップには、詳細を説明したガイドへのリンクがあります。
ビルドを始める前に
- コードを書く前に
get_documentation({topic:"index"})を呼び出し、ゲームで使う機能のガイドを読みます。全画面レイアウト、セーブ、操作方法を最初から計画しておけば、あとでゲームを書き直さずに済みます。メソッドの正確なシグネチャは、トピックsdk-types、server-sdk-types、shared-typesで確認してください。 list_gamesを呼び出します。ゲームがすでにある場合は、それを更新してnameを維持します。そうすれば、リンクもプレイヤーもそのまま引き継がれます。- 方法を選びます。PlayDrop SDK を使わない自己完結した HTML ファイル1つなら、シンプルな方法を使います。SDK の機能、掲載メディア、サーバーを含むそれ以外のすべては、パッケージを使います。
クリエイターのソースプロジェクトは、AI アプリ側で保管してください。PlayDrop が受け取るのはビルド結果だけです。ソースのバックアップではないので、ソースコードを返すことはできません。
シンプルな方法:upload_game
requestId、完全な HTML(最大 10 MiB、10,485,760 UTF-8 バイト)、ミニカタログを送信します。既存のゲームを更新するには gameId を渡します。バージョン番号は自動で上がります。フィールドについてはシンプルな HTML ゲームをご覧ください。
パッケージの方法:準備、アップロード、完了
requestId、expectedCurrentVersion と、次のいずれか1つの入力形式を指定して prepare_catalogue_upload を呼び出します。
- フォルダー:
catalogue(catalogue.json の内容)とfiles。filesには、ファイルごとに相対パス付きの記述子を1つ入れます。記述子には、インラインのtext、署名付きアップロードの情報、添付ファイルの割り当て、保持されているバージョンのファイルのreuseのいずれかを含めます。 - ローカルの ZIP または .play: ローカルで展開してから、ルートのカタログとフォルダーの記述子を送信します。アーカイブのバイトを base64 にしてツール呼び出しに入れるのは絶対にやめてください。
- ChatGPT の添付ファイル: ホストが解決した ZIP または .play を、本物の
download_urlとfile_id付きでarchiveとして渡します。圧縮後で最大 20 MiB まで使え、catalogue.json をルートに置く必要があります。
署名付きアップロードでは、各記述子に path、contentType、sizeBytes、sha256(64文字の小文字の16進数)、md5Base64 を指定します。これらはローカルで、実際のバイトから正確に計算してください。返された各 URL に、返されたすべてのヘッダーを付けてそのバイトを PUT し、同じ requestId で complete_catalogue_upload を呼び出します。
ChatGPT では、フォルダーのファイルを、位置で割り当てた添付ファイルから取得できます。
attachments: [htmlFile, iconFile]
files: [{path:"index.html", attachmentIndex:0}, {path:"listing/icon.png", attachmentIndex:1, role:"LISTING", app:"my-game"}]すべてのアプリには、宣言した version、公開範囲(リクエストかアプリに指定)、そして名前をキーとする expectedCurrentVersion のエントリーが必要です。新規作成なら null、更新なら list_games から取得した現在の公開バージョンです。古い値は拒否されるので、別のアップロードを誤って上書きすることはありません。
非公開でテストしてから公開する
ゲームが SDK やサーバーを使う場合や、ユーザーがまず試したい場合は、visibility: "private" でアップロードします。アップロード結果の url を開くと、本物の SDK ホストを備えた PlayDrop の中で、そのバージョンそのものを遊べます。ホスト型サーバーの機能はアップロード済みのバージョンでしか動かないので、この方法でテストしてください。
うまく動いたら、publish_game_version でそのバージョンをそのまま公開します。gameId、version、expectedCurrentVersion と、ユーザーが選んでいれば visibility(public または unlisted)を渡してください。テスト済みのファイル、掲載情報、審査がそのまま再利用されます。公開するためにゲームをもう一度アップロードしないでください。
アップロード前にローカルのビルドを PlayDrop のフレームで試すには、ローカルサーバーを動かしているマシンの通常のブラウザで https://www.playdrop.ai/@<username>/<slug>/dev?url=<URL-encoded local address> を開きます。
誰が遊べるかを選ぶ
visibility には public、unlisted、private を指定できます。新しいゲームで選択がない場合は、クリエイターの保存済みの設定を使います。upload_game では公開範囲を省略するとこの設定が適用され、get_account では publishing.defaultVisibility として確認できます。更新では、ユーザーが変更しない限り、list_games のゲームの gameVisibility を維持してください。upload_game では公開範囲を省略するとそうなり、パッケージではその値を明示します。限定公開とは、リンクを知っている人なら誰でも遊べるということで、フレンドリストではありません。ユーザーの意図より広く公開することは絶対に避けてください。詳しくは誰が遊べるかをご覧ください。
正しいリンクを返す
公開と限定公開のゲームのアップロード結果には、ゲームの恒久的なページである shareUrl が含まれます。ユーザーにはこちらを渡してください。非公開バージョンでは、オーナー向けのそのバージョン専用リンクである url が返されます。パッケージのアップロード結果には項目ごとの結果が並びます。あとの項目が失敗しても、完了した項目は公開されたまま残ります。
ゲームを更新する
list_games と現在のバージョンを読み取り、name を維持して、完全なスナップショットを送信します。省略したフィールドは新しいバージョンに含まれないため、意図したすべてのファイルとメタデータを含めてください。省略したカタログ項目が削除されることはありません。変更するバージョンの正確なカタログは、調整値(Tweaks)の状態も含めて get_game_version で読み取れます。
制限
- シンプルな方法:最大 10 MiB の HTML ファイル1つ。
- パッケージ:フォルダーのファイル記述子512個またはアーカイブのエントリー512個(catalogue.json とディレクトリを含む)、1ファイルあたり 50 MiB、展開後の合計 200 MiB、カタログの JSON 1 MiB。
- アーカイブ:安全な相対パスのみ。パスの重複、シンボリックリンク、暗号化、分割、ZIP64 のアーカイブは拒否されます。
- 準備したアップロードは30分で期限切れになります。
エラーと再試行
エラーには error、message、retryable、nextAction、docsUrl、documentationTopic が含まれます。nextAction に従ってください。レスポンスが失われた場合は、同じ requestId でまったく同じ内容を再試行します。内容を変えた場合は新しい ID が必要です。エラーと復旧をご覧ください。
再現できる問題やわかりにくい手順は、send_feedback で報告してください。トークンや署名付き URL は含めないでください。