{"name":"com.playablegift/playable-gift","title":"Playable Gift","version":"0.2.0","remotes":[{"type":"streamable-http","url":"https://playablegift.com/mcp"}],"serverInfo":{"name":"playable-gift","title":"Playable Gift","version":"0.2.0","description":"Save, preview, revise and export custom HTML video games that your agent builds from a personal joke or story. Drafts are free; checkout is Stripe test mode only.","websiteUrl":"https://playablegift.com","icons":[{"src":"https://playablegift.com/assets/playable-gift-icon.svg","mimeType":"image/svg+xml","sizes":["any"]}]},"description":"Save, preview, revise and export custom HTML video games that your agent builds from a personal joke or story. Drafts are free; checkout is Stripe test mode only.","iconUrl":"https://playablegift.com/assets/playable-gift-icon.svg","documentationUrl":"https://playablegift.com/SKILL.md","transport":{"type":"streamable-http","endpoint":"https://playablegift.com/mcp"},"capabilities":{"tools":{"listChanged":true},"resources":{"listChanged":true}},"authentication":{"required":false,"schemes":[],"note":"No account or OAuth. Gift management tools take the private per-gift managementToken returned by create_custom_game as a tool argument."},"instructions":"Make new personalized video games from genuine user-provided content. Read get_gift_catalog first. Drafts and revisions are free. Keep management tokens and idempotency keys private; use the separate preview URL to show a draft. Never promise a reserved address is live: inspect namedAddressLive. This service currently supports test payments and a test email sink only.","tools":[{"name":"get_gift_catalog","description":"Read custom game requirements, exact sandbox pricing, availability and integration endpoints. Start here.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"check_gift_name","description":"Check a lowercase gift name. Availability is advisory; creation or reservation claims it atomically.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,38})[a-z0-9]$"}},"required":["slug"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"create_custom_game","description":"Create a free private CUSTOM VIDEO GAME from a complete self-contained HTML game generated by you, the user’s agent. Build the actual gameplay around their meme, joke, family obsession or personal story—not a generic matching card game. Use inline CSS/JavaScript, embedded assets, keyboard/touch controls, clear goals and restart. No external APIs or payments inside the game. The service isolates uploaded code. Optional named address. Keep the returned management secret private. Generate a random 32-byte hex idempotencyKey and reuse it on retries. No charge or email occurs.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipient":{"type":"string","minLength":1,"maxLength":60},"sender":{"type":"string","minLength":1,"maxLength":60},"title":{"type":"string","minLength":1,"maxLength":80},"concept":{"type":"string","minLength":1,"maxLength":2000},"occasion":{"default":"just-because","type":"string","enum":["birthday","anniversary","thank-you","just-because"]},"theme":{"default":"sunshine","type":"string","enum":["sunshine","midnight","rose"]},"message":{"default":"","type":"string","maxLength":2000},"recipientEmail":{"default":"","anyOf":[{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","const":""}]},"game":{"type":"object","properties":{"html":{"type":"string","minLength":100,"maxLength":120000,"description":"Complete self-contained HTML video game, with inline CSS/JS and embedded assets. No external dependencies, fetches, forms, popups, payments or personal-data collection. Use canvas or DOM controls, keyboard/touch support, restart and clear win/lose states. Notify the parent of a win with parent.postMessage({type:'playablegift:complete'}, '*')."}},"required":["html"],"additionalProperties":false},"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,38})[a-z0-9]$"},"idempotencyKey":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["recipient","sender","title","concept","game","idempotencyKey"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"revise_custom_game","description":"Replace a custom video game draft with a revised self-contained HTML game and metadata, using expectedRevision to avoid overwriting another edit. Build the requested gameplay change in the HTML before calling this. Cannot edit once checkout starts.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipient":{"type":"string","minLength":1,"maxLength":60},"sender":{"type":"string","minLength":1,"maxLength":60},"title":{"type":"string","minLength":1,"maxLength":80},"concept":{"type":"string","minLength":1,"maxLength":2000},"occasion":{"default":"just-because","type":"string","enum":["birthday","anniversary","thank-you","just-because"]},"theme":{"default":"sunshine","type":"string","enum":["sunshine","midnight","rose"]},"message":{"default":"","type":"string","maxLength":2000},"recipientEmail":{"default":"","anyOf":[{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"string","const":""}]},"game":{"type":"object","properties":{"html":{"type":"string","minLength":100,"maxLength":120000,"description":"Complete self-contained HTML video game, with inline CSS/JS and embedded assets. No external dependencies, fetches, forms, popups, payments or personal-data collection. Use canvas or DOM controls, keyboard/touch support, restart and clear win/lose states. Notify the parent of a win with parent.postMessage({type:'playablegift:complete'}, '*')."}},"required":["html"],"additionalProperties":false},"expectedRevision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["recipient","sender","title","concept","game","expectedRevision","managementToken"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"get_gift","description":"Read your gift, current revision, preview URL, publication status and next action using its private management token.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["managementToken"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_gift_history","description":"Read the last five private content revisions. Includes personal content; keep it private.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["managementToken"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"reserve_gift_name","description":"Reserve a single gift address for your draft. A reserved name does not mean DNS or hosting is live. A named address is guessable and should be requested by the user.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"},"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,38})[a-z0-9]$"}},"required":["managementToken","slug"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"export_gift","description":"Export private gift content as portable JSON without recipient email, management tokens or payment data. Application code stays in Git; gift content stays in the database.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["managementToken"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"prepare_gift_checkout","description":"Create or retrieve a hosted Stripe TEST checkout link. Show the link and exact price to the human; this tool cannot pay. Do not submit payment details. Checkout locks the draft. Returns setup errors when credentials are absent.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["managementToken"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"confirm_gift_payment","description":"Recover a Stripe TEST payment status. Payment must be verified by the provider; a checkout success URL is insufficient. May trigger configured delivery to the Resend test sink, never a customer email.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["managementToken"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"retry_test_delivery","description":"Retry eligible sandbox delivery to delivered@resend.dev only. Requires a paid test gift; customer email delivery is unavailable.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"managementToken":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["managementToken"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}}]}