spawnpop MCP
An MCP server that allows AI agents to generate Roblox game assets including GUI sets, icons, thumbnails, 3D props, and music. It plans asset kits from text descriptions, handles credit-based pricing, and provides signed download links for integration with Roblox Studio.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://spawnpop.com/mcpWhat you can do with it
- Plan a complete asset kit from a one-sentence game description
- Generate GUI sets, icons, and thumbnails for Roblox experiences
- Create 3D props and music assets for game development
- Integrate generated assets into Roblox Studio via MCP
Source and maintenance
Protocol and capabilities
- Server
- spawnpop 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 13 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
13 advertised
plan_kit — Plan a Roblox asset kit
No charge. Turns a one-sentence game idea into a priced kit (GUI, icons, thumbnail, 3D props, music). With an API key the plan is saved as a project; without one you get the same plan and price plus a link for the user to connect.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"description"
],
"properties": {
"genre": {
"enum": [
"simulator",
"tycoon",
"tower_defense",
"obby",
"rng",
"horror",
"roleplay",
"fighting"
],
"type": "string"
},
"style": {
"type": "string",
"maxLength": 300,
"description": "Art direction, e.g. \"chunky pastel cartoon\"."
},
"description": {
"type": "string",
"maxLength": 500,
"minLength": 3,
"description": "The game idea in plain words."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}draft — Draft items cheaply
Costs 13 credits per draft image. Makes low-cost previews with an AI fit check so finals are only bought for what works. confirmCredits must equal the price (items x copies x variants); requestId makes a retry free.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"itemIds",
"confirmCredits",
"requestId"
],
"properties": {
"itemIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"maxItems": 40,
"minItems": 1
},
"variants": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 4
}
],
"default": 1
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"requestId": {
"type": "string",
"pattern": "^[\\w-]+$",
"maxLength": 64,
"minLength": 8
},
"confirmCredits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}approve — Approve drafts
No charge. Marks one draft per item copy as the reference its final is made from. Use the outputId shown by get_status.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"approvals"
],
"properties": {
"approvals": {
"type": "array",
"items": {
"type": "object",
"required": [
"itemId",
"outputId"
],
"properties": {
"copy": {
"type": "integer",
"default": 0,
"maximum": 49,
"minimum": 0
},
"itemId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"outputId": {
"type": "string",
"maxLength": 64,
"minLength": 1
}
}
},
"maxItems": 40,
"minItems": 1
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}generate — Generate final assets
Spends credits. confirmCredits must equal the price of the items; if the price changed nothing is charged and price_changed comes back. Credits paid for an item's draft count toward that item's final (draft + final = the quoted price): confirming the plan_kit price is accepted and only the lower remaining price is charged. The same requestId returns the same jobs and charges nothing. itemIds may be "approved".
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId",
"itemIds",
"confirmCredits",
"requestId"
],
"properties": {
"itemIds": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"maxItems": 40,
"minItems": 1
},
{
"type": "string",
"const": "approved"
}
]
},
"options": {
"type": "object",
"properties": {
"iconStyle": {
"enum": [
"avatar_3d",
"cartoon"
],
"type": "string"
}
},
"description": "iconStyle: the game icon look when plan_kit listed styles.gameIcon."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"requestId": {
"type": "string",
"pattern": "^[\\w-]+$",
"maxLength": 64,
"minLength": 8
},
"confirmCredits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_status — Project status
No charge. One row per plan item, drafts with the AI fit verdict (fit, misfit, unjudged or pending; unjudged never blocks approve), approvals and balance. waitSeconds (0-25) returns as soon as something changes, so a call can come back earlier than that.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"waitSeconds": {
"type": "integer",
"default": 0,
"maximum": 25,
"minimum": 0
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_files — Finished files
No charge. Finished files with one-hour signed download URLs, sizes, triangle counts and stud sizes, plus a ready next-step block for Roblox Studio MCP and Open Cloud.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_projects — List projects
No charge. Your recent projects, newest first.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}generate_sprite_sheet — Generate a game sprite sheet
Spends credits (180, plus 50 for each extra animation, at most 2). Draws one character from a description in a chosen style with idle, run and attack animations and delivers the sheet, GIFs, frames and JSON via get_sprite_status. confirmCredits must equal the price; the same requestId returns the same order and charges nothing. Only one paid sprite order is open per account at a time. Without an API key nothing is spent: you get the price and links for the user.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"description",
"style"
],
"properties": {
"style": {
"enum": [
"pixel",
"cartoon",
"painted"
],
"type": "string"
},
"extras": {
"type": "array",
"items": {
"enum": [
"walk",
"jump",
"hurt",
"death"
],
"type": "string"
},
"default": [],
"maxItems": 2
},
"fromRunId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "A finished web preview of the same character: keeps its character and idle sheet, so only the rest is drawn."
},
"requestId": {
"type": "string",
"pattern": "^[\\w-]+$",
"maxLength": 64,
"minLength": 8,
"description": "Required with an API key. A new one for each new purchase, the same one to retry."
},
"description": {
"type": "string",
"maxLength": 300,
"minLength": 3
},
"confirmCredits": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "The exact price you showed the user. Required with an API key."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_sprite_status — Sprite sheet status
No charge. Progress of a sprite sheet order. When it is done: signed one-hour download links for the sprite sheet PNG, one GIF per animation, a frames zip, the sheet JSON and the character. waitSeconds (0-25) returns as soon as something changes, so a call can come back earlier than that.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"runId"
],
"properties": {
"runId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"waitSeconds": {
"type": "integer",
"default": 0,
"maximum": 25,
"minimum": 0
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}game_concept — Write a game spec from an idea
No charge. Turns a genre preset, an art-style preset and a one-line idea into a short game spec your coding agent can build from: intent (frozen), plan (milestones with testable done_when, playtest, asset manifest) and state (you update it with update_state). Returns game_spec.json plus GAME_SPEC.md, AGENTS.md and PROMPT.md to save in the project. Names of existing games, characters and brands are removed: specs are original games only. With an API key the spec is saved (specId) for get_spec, update_state and asset_kit.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"genre",
"artStyle",
"idea"
],
"properties": {
"idea": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "One sentence in your own words. No \"like <existing game>\"."
},
"genre": {
"enum": [
"obby",
"simulator",
"survivors",
"cozy",
"rpg",
"voxel",
"coop"
],
"type": "string",
"description": "obby | simulator (also tycoon) | survivors (horde) | cozy (one-verb 3D toy) | rpg | voxel (city builder) | coop (two players)"
},
"target": {
"enum": [
"roblox",
"web"
],
"type": "string",
"default": "roblox",
"description": "roblox, or web (a single-page three.js game)"
},
"artStyle": {
"enum": [
"low_poly",
"cartoon",
"voxel",
"pixel",
"watercolor",
"ink_wash",
"neon"
],
"type": "string"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}get_spec — Read a saved game spec
No charge. The saved spec (all three layers) and its handoff files. Without specId, lists your recent specs.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"specId": {
"type": "string",
"pattern": "^[a-z0-9]{8,32}$"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_state — Record build progress
No charge. Updates ONLY the STATE layer of a saved spec: milestone_status ({milestoneId: todo|doing|done|blocked}), built (lines appended) and notes (appended). The intent and the plan cannot be changed here; if the intent looks wrong, ask the human.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"specId",
"patch"
],
"properties": {
"patch": {
"description": "{ milestone_status?, built?, notes? }"
},
"specId": {
"type": "string",
"pattern": "^[a-z0-9]{8,32}$"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}asset_kit — Quote the matching asset kit
No charge here. Plans the assets a saved spec needs (GUI set with its finished screen, icons, thumbnail, props, music) in the spec's style and returns one total in credits plus a kit projectId. Show the user the total; then draft/approve/generate on that projectId exactly as after plan_kit (generate takes confirmCredits). The kit zip includes the spec files. Calling it again returns the same project.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"specId"
],
"properties": {
"specId": {
"type": "string",
"pattern": "^[a-z0-9]{8,32}$"
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1078 ms
- 95th percentile latency
- 1078 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1078 ms · metadata changed · 13 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http spawnpop-mcp https://spawnpop.com/mcpCodex
codex mcp add spawnpop-mcp --url https://spawnpop.com/mcpCursor
{
"mcpServers": {
"spawnpop-mcp": {
"url": "https://spawnpop.com/mcp"
}
}
}Cline
{
"mcpServers": {
"spawnpop-mcp": {
"type": "streamableHttp",
"url": "https://spawnpop.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"spawnpop-mcp": {
"type": "http",
"url": "https://spawnpop.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http spawnpop-mcp https://spawnpop.com/mcpClaude Desktop
{
"mcpServers": {
"spawnpop-mcp": {
"url": "https://spawnpop.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"spawnpop-mcp": {
"serverUrl": "https://spawnpop.com/mcp"
}
}
}Let your agent find its tools
Find servers like spawnpop MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.