com.spriteship/spriteship
REMOTE · SPRITESHIP.COM
Build a game's 2D art layer with your agent: characters, animations, tilesets, levels, 5 engines.
Available components
Last scanned (19 hours ago)
Scores higher than 90% of remote servers
Reachable. Last reached 16 Oct 2026.
Category Design and Media
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability63
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 21100 tokens (~234/item across 90 items; 90 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage90
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 71% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 90 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 91 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 1 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_map” rewrote its description, which is the text the model reads security
- Tool “set_asset_collision_body” rewrote its description, which is the text the model reads security
- Tool coverage: 82% → 71% ▼ functional
- Schema quality: 269 → 234 ▲ functional
- New tool “commit_map_draft” functional
- New tool “get_map_draft” functional
- New tool “get_project_export_command” functional
- New tool “get_project_export_review” functional
- New tool “get_project_export_status” functional
- New tool “list_map_revisions” functional
- New tool “map_authoring_context” functional
- New tool “map_authoring_schema” functional
- New tool “map_project_library” functional
- New tool “map_workbench_context” functional
- New tool “prepare_map_draft” functional
- New tool “prepare_map_edits” functional
- New tool “preview_map_draft” functional
- New tool “restore_map_revision” functional
- New tool “run_map_playtest” functional
- New tool “set_asset_collision_roles” functional
- New tool “set_character_collision_roles” functional
- New tool “start_project_export” functional
- “set_asset_collision_body” reworded the description of “collisionBody” cosmetic
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 +4
- HTTPS: unverified → pass ▲ security
- The server rewrote its instructions, which are the text every model session reads security
- Tool “suggest_motion_hint” rewrote its description, which is the text the model reads security
- Tool “animate_asset” rewrote its description, which is the text the model reads security
- Tool “create_asset” rewrote its description, which is the text the model reads security
- Tool “create_character” rewrote its description, which is the text the model reads security
- Tool “fix_asset_seams” rewrote its description, which is the text the model reads security
- Tool “generate_character_animation” rewrote its description, which is the text the model reads security
- Tool “generate_pose” rewrote its description, which is the text the model reads security
- Tool “regen_asset_pair” rewrote its description, which is the text the model reads security
- New tool “resume_pose” functional
- New tool “resume_ui_pack_batch” functional
- 23 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- 22 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “import_asset_image” rewrote its description, which is the text the model reads security
- New tool “approve_automatic_pose_fallback” functional
- 21 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “generate_character_animation” rewrote its description, which is the text the model reads security
- 20 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 16 Oct 2026 · Probed https://spriteship.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=spriteship.com | CN=WE1,O=Google Trust Services,C=US | 28 Aug 2026 | 26 Nov 2026 | ECDSA 256 | ECDSA-SHA256 | eac94809b1ef95d70e8de8b7ad9e1d0e |
| SANs: spriteship.com, media.spriteship.com, *.media.spriteship.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of spriteship.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| spriteship.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://spriteship.com/mcp | Verified | 200 | |
| http (plaintext) | http://spriteship.com/mcp | HTTPS enforced | 308 | https://spriteship.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
animate_asset Animate an asset ~622
PAID (image-to-video; Wan 3.0 costs 150 credits/second, so each default 2-second pair is 300 credits; total cost scales with duration × pair count). Animate ANY asset type — the animation lands on the source asset and its still image is preserved. For grid assets (tileset/staged) pass pairs of tile indices; a self-loop { from: n, to: n } makes one tile loop seamlessly. ASK THE USER WHICH STAGES FIRST. Call get_asset, describe the tiles you can see, and get an explicit answer on which is the START and which is the END before you spend. "Animate the treasure box" does not tell you whether they mean closed→open, open→closed, or the lid alone, and guessing wrong bills them for a clip they cannot use. The server rejects a grid animate with no pairs (400) precisely so that this choice is always made deliberately — do not satisfy it by defaulting to 0→last. Confirmed background-removal provider failures already fall back automatically on the server, without a new user charge. There is no daily removal retry lockout; honor reported cooldowns and unknown-task safeguards if recovery still fails. For already-authorized generation, automatically execute a zero-credit recovery quote and poll it; no renewed approval or refund. Never duplicate a running recovery. Limit automatic retries to two per failed job per session; stop on recurring failure or any paid quote. DEFAULTS TO A COST PREVIEW — see the dryRun argument. Returns { jobId } — poll get_job.
| Name | Type | Req | Description |
|---|---|---|---|
| assetId | string | yes | Asset id or slug. |
| closeLoop | boolean | – | Single-image assets — reuse the start frame as the end frame so the clip loops. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| durationSeconds | number | – | Clip length, clamped server-side to 2-10s. |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| iterationId | string | yes | Revision (iteration) id to animate. |
| motionHint | string | – | Extra motion guidance folded into the prompt. |
| pairs | array | – | Grid assets only — which tile transitions to animate. Omit for single-image assets. |
| videoModel | string | – | Override the video model. |
No output schema declared.
No examples provided.
approve_automatic_pose_fallback Approve an automatic pose decision ~263
Successful automatic poses now continue without review, including imports. Four-direction setup stays automatic and eight-direction keeps its existing selection. Imported generation preserves source rendering rather than project style. Use this tool only when get_job returns a pending automaticPoseFallback. If poseReview is present, this is a historical imported-pose checkpoint from an earlier flow: show originalUrl and poseUrl side by side and ask the user to check style, complete head/body and unwanted ground/scenery. Submit choice="generated" only after they accept that exact pose, or choice="original" to use their original character; include poseVersion from poseReview.version. Use cancel_job to cancel. Without poseReview, pose creation failed: ask whether to continue with the default pose or cancel, and use choice="original" to continue. Never approve automatically. Both choices resume the original approved animation request at normal video cost. Accepted generated poses are reused without another review until regenerated.
| Name | Type | Req | Description |
|---|---|---|---|
| choice | string | – | Required for an imported-pose review. Technical-failure fallback defaults to original. |
| jobId | string | yes | Job waiting for an automatic pose decision. |
| poseVersion | string | – | Exact poseReview.version shown to and approved by the user; required for an imported-pose review. |
No output schema declared.
No examples provided.
approve_directional_poses Approve directional poses ~224
FREE approval checkpoint. Use only when get_job returns status:"waiting_approval", wizardPhase:"waiting-directional-pose-approval", and directionalPoseReview. Present every returned previewUrls to the user and let them adjust or review the proposed frameIndices and poseScales. If any remain unreviewed, get explicit confirmation to use those candidates as shown before submitting the complete returned index and scale maps. When directions is present, review only those four poses, choose unique indices 0–3, keep scale 100 and preserve unused map entries. Absent directions means eight poses. Closing or declining means do not call this tool: the job remains paused and no dependent animation credits are spent. The server rechecks the live credit balance immediately before resuming paid dependent animations.
| Name | Type | Req | Description |
|---|---|---|---|
| frameIndices | object | yes | Approved source-frame index for every compass direction. |
| jobId | string | yes | Waiting job id from get_job. |
| poseScales | object | – | Approved percent scale for every compass direction (70–115). Omit to keep the review values. |
No output schema declared.
No examples provided.
cancel_job Cancel a job ~81
FREE. Abort a running job. Failed/incomplete provider work is refunded automatically. If the job is waiting for directional-pose approval, its successful reusable 360 and pose charges are retained; no dependent animation has started. Use this when a generation is clearly going wrong rather than letting it run to completion.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | Job id to cancel. |
No output schema declared.
No examples provided.
commit_map_draft Save a validated map draft ~84
FREE. Commit the exact draftHash as a recoverable revision. The existing map must still match its expectedRevision; conflicts require re-reading and merging the user’s changes. Reuse requestId for retry. The map immediately opens in the normal editor.
| Name | Type | Req | Description |
|---|---|---|---|
| draftHash | string | yes | – |
| draftId | string | yes | – |
| requestId | string | yes | – |
No output schema declared.
No examples provided.
convert_texture_to_material Convert a legacy texture to a Material ~144
FREE and SYNCHRONOUS, no AI. Copies a legacy repeat-xy texture into a new immutable Brushable Material revision; the original revision is preserved. Topdown/isometric conversions can be ready immediately when the legacy seam check passed. Platformer conversions are marked needs-review because the old texture has no paired surface ribbon. Legacy strip-only textures cannot be converted because they have no interior fill. Returns the new iteration and quality status; call get_asset afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| assetId | string | yes | Legacy texture asset id or slug. |
| iterationId | string | yes | Legacy texture revision to preserve and convert. |
| projection | string | yes | Map projection this Material will paint. |
No output schema declared.
No examples provided.
create_animation_from_pose Create a 1-frame animation from a pose ~150
FREE, no AI. Promote a pose into a real 1-frame animation (a still/idle) that is scaled to match the character's other animations and exports to every engine. Pass poseId "__idle__" to use the character's default image when it has no poses. Returns a jobId — poll get_job.
| Name | Type | Req | Description |
|---|---|---|---|
| characterId | string | yes | Character id. |
| displayName | string | – | Human-facing label. |
| fps | integer | – | Playback fps. |
| newId | string | – | Slug for the new animation ([A-Za-z0-9_-]). |
| poseId | string | yes | Pose id, or "__idle__" for the character's default image. |
No output schema declared.
No examples provided.
create_asset Create an asset ~1,830
PAID (one image call). Creates a NEW asset from a prompt in any of the six types. The default dry run now returns a strictly text-free artwork brief: no captions, labels, lettering, digits or pseudo-writing unless the user explicitly requests specific intrinsic writing on an object. Environment Kit overlays must not have die-cut sticker borders or backing. It returns both the exact semantic plan (`plan.preview`, item count/list, camera, project-derived look) and `planToken`. SHOW that preview to the user. A real call requires the same request plus that planToken; changing the prompt, project settings, type, model, or output settings invalidates it and requires a new dry run. Standard models cost 60 credits at 1K, 100 at 2K, or 150 at 4K per image/sheet, including automatic background removal and fallback; use the dry-run quote. Object (`assetType: "static"`, formerly Static Asset) defaults to four separately editable design alternatives of the requested object, not a state sequence. All four share project style and one of five world cameras; explicitly requested flat inventory/UI icons use front/content_type. Explicit one remains supported. Clean cutouts omit incidental scenery and sticker backing, not real outlines or integral bases. Never automatically reroute asset types. Object States (`staged`) is one object in exactly four ordered states on a 2×2 sheet; no filler or automatic animation. Preserve identity, shared physical scale and real size changes. Object Collection (`tileset`) and Environment Kit (`terrain`) propose 1–25 useful pieces when no count is specified; explicit lists/counts are preserved without grid-filler extras. Object Collections contain independently editable mixed items, variants, matching families, icons/symbols or cards/tokens—not automatic animation stages. World props follow project camera; flat icons/cards use front-facing presentation even in isometric projects, unless the user explicitly requests another view. Preserve requested intri…
| Name | Type | Req | Description |
|---|---|---|---|
| aspectRatio | string | – | BACKGROUND only — OPTIONAL, and best left unset: the server applies the recommended ratio for the chosen sub-type (e.g. 21:9 for a parallax layer, 1:1 for a ground fill), which is what the web wizard… |
| assetType | string | yes | `static` = Object (formerly Static Asset), four separately editable design alternatives by default (explicit one supported); each may also be animated; tileset = Object Collection, one coordinated se… |
| backgroundResolution | string | – | BACKGROUND only — output tier (default 2K). 4K costs more. |
| bgType | string | – | REQUIRED for assetType "background" — prefer scene (one opaque full scene), distant_backdrop (one opaque far vista), depth_layer (one scenery layer with transparent gaps), or foreground_overlay (tran… |
| bgViewType | string | – | BACKGROUND only — which view the background is drawn for. Defaults to the project gameType. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| gridCols | integer | – | Legacy compatibility only; the confirmed plan decides columns. |
| gridRows | integer | – | Legacy compatibility only. The confirmed semantic plan owns layout. Object Collection and Environment Kit never add items just to fill cells. |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| imageModel | string | – | Override the image model for non-Material assets. Materials use the server-owned MATERIAL_IMAGE_PRIMARY provider route. |
| name | string | – | Display name (defaults to the prompt). |
| perspective | string | – | Environment Kit only — legacy three-value camera override. Omit to retain the project’s distinct side, angled top-down, overhead, isometric or adventure camera; request finer camera changes in the pr… |
| planToken | string | – | REQUIRED when dryRun=false. Copy unchanged from the immediately preceding dry-run response. |
| projectId | string | yes | REQUIRED. Owning project (create_project / list_projects). Supplies gameType + default style. |
| prompt | string | yes | What to generate. Describe the subject, not the art style — style comes from the project. |
| referenceAssetUrls | array | – | Up to 4 reference image URLs to condition the generation. URLs only — raw base64 is rejected on this surface. |
| runtimeUse | string | – | OBJECT only (`assetType: "static"`; formerly Static Asset). Material is locked to deterministic brush rendering server-side. Declares how the art is meant to be rendered — particle_emitter, deformabl… |
| slug | string | – | Stable handle used by every /assets/:id call ([a-z0-9-]). Auto-derived from the name when omitted. |
| style | string | – | Override the project's art style for this asset only. |
| targetTileSize | integer | – | Output tile side in px (16-512). |
| textureKind | string | – | LEGACY compatibility only. New Materials derive platformer/topdown/isometric projection from the project gameType; this value does not change their donor contract. |
| tileSize | number | – | TERRAIN only — output tile size in px (64, 128 or 256). |
No output schema declared.
No examples provided.
create_character Create a character ~948
PAID (standard 1K: 60 credits; 2K: 100; 4K: 150; premium models may differ). Generate a NEW character from a text prompt. This is the entry point for building art from nothing — call create_project first if the user has no project. Artwork is strictly text-free by default: no labels, captions, lettering or pseudo-text; only specific intrinsic writing explicitly requested by the user is permitted. IMAGE ONLY: it produces the character still, not animations. Animation is a separate explicit step (generate_character_animation for a walk cycle, generate_character_turn for the 360 rotation), because animating costs several times more and the user should choose it. BY DEFAULT it requests FOUR DESIGN VARIATIONS FOR THE SAME PRICE, matching the dashboard. Set generateFourVariations:false only when the user explicitly wants one character. gridRows:2 + gridCols:2 remain the legacy trigger for the same four-character mode; one image call is split by complete character silhouettes, never fixed cells. Four is the expected count, but any result with at least two separate silhouettes succeeds; every clearly separated full character is preserved whether two, three, or more than four are found. Zero or one means the sheet was not extractable and refunds. Show the user every result and let them pick. Returns { jobId, expectedCharacterCount } — poll get_job; on status:"done" its characterIds and characterPreviews tell you which characters exist and what they look like. gameType defaults from the project but can be overridden for this character. Use topdown for the Top-Down Angled character pipeline, including characters intended for isometric projects. Passing isometric is accepted as an alias and creates a topdown character because that is the measured working directional pipeline. The STORED CHARACTER gameType — not the project gameType — controls every later animation and whether a user-facing 360 turn is available. A topdown character inside a platformer project therefore keeps t…
| Name | Type | Req | Description |
|---|---|---|---|
| cameraAngle | number | – | Camera elevation in degrees — only meaningful for angled top-down projects. |
| characterImageSize | string | – | Aspect ratio of the generated image. Omit for the game-type default. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| gameType | string | – | Character perspective override. Omit to inherit the project. Use topdown for Top-Down Angled and isometric projects; isometric is mapped to topdown. The stored value controls later animation behavior… |
| generateFourVariations | boolean | – | Defaults to true, matching the dashboard: one image call produces four design variations for the cost of one. Set false only when the user explicitly requests a single character. |
| gridCols | number | – | Legacy equivalent of the default four-variation mode: set to 2 together with gridRows:2; extraction follows complete silhouettes. |
| gridRows | number | – | Legacy equivalent of the default four-variation mode: set to 2 together with gridCols:2. This is not cut geometry. |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| imageModel | string | – | Override the image model. Omit unless the user asked for a specific one. |
| projectId | string | yes | REQUIRED. The project the character belongs to — it supplies the default gameType and style. |
| prompt | string | yes | What the character is, e.g. "a plague doctor with a lantern". Describe the subject, not the art style. |
| referenceAssetUrls | array | – | URLs of existing images to steer the design. URLs only — base64 is rejected by the API. |
| style | string | – | Art-style override. Omit to inherit the project's style — usually correct, since a project should look consistent. |
No output schema declared.
No examples provided.
create_project Create a project ~263
FREE and SYNCHRONOUS (no jobId — do not poll). Creates the container everything else needs: characters and assets are created INSIDE a project, and the project's gameType is what decides how they are drawn and animated. Also seeds a starter level map, so the game preview has something real to render immediately. Call list_projects first — reuse an existing project rather than making a near-duplicate.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional project description. Feeds the prompt context for later generations. |
| gameType | string | yes | REQUIRED and permanent for everything in the project. platformer = side view with gravity; topdown = 4/8-direction overhead-ish (Zelda-like); topdown_overhead = straight down; isometric = 2:1 diamond… |
| name | string | yes | Project name shown in the dashboard. |
| style | string | – | Optional art-style id applied as the default for generations in this project. |
| styleGuide | object | – | Reviewed palette, rendering and typography. Saved as active revision 1 for future generations; font IDs must belong to the available catalog. Omit to create without a guide. |
No output schema declared.
No examples provided.
create_ui_composition Assemble UI components ~73
Create a free static composition of existing icon/frame revisions; indicators and functional widgets remain independent. No new image generation.
| Name | Type | Req | Description |
|---|---|---|---|
| children | array | yes | – |
| height | integer | yes | – |
| name | string | yes | – |
| packId | string | yes | Owned UI Pack ID. |
| width | integer | yes | – |
No output schema declared.
No examples provided.
create_ui_pack Create UI Pack ~45
Create an empty project-owned UI Pack with its guide snapshot. Free; generation is a separate quoted action.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| projectId | string | yes | – |
No output schema declared.
No examples provided.
duplicate_animation Duplicate an animation ~117
FREE, synchronous, no AI. Make an exact copy of the CURRENT saved animation under a new slug, preserving its selected frame order, loop/hold settings, compositing, mounts, and rendered pixels. The original is untouched. Returns { jobId: null, animation }; do not poll a job.
| Name | Type | Req | Description |
|---|---|---|---|
| animation | string | yes | Source animation slug. |
| characterId | string | yes | Character id. |
| newId | string | – | Slug for the copy ([A-Za-z0-9_-], default "<source>_copy"). |
No output schema declared.
No examples provided.
export_map Export map (JSON) ~223
Engine-ready map JSON built from the SAVED level data, preserving placement name/gameplayId and baking custom-field values. Every engine retains materialRendering and materialRenderingResolved when present. Bundles include material-rendering.json and bake styled terrain/areas into PNGs: never apply shading twice or replace baked art with raw donor tiles. Pixel materials require nearest filtering without mipmaps; keep semantic terrain for gameplay. GameMaker uses the supplied tizo_draw_tile Draw helper; Tiled consumers configure filtering from metadata. All engine JSON exports retain materialAreas; bundles also retain semantic outlines in material-areas.json, alongside clipped artwork. Never render both as duplicate visuals. Phaser JSON materialAreaSource needs mask/blend rendering in URL mode, not the raw donor rectangle. For the zip bundle (per-tile PNGs, loader scripts, tileset files) use get_export_command instead.
| Name | Type | Req | Description |
|---|---|---|---|
| engine | string | – | Target engine (default tiled). Unreal is a beta Paper2D artwork importer; native verification and gameplay integration remain pending. |
| mapId | string | yes | Map id. |
No output schema declared.
No examples provided.
fix_asset_seams Fix a legacy texture's seams ~446
LEGACY ONLY; new Brushable Materials reject this operation because they use world-space sampling. PAID (60 credits per standard-model edit attempt; use the dry-run quote). Make an old texture tile seamless. Legacy textures were created as raw grid cells, so CHECK get_asset first: metadata.seamless.seamMetric.pass is a FREE verdict on whether this cell already tiles cleanly, and metadata.seamless.fixed tells you if it was already fixed. Do not spend on a cell that passes. The fix lands as a new current revision. Confirmed background-removal provider failures already fall back automatically on the server, without a new user charge. There is no daily removal retry lockout; honor reported cooldowns and unknown-task safeguards if recovery still fails. For already-authorized generation, automatically execute a zero-credit recovery quote and poll it; no renewed approval or refund. Never duplicate a running recovery. Limit automatic retries to two per failed job per session; stop on recurring failure or any paid quote. DEFAULTS TO A COST PREVIEW — see the dryRun argument. Returns { jobId } — poll get_job.
| Name | Type | Req | Description |
|---|---|---|---|
| assetId | string | yes | Legacy texture asset id or slug (not a Material with a material recipe). |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| iterationId | string | yes | Revision (iteration) id to fix. |
No output schema declared.
No examples provided.
frame_animation Animate a grid asset from its own tiles ~251
FREE, and NO AI AT ALL — no video model, no credits, nothing to approve. The tiles of a tileset/staged asset ARE the frames: give the tile indices in playback order (repeats allowed) and they are composited into a real spritesheet animation on that asset, exportable to every engine. This is how you animate a coin flip, a flickering torch or a chest opening WITHOUT paying for image-to-video. Try this before animate_asset whenever the motion already exists across the tiles. Returns a jobId — poll get_job.
| Name | Type | Req | Description |
|---|---|---|---|
| assetId | string | yes | Asset id or slug (must be a grid asset: tileset or staged). |
| fps | integer | – | Playback fps (1-30, default 12). |
| frameIndices | array | yes | Tile indices in playback order, e.g. [0,1,2,3,2,1]. At least 2, at most 120. Repeats are allowed — that is how you hold or ping-pong a frame. |
| iterationId | string | yes | Revision (iteration) id whose tiles are the frames. |
| name | string | – | Label for the animation (default "Frames"). |
No output schema declared.
No examples provided.
generate_character_animation Generate character animations ~1,830
PAID, and the cost MULTIPLIES BY THE NUMBER OF ANIMATIONS (each is its own image-to-video call; Wan 3.0 costs 150 credits/second, so its default 2-second clip is 300 credits). All frames are text-free by default: no subtitles, captions or invented writing. This is real motion — a walk cycle, an attack, an idle bob — not the 1-frame still that create_animation_from_pose produces. Read the character's gameType and use the standard animation names for it (get_character shows what already exists); the project gameType is irrelevant after character creation. A topdown character inside a platformer project still uses top-down prompts and directional behavior. A name that already exists is NEVER replaced: the server allocates the next numeric slug (walk → walk_2 → walk_3), and the returned animations list contains the resolved names. Ask the user which animations they want before spending: 4 animations cost 4x. For a topdown character, resolve the animation direction mode BEFORE choosing those animation names. Read animationDirection from get_character and preselect its Luna-classified mode; let the user override it. Pass animationDirectionMode on both the dry run and confirmed request: overhead uses one engine-rotated sprite with base action names and no 360; four_direction uses S/N/E/W rows with FREE four-pose image setup; eight_direction also uses diagonals and keeps the regular 360 video setup (+200 credits when newly needed). Overhead setup is free; animation videos are priced separately. Setup and Luna run only after animation generation is confirmed; the server creates the poses and automatically assigns matching facings without pose approval for four_direction, then continues animation generation. Poll all operation jobs while queued or running; an approved directionalPoseReview is a completion record, not a user checkpoint. The chosen mode is saved on the character. A missing classification is not permission to guess silently. Every animation defaults to 2 second…
| Name | Type | Req | Description |
|---|---|---|---|
| animDurations | object | – | USER-REQUESTED OVERRIDES ONLY (2-10s). Omit this field by default: every animation, including walks and loops, defaults to 2s. Never choose a longer clip unless the user explicitly requested that dur… |
| animPrompts | object | – | Per-animation extra guidance, keyed by animation slug. Folded into that animation's composed prompt. |
| animationDirectionMode | string | – | Choose this BEFORE selecting animations for a topdown character and pass it on dry-run plus confirmation. Preselect get_character.animationDirection.mode when present (Luna suggestion; user may overr… |
| animationPipelineAssignmentToken | string | – | Opaque server proof returned by this tool's dry-run. Copy it verbatim into the confirmed dryRun:false call; never create or edit it. If the server reports ANIMATION_PIPELINE_ASSIGNMENT_EXPIRED, previ… |
| animations | array | yes | Animation slugs to generate, e.g. ["walk_right","idle"]. REQUIRED — each one is a separate paid video call. |
| characterId | string | yes | Character id. |
| customAnims | object | – | Define animations that are NOT part of the game type's standard set, keyed by the new slug. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| mirrorAnims | object | – | FREE mirrored copies, keyed newName → sourceName (e.g. { "walk_left": "walk_right" }). The source must be in this call's animations list; its fresh frames are flipped in the same job at no extra cost. |
| poseFirstFrameIds | object | – | Optional per-animation START anchor pose ids, keyed by animation slug. Resolve ids with list_character_poses and use only status:"done" poses. Omit an entry to let the server choose/generate its anch… |
| poseLastFrameIds | object | – | Optional per-animation END anchor pose ids, keyed by animation slug. Resolve ids with list_character_poses and use only status:"done" poses. The same pose id may be used for both endpoints of a loop. |
| targetFacings | object | – | Camera-relative facing per animation slug (n, ne, e, se, s, sw, w, nw). Omit for overhead; four_direction accepts only n/e/s/w. Use this for custom actions and any standard action whose slug does not… |
| videoModel | string | – | Override the video model. |
No output schema declared.
No examples provided.
generate_character_turn Generate a 360 turn animation ~672
PAID (200 credits — ONE 2-second rotation video), except retrying the exact failed job is FREE while its provider task/result or validated stored source survives. The default dry run reports 0 credits and recovery:"stored_artifact" in that case; confirmation revives the same job and never starts another paid provider task. Spins the character through a full 360 so the sprite exists from every side; its frames are also what the directional-pose extractor reads, which is what makes top-down characters usable in more than one facing (isometric projects use top-down characters). ONLY topdown and isometric characters are supported — any other game type errors 400 TURN_NOT_SUPPORTED (topdown_overhead: the engine rotates the sprite image; platformer/point_and_click: side/front views, mirror instead). Eligibility reads the STORED CHARACTER gameType, not its project: a topdown character inside a platformer project is supported. This explicit visible turn is separate from the internal mid-walk rotation that generate_character_animation may plan for eligible directional walk/run clips; do not call it as mandatory setup for every animation. Lands as the animation "turn", or "turn_<seedPoseId>" when seeded from a pose. An existing turn is NEVER replaced: an occupied name becomes turn_2, turn_3, and so on. It 409s (ENTITY_BUSY) while ANY other job is running on the character, because it rebuilds the spritesheet: poll that job first. Returns { jobId, animation, resumed } — poll get_job. A successful standalone 360 finishes at done after its animation is rebuilt; it does not open the directional-pose approval checkpoint. Only an internal 360 planned by generate_character_animation pauses for directionalPoseReview before dependent animation videos start. If a retained provider URL is repeatedly proven expired, support may set discardPendingResult:true and preview again; that explicit escape abandons the stale result and is a new paid generation. DEFAULTS TO A COST PREVIEW — see the…
| Name | Type | Req | Description |
|---|---|---|---|
| characterId | string | yes | Character id. |
| discardPendingResult | boolean | – | Support escape hatch only: true abandons a repeatedly expired/unusable failed provider result and previews/starts a new paid turn. Omit for normal free recovery. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| seedPoseId | string | – | Rotate a specific DONE pose instead of the character's default image. Lands as "turn_<poseId>". |
No output schema declared.
No examples provided.
generate_pose Generate a character pose ~347
PAID (standard 1K: 60 credits; 2K: 100; 4K: 150; premium models may differ). Generate a new pose for a character from a text description. DEFAULTS TO A COST PREVIEW — see the dryRun argument. Returns { poseId } once executed; poses have no jobId, so poll list_character_poses until status is done or error.
| Name | Type | Req | Description |
|---|---|---|---|
| characterId | string | yes | Character id. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| imageModel | string | – | Override the image model. |
| name | string | yes | Short pose name, e.g. "casting". |
| poseDescription | string | yes | What the character should be doing, e.g. "kneeling, shield raised". |
| referencePoseId | string | – | Seed from an existing DONE pose instead of the base image. |
No output schema declared.
No examples provided.
generate_project_intake Turn a game idea into a project foundation ~382
PAID but very cheap and SYNCHRONOUS. Use this for a broad game vision, story, or mood before create_project. Returns a proposed project name, game type, art style, world description, creative guidance, and a validated styleGuide object ready to pass unchanged to create_project. It stores nothing and does not create assets. Afterward, inspect the game repository and propose an MVP art plan before any image or animation spend. Skip this tool when the user already supplied a complete project/style guide or asked for one specific asset. DEFAULTS TO A COST PREVIEW — see the dryRun argument.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | yes | The game vision in the user's own words: story, mechanics, setting, mood, and audience. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| gameTypeHint | string | – | Optional locked gameplay camera/type. |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| nameHint | string | – | Optional working title. Explicit user choices win over inference. |
| references | array | – | – |
| styleHint | string | – | Optional locked art direction. |
No output schema declared.
No examples provided.
generate_project_vision Generate a project creative brief ~392
PAID but very cheap (one configured text-model call) and SYNCHRONOUS — the result comes back in this response, there is no jobId to poll. Turns a rough game idea into { aiVision, aiPromptGuidance, aiNegativeGuidance }: a written creative direction plus the positive/negative guidance to reuse in later prompts, which is what keeps a whole project visually consistent instead of every asset drifting. Stores NOTHING — feed the wording into create_project (description/style) and into your own prompts. DEFAULTS TO A COST PREVIEW — see the dryRun argument.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | The idea in the user's own words: setting, mood, mechanics. |
| dryRun | boolean | – | DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a… |
| gameType | string | yes | The view the game is played in — the brief is written for it. |
| idempotencyKey | string | – | Optional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot doub… |
| name | string | yes | Working title of the game. |
| references | array | – | Up to 6 tagged reference images the model can look at. |
| style | string | – | Art style, if the user already has one in mind. |
No output schema declared.
No examples provided.
generate_ui_pack Generate UI Pack ~194
Get a cost preview for an exact component list and batch breakdown, then generate using the returned signed quote. Every paid raster/SVG batch is 100 credits; one pack action can contain several batches. Fonts are free. Defaults to dry-run; never alter the quote.
| Name | Type | Req | Description |
|---|---|---|---|
| dryRun | boolean | – | Show the user estimatedCredits and ask whether to proceed, unless already authorized in this session. Prefer the client native question UI with Approve / Decline / Discuss choices; otherwise accept a… |
| idempotencyKey | string | – | Reuse the same key when retrying a confirmed request. |
| packId | string | yes | Owned UI Pack ID. |
| quote | object | – | Unmodified signed quote returned by the dry-run. Required when dryRun is false. |
| request | object | – | – |
No output schema declared.
No examples provided.
get_asset Get asset ~255
One asset with its revision iterations and typed animation projection. Accepts the asset id OR its slug. New Material assets use the wire-compatible `texture` type and expose a typed `material` block containing the versioned donor recipe and its platformer, topdown, or isometric projection. Legacy textures may instead carry metadata.seamless.seamMetric and support fix_asset_seams. Generation Contract assets expose `generationPlan` plus `extraction`. `extraction.status:"exact"` means the planned number of logical foreground objects was recovered; `"recovered"` means small detached decorations were safely grouped; `"needs_review"` preserves every detected object and carries a warning instead of silently deleting or inventing one. `grid.tiles[].url` returns each extracted object as its own transparent PNG; the grid is a rebuilt presentation layout, not the geometry used to cut the model output. Legacy assets without `extraction` retain their historical fixed-grid metadata and should still be reviewed with the old grid fields. Backgrounds carry a `background` block echoing the sub-type, view and the aspect ratio actually generated — read it back to confirm the shape when you left aspectRatio unset.
| Name | Type | Req | Description |
|---|---|---|---|
| assetId | string | yes | Asset id or slug. |
No output schema declared.
No examples provided.
get_character Get character ~253
The full PhaserCharacter JSON: animations, frameSize, gameType, animationDirection, per-group atlas + spritesheet URLs, poses and mount points. For topdown characters, animationDirection is Luna's saved mode suggestion or the user's last override; preselect it before asking for overhead, four-direction, or eight-direction animation generation. The top-level animationQualityGate is the delivery verdict per animation: ready:true means its deliveredIssues list is empty; needs_review means follow its actions before claiming the animation is ready; unscored means inspect the frames because no machine score can certify it. Check collision automatically: while an animation plays use animations[activeName].collisionBody before the character-level collisionBody; while displaying a pose use pose.collisionBody first. Fall back to a bbox only when the resolved body is absent. Bodies are normalized to the FULL untrimmed frameSize — never subtract atlas spriteSourceSize/alpha-trim offsets. Every binary URL is presigned and expires in ~1h — download immediately, never store or commit one. The in-app preview exercises shared export data, but validate the downloaded bundle and its supplied loader in the target engine before shipping.
| Name | Type | Req | Description |
|---|---|---|---|
| characterId | string | yes | Character id. |
No output schema declared.
No examples provided.
get_character_manifest Get character manifest ~96
The self-describing export contract (tizo-export.json manifest + its JSON Schema) without downloading the zip. Use this to learn the Phaser integration shape and field meanings before wiring an export into a game project. Its files[] is a logical canonical inventory, not an exact archive listing; use get_export_command and read the downloaded zip's tizo-export.json when exact shipped contents matter.
| Name | Type | Req | Description |
|---|---|---|---|
| characterId | string | yes | Character id. |
No output schema declared.
No examples provided.
get_credits Get credit balance ~363
Current credit balance, and optionally the recent ledger. Every ledger entry carries apiKeyId/apiKeyName so you can see exactly what THIS key spent. Check the balance before proposing any paid generation. When the balance will not cover what the user wants, say what IS affordable rather than only that they are short — "1200 for all three animations, you have 900, so two now or top up for all three" is the useful answer. API-key calls can use the account's full wallet balance; the dashboard-only 600-credit experiment and its activation exception do not apply. freeCreditLimit therefore reports applies:false with exemptionReason:"api_key". Two remaining walls need OPPOSITE advice: running out of BALANCE is fixed by buying credits (the 402 carries a topUpUrl — send that link, never quote prices, they change), while hitting the key's DAILY SPEND CAP is not a money problem at all — the credits are already in the account, and the fixes are raising the cap or waiting for resetsAt. Never suggest a purchase for a cap trip. If the user asks HOW to raise the cap: the 403 carries capSettingsUrl — give them that link and tell them to edit the key there. YOU cannot change it, by design: the cap edit needs a logged-in session and is unreachable with an API key, because a key that could raise its own cap would not be a cap. Do not retry hoping it passes, and do not ask them to paste credentials.
| Name | Type | Req | Description |
|---|---|---|---|
| apiKeyId | string | – | Filter ledger entries to one key (UUID). |
| includeLedger | boolean | – | Also return recent ledger entries. |
| limit | integer | – | Max items to return (default 100, max 500). |
No output schema declared.
No examples provided.
get_custom_fields Get custom field definitions ~96
Typed custom-field definitions for a character or asset, plus the derived builtins ($animation for characters, $autoplay/$loop for animated assets). Per-placement VALUES ride on get_map; map exports bake resolved values and ship fields-schema.json. Read-only here — definitions are edited in the dashboard.
| Name | Type | Req | Description |
|---|---|---|---|
| entityId | string | yes | Character id, or asset id/slug. |
| kind | string | yes | Which entity table to read. |
No output schema declared.
No examples provided.
get_export_command Get export download command ~275
Build the authenticated download URL + a ready-to-run curl line for a zip export (character engine bundle, asset bundle, or map bundle). Run the curl in your own shell — zips are multi-MB binaries and must not be passed through the model. Phaser character exports may select size 512, 256, 128, or 64; the selected sheet/atlas pairs keep canonical size-agnostic filenames. Sparrow XML is character-only: preserve the bundle's Sparrow prefixes and multisparrow assetPath routing. This tool exports whole characters, not a dashboard single-animation selection. Requires SPRITESHIP_API_KEY to be set in that shell.
| Name | Type | Req | Description |
|---|---|---|---|
| engine | string | yes | Target engine. "fnf" is characters only and emits Sparrow PNG/XML plus character JSON. "tiled" is maps only; sprites have no Tiled emitter. "unreal" is beta Paper2D artwork/flipbook import, not autom… |
| entityId | string | yes | Character id, asset id/slug, or map id. |
| size | string | – | Phaser character exports only — narrow the zip to one downscale variant. Godot, Unity, GameMaker, Unreal and Sparrow XML use full-resolution source frames; omit size for them. |
| target | string | yes | What to export. |
No output schema declared.
No examples provided.
get_frames Get animation frames ~213
Presigned per-frame thumbnails for a character animation or an asset motion pair — never inline base64. Use format:"sheet" to get ONE index-labeled contact sheet, which lets you judge a whole capture in a single look; that is the intended way to pick which frames to keep before calling select_frames.
| Name | Type | Req | Description |
|---|---|---|---|
| animation | string | – | Animation slug — required when target=character. |
| entityId | string | yes | Character id (target=character) or asset id/slug (target=assetPair). |
| format | string | – | "sheet" returns one labeled contact sheet. |
| indices | string | – | Comma-separated frame indices to subset, e.g. "0,4,8". |
| pairId | string | – | Motion pair id — required when target=assetPair. |
| size | – | – | Max thumbnail edge (default 256, cap 1024). "full" opts out of downscaling. |
| target | string | yes | Frames of a character animation, or of an asset motion pair. |
No output schema declared.
No examples provided.
get_integration_status Check SpriteShip skill updates ~117
Free advisory version check. Call once when starting SpriteShip work in a session, passing the version actually read from the installed skill; omit it when unknown. Report an available update with its release summary and manual update guide once, then continue compatible work. Unknown is not outdated; never downgrade a newer local copy. Does not install files, grant permissions, spend credits or require an update.
| Name | Type | Req | Description |
|---|---|---|---|
| installedSkillVersion | string | – | Stable major.minor.patch version from the installed SpriteShip instructions; omit for unversioned or unknown copies. |
No output schema declared.
No examples provided.
get_job Get job status ~410
Poll a background job. Every write tool that returns a jobId is polled here. On status:"error" the response is enriched with failureKind, failureAction, attempt-scoped creditsRefunded, retryCost, retryMode, and retryRecovery. If failureAction is edit_input, change the prompt or reference inputs and create a new generation instead of calling retry. Poll every few seconds — generations routinely take minutes. THIS IS HOW YOU LEARN WHAT A CREATE CALL MADE: characterIds / assetIds list the entities this job produced — ONE normally, FOUR when create_character ran with the 2x2 variation grid — and on status:"done" characterPreviews carries a presigned image per character so you can show the user the options and let them pick. IMPORTANT FOR CHARACTER ANIMATION JOBS: status:"done" means processing finished, not that the animation is ready. The response carries animationQualityGate.status:"check_required" with the affected animationNames; you MUST call get_character and resolve each affected animation until its gate is ready (or report that it needs review). Do not export, sync, or claim completion before this check. queued:true means it has not started yet (waiting for a slot) and has spent nothing. On any TERMINAL status (done or error) the response carries a `credits` block — { charged, refunded, net, balance, spendCapDaily, spentLast24h, capRemaining }. TELL THE USER `credits.net` AND `credits.balance` when the work finishes, in one short line. Report `net`, never your own pre-flight estimate: the two differ routinely — a 2x2 grid is ONE charge for four entities and failed steps are refunded — so quoting the estimate can report a cost that never happened. Do NOT attach a purchase suggestion to a successful generation; only raise buying credits when a call is actually blocked or the balance will not cover what the user asked for next.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | Job id. |
No output schema declared.
No examples provided.
get_map Get map ~301
A map row plus its saved level data, revision and dependency-sensitive contentVersion for plan_sync. Preserve the returned contentVersion in the map lock entry after a successful import. Every placement has an immutable internal id and may have a user-authored mapData.materialRendering v1 snapshots the art style with optional profile, edgeMode and pixelSize overrides. Preserve it; it affects materials only, never geometry/physics. Hard edges suppress feathering without deleting saved blend widths. Absent settings retain original appearance. materialArea v1 visual fill: preserve its closed shape, material revision, repeatSize and blendWidthPx (inherits layer materialAreaBlendPx, default 16). Areas imply no swimming, damage or collision. Terrain layer can contain both materialGrid cells and materialArea objects: draw cells first, then shapes in array order. Honor materialArea.hidden. Terrain stays above Background and below object layers. Each placement can have a name plus map-unique gameplayId for game-code references; layers, Navigation paths, and per-placement custom-field values are included. Terrain materialGrid cells include elevation and continuous ramps; appearance.elevationShading (0–1, default 0.35) controls slope lighting, opaque cliff shading, and height-edge cues together, not collision. Zero disables all elevation lighting. Cell dimensions are authoritative; editor grid guides are not saved. Returns mapData:null when the map has never been saved.
| Name | Type | Req | Description |
|---|---|---|---|
| mapId | string | yes | Map id. |
No output schema declared.
No examples provided.
get_map_draft Read a map draft ~31
Read a prepared map draft, resolved document, hash and expiry.
| Name | Type | Req | Description |
|---|---|---|---|
| draftId | string | yes | – |
No output schema declared.
No examples provided.
get_project Get project ~54
One project with its description, registered mount slots, and saved style guide. The legacy assetSuggestions field is currently always null because automatic suggestions are disabled; do not poll for it.
| Name | Type | Req | Description |
|---|---|---|---|
| projectId | string | yes | Project id. |
No output schema declared.
No examples provided.
get_project_export_command Download complete game project ~73
Return an authenticated shell download command for a ready project export job. This tool checks status first and never starts a build. Run the command outside the model; do not transmit ZIP bytes through MCP. Supports Phaser, Godot and Unity.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | – |
| projectId | string | yes | – |
No output schema declared.
No examples provided.
get_project_export_review Review complete project export ~90
FREE. Check all saved maps, character and asset dependencies, choose the starting map/player, and inspect target-runtime compatibility before downloading an editable complete Phaser, Godot or Unity project. Errors block export; custom game code remains your responsibility.
| Name | Type | Req | Description |
|---|---|---|---|
| engine | string | yes | – |
| playerCharacterId | string | – | – |
| projectId | string | yes | – |
| startMapId | string | – | – |
No output schema declared.
No examples provided.
get_project_export_status Check complete project export ~72
FREE. Read a queued export job. Poll queued/running jobs about every two seconds. Ready jobs include the artifact size and expiry; failed jobs explain what to fix before retrying. Use get_project_export_command only once ready.
| Name | Type | Req | Description |
|---|---|---|---|
| jobId | string | yes | – |
| projectId | string | yes | – |
No output schema declared.
No examples provided.
get_project_style_guide Read project style guide ~43
Read the current guide; old projects without an adopted guide receive an initial suggestion. Existing assets retain their saved guide versions.
| Name | Type | Req | Description |
|---|---|---|---|
| projectId | string | yes | – |
No output schema declared.
No examples provided.
get_subscription_allowances Get enabled subscription allowances ~58
Read the currently enabled subscriber benefits and their separate monthly limits, caps and balances. Disabled benefits return zeroed values and cannot be used. Unused units accumulate up to three monthly grants while the feature is enabled. These are not generation credits.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_ui_pack Read a UI Pack ~47
Read components, immutable revisions, capabilities, fonts and batch progress. Artwork URLs expire; native engine capability gaps are not successful tests.
| Name | Type | Req | Description |
|---|---|---|---|
| packId | string | yes | Owned UI Pack ID. |
No output schema declared.
No examples provided.
get_ui_pack_batch Read UI Pack batch ~48
Read one paid batch and retained source URL; provider completion does not prove usable component delivery.
| Name | Type | Req | Description |
|---|---|---|---|
| batchId | string | yes | – |
| packId | string | yes | Owned UI Pack ID. |
No output schema declared.
No examples provided.
get_ui_pack_batch_recovery Inspect retained UI sheet for recovery ~64
Read original PNG dimensions, expiring image URL, source hash, and exact delivered/missing slots for an illustrated batch needing review. Inspect artwork before choosing crops.
| Name | Type | Req | Description |
|---|---|---|---|
| batchId | string | yes | – |
| packId | string | yes | Owned UI Pack ID. |
No output schema declared.
No examples provided.
get_ui_pack_export_command Download UI Pack command ~135
Return an authenticated curl command for a whole/selected UI Pack ZIP or component source. Run locally; never put multi-MB ZIP data into model context. Phaser has browser behavior coverage; Godot/Unity native acceptance is pending; GameMaker/Unreal deliver artwork, Tiled transports metadata. Recovery artworkOnly must be explicit.
| Name | Type | Req | Description |
|---|---|---|---|
| artworkOnly | boolean | – | – |
| componentIds | array | – | – |
| engine | string | – | – |
| packId | string | yes | Owned UI Pack ID. |
| sourceComponentId | string | – | Owned component ID within this pack. |
| sourceFormat | string | – | – |
No output schema declared.
No examples provided.
import_asset_image Import a transparent asset image ~212
Free imports: import ONE still PNG or WebP as an Object or Character. Unlimited for every account, including free users, with zero credits and no subscription or allowance check. Before uploading, tell the user: transparency required, one clear complete subject, clean edges, consistent project style and camera, no text/watermark, up to 10 MB and 4096px per side; recommend 256px or more except intentional pixel art. No videos, GIFs or animated files; upload does not remove backgrounds or fix quality. Set confirmed only after this notice and approval. For local files, prefer POST /api/v1/asset-imports multipart file/projectId/name/kind/requestId rather than passing large base64 through model context. Persist requestId for safe network retries.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| imageBase64 | string | yes | – |
| kind | string | yes | – |
| name | string | yes | – |
| projectId | string | yes | – |
| requestId | string | yes | – |
No output schema declared.
No examples provided.
list_assets List assets ~181
Assets (Object / Object Collection / staged / background / Environment Kit / Terrain Materials) with slug, hasAnimation, updatedAt, tags and favourite. Wire types remain tileset for collections, terrain for kits and texture for brushable materials. Object was formerly called Static Asset; its API type remains `static`. hasAnimation is data-derived: ANY asset type can carry an animation, so never infer it from the type.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max items to return (default 100, max 500). |
| name | string | – | Case-insensitive substring filter on the name. |
| projectId | string | – | Restrict to one project. |
| slug | string | – | Exact slug match (a slug is an identifier — no partial hits). |
| type | string | – | Filter by asset type. Use `static` for Object (formerly Static Asset). |
No output schema declared.
No examples provided.
list_character_poses List character poses ~107
All poses on a character: { id, name, prompt, status pending|done|error, url, direction, pendingSince, errorCode, creditsRefunded }. This is the poll target after generate_pose — pose generation has no job id. It is also the source of ready pose ids for generate_character_animation poseFirstFrameIds / poseLastFrameIds. A pose still pending long after pendingSince is stalled, not working.
| Name | Type | Req | Description |
|---|---|---|---|
| characterId | string | yes | Character id. |
No output schema declared.
No examples provided.
list_characters List characters ~108
Characters with the re-sync signals: contentVersion (opaque change token — compare for equality, never parse or order), hasActiveJob, apiReady, pose/animation counts, tags, favourite. Persist contentVersion per character and re-fetch only when it changes.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max items to return (default 100, max 500). |
| name | string | – | Case-insensitive substring filter on the name. |
| projectId | string | – | Restrict to one project. |
No output schema declared.
No examples provided.
list_map_revisions List saved map revisions ~29
List recoverable map revisions from editor and agent saves.
| Name | Type | Req | Description |
|---|---|---|---|
| mapId | string | yes | – |
No output schema declared.
No examples provided.
list_maps List maps ~66
Level-editor maps with updatedAt and hasMapData. hasMapData:false means the map was never saved and cannot be exported.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max items to return (default 100, max 500). |
| projectId | string | – | Restrict to one project. |
No output schema declared.
No examples provided.
list_projects List projects ~110
All of the user's projects: { id, name, gameType, style, itemCount, createdAt, updatedAt }. gameType (platformer / topdown / topdown_overhead / isometric / point_and_click) is the default perspective for new content — read it before generating anything. A character may override that default at creation; afterward its stored character gameType controls its own animation and turn behavior.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max items to return (default 100, max 500). |
No output schema declared.
No examples provided.
How do I install the com.spriteship/spriteship MCP server?
com.spriteship/spriteship is a hosted endpoint at https://spriteship.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · spriteship.com
claude mcp add --transport http com-spriteship-spriteship 'https://spriteship.com/mcp'
What is the com.spriteship/spriteship MCP server?
com.spriteship/spriteship is an MCP server listed in the public MCP registry as com.spriteship/spriteship. Build a game's 2D art layer with your agent: characters, animations, tilesets, levels, 5 engines. This page covers its hosted endpoint (https://spriteship.com/mcp).
Is the com.spriteship/spriteship MCP server safe to use?
com.spriteship/spriteship scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the com.spriteship/spriteship MCP server expose?
com.spriteship/spriteship exposes 90 tools: get_project_export_review, start_project_export, get_project_export_status, get_project_export_command, get_integration_status, and 85 more. Their descriptions and schemas cost roughly 19,936 tokens of context every time the server is loaded.
Does the com.spriteship/spriteship MCP server require authentication?
No. We connected to com.spriteship/spriteship without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the com.spriteship/spriteship MCP server still maintained?
com.spriteship/spriteship is still listed as active in the MCP registry. We last reached this channel on 16 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.