Index / MCP servers / Spriteship

Spriteship MCP server

Spriteship is an MCP server with 48 tools an agent can call, among them animate_asset, approve_directional_poses, cancel_job. It answers at https://spriteship.com/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 10 September 2026; the last check, on 19 October 2026, succeeded.

Status
Answering
Tools
48
Official
yes, served from spriteship.com
Reliability
6 of 6 checks
Response time
287 ms
Transport
streamable HTTP
Last checked
19 October 2026

Build a game's 2D art layer with your agent: characters, animations, tilesets, levels, 5 engines.

Description as the publisher wrote it.

The 48 tools Spriteship offers

ToolWhat it does
animate_assetPAID (image-to-video, 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 { fro
Inputs: assetId, iterationId, pairs, motionHint, videoModel, durationSeconds
approve_directional_posesFREE approval checkpoint. Use only when get_job returns status:"waiting_approval", wizardPhase:"waiting-directional-pose-approval", and directionalPoseReview. Present the eight previewUrls to the user, let them adjust the proposed frameIndi
Inputs: jobId, frameIndices, poseScales
cancel_jobFREE. 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 th
Inputs: jobId
convert_texture_to_materialFREE 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. P
Inputs: assetId, iterationId, projection
create_animation_from_poseFREE, 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.
Inputs: characterId, poseId, newId, displayName, fps
create_assetPAID (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 reques
Inputs: projectId, assetType, prompt, name, slug, style
create_characterPAID (~150 credits). 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, l
Inputs: projectId, prompt, gameType, style, imageModel, characterImageSize
create_projectFREE 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
Inputs: name, gameType, style, description
duplicate_animationFREE, 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: nul
Inputs: characterId, animation, newId
export_mapEngine-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-renderin
Inputs: mapId, engine
fix_asset_seamsLEGACY ONLY; new Brushable Materials reject this operation because they use world-space sampling. PAID (~100 credits, one image-to-image call). Make an old texture tile seamless. Legacy textures were created as raw grid cells, so CHECK get_
Inputs: assetId, iterationId, dryRun, idempotencyKey
frame_animationFREE, 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
Inputs: assetId, iterationId, frameIndices, name, fps
generate_character_animationPAID, and the cost MULTIPLIES BY THE NUMBER OF ANIMATIONS (each is its own image-to-video call, ~400 credits at defaults). All frames are text-free by default: no subtitles, captions or invented writing. This is real motion — a walk cycle,
Inputs: characterId, animationPipelineAssignmentToken, animations, videoModel, animPrompts, animDurations
generate_character_turnPAID (~400 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
Inputs: characterId, seedPoseId, discardPendingResult, dryRun, idempotencyKey
generate_posePAID (~150 credits). 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
Inputs: characterId, name, poseDescription, imageModel, referencePoseId, dryRun
generate_project_visionPAID but very cheap (one Gemini 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 th
Inputs: name, gameType, description, style, references, dryRun
get_assetOne 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 an
Inputs: assetId
get_characterThe full PhaserCharacter JSON: animations, frameSize, gameType, per-group atlas + spritesheet URLs, poses and mount points. The top-level animationQualityGate is the delivery verdict per animation: ready:true means its deliveredIssues list
Inputs: characterId
get_character_manifestThe 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 l
Inputs: characterId
get_creditsCurrent 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 wha
Inputs: includeLedger, limit, apiKeyId
get_custom_fieldsTyped 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-sche
Inputs: kind, entityId
get_export_commandBuild 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. P
Inputs: target, entityId, engine, size
get_framesPresigned 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 w
Inputs: target, entityId, animation, pairId, size, indices
get_jobPoll 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 failureActi
Inputs: jobId
get_mapA map row plus its saved level data. 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 aff
Inputs: mapId
get_projectOne project with its description, registered mount slots, and assetSuggestions — premade AI prompt ideas per entity type (character + the 6 asset types), tailored to the project's vision. Use them as ready-made prompts when creating charact
Inputs: projectId
get_subscription_allowancesRead 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.
import_asset_imageImport ONE still PNG or WebP as an Object or Character using one separate import allowance (Studio unlimited), zero credits. Use get_subscription_allowances first and proceed only when features.import is true. Before uploading, tell the use
Inputs: projectId, name, kind, requestId, imageBase64, confirmed
list_assetsAssets (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 ma
Inputs: projectId, type, name, slug, limit
list_character_posesAll 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
Inputs: characterId
list_charactersCharacters 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 w
Inputs: projectId, name, limit
list_mapsLevel-editor maps with updatedAt and hasMapData. hasMapData:false means the map was never saved and cannot be exported.
Inputs: projectId, limit
list_projectsAll 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 generat
Inputs: limit
mirror_animationFREE, no AI. Flip every cached frame of ONE animation horizontally and rebuild it — the cheap way to get walk_left from walk_right. NOT idempotent: calling it twice flips the animation back to its original orientation, so call it once and c
Inputs: characterId, animation
phase_splitFREE, no AI. Carve ONE multi-state clip into separate game-phase animations by frame windows — the classic case is a jump becoming crouch/rise/fall/land, with fall looping while airborne and the rest playing once. Each phase becomes a real
Inputs: characterId, animation, phases
plan_syncCompare the versions in assets/spriteship/spriteship.lock.json with current SpriteShip state in one call. Returns unchanged/changed/unavailable per character, asset, or map; exact animation frame-count/FPS/collision, revision, runtime-inten
Inputs: entities
rebuild_characterFREE, no AI. Re-render one animation from its durable cached frames by passing animation. This is the repair/refresh tool: use it when a sheet looks stale or wrong after a series of edits, or when a previous rebuild failed. It never re-gene
Inputs: characterId, animation
regen_asset_pairPAID (~400 credits at defaults). Re-run video generation for a SINGLE motion pair of an animated asset, leaving its other pairs alone. The new take lands as an additional iteration on that pair — earlier takes are preserved. DEFAULTS TO A C
Inputs: assetId, pairId, motionPrompt, videoModel, durationSeconds, dryRun
rematte_animationFREE, no AI. Try a cleaner background removal on ONE animation's source video — the repair for a quality read showing deliveredIssues containing "matte" (green fringe, flickering holes, ragged edges). The cleaner version is kept ONLY if it
Inputs: characterId, animation
reprocess_assetFREE and SYNCHRONOUS (no jobId — do not poll), no AI. Rebuild a staged, tileset, or terrain collection's presentation layout: anchor chooses the shared fixed point and cellOffsets apply per-item nudges. Modern manifest revisions are recompo
Inputs: assetId, iterationId, anchor, cellOffsets, fitItemIndices, cellInset
8 more tools

retry_job, retry_unusable_result, revise_asset, select_frames, set_asset_collision_body, set_asset_runtime_intent, suggest_motion_hint, whoami

Add Spriteship to your AI client

Every block below points at https://spriteship.com/mcp. Pick your client and copy.

Claude Code: one command in your terminal
claude mcp add --transport http spriteship https://spriteship.com/mcp
Claude Desktop: claude_desktop_config.json
{
  "mcpServers": {
    "spriteship": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://spriteship.com/mcp"]
    }
  }
}
Cursor: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
  "mcpServers": {
    "spriteship": {
      "url": "https://spriteship.com/mcp"
    }
  }
}
VS Code and GitHub Copilot: .vscode/mcp.json
{
  "servers": {
    "spriteship": {
      "type": "http",
      "url": "https://spriteship.com/mcp"
    }
  }
}
Zed: Zed settings.json
{
  "context_servers": {
    "spriteship": {
      "url": "https://spriteship.com/mcp"
    }
  }
}
Windsurf: ~/.codeium/mcp_config.json
{
  "mcpServers": {
    "spriteship": {
      "serverUrl": "https://spriteship.com/mcp"
    }
  }
}
JetBrains AI Assistant: Settings, Tools, AI Assistant, MCP, New MCP Server, as JSON
{
  "mcpServers": {
    "spriteship": {
      "url": "https://spriteship.com/mcp"
    }
  }
}
Continue: .continue/mcpServers/neuronto.yaml
name: Spriteship
version: 0.0.1
schema: v1
mcpServers:
  - name: Spriteship
    type: streamable-http
    url: https://spriteship.com/mcp
Gemini CLI: ~/.gemini/settings.json
{
  "mcpServers": {
    "spriteship": {
      "httpUrl": "https://spriteship.com/mcp"
    }
  }
}
Codex CLI: MCP server config
{
  "mcpServers": {
    "spriteship": {
      "type": "http",
      "url": "https://spriteship.com/mcp"
    }
  }
}
Warp: MCP servers, + Add, paste JSON
{
  "mcpServers": {
    "spriteship": {
      "url": "https://spriteship.com/mcp"
    }
  }
}
Goose: a one-click extension link
goose://extension?url=https%3A%2F%2Fspriteship.com%2Fmcp&type=streamable_http&id=spriteship&name=Spriteship

Is Spriteship up right now?

It answered our last check on 19 October 2026 in 287 ms. Over 6 checks since 10 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.

MCP servers similar to Spriteship

Questions about Spriteship

Is there an official Spriteship MCP server?

Yes. It is published by spriteship.com and served from spriteship.com, the vendor's own domain: https://spriteship.com/mcp.

How many tools does Spriteship have?

48, as returned by the server's own tools/list on 11 September 2026: animate_asset, approve_directional_poses, cancel_job, convert_texture_to_material, create_animation_from_pose, create_asset, create_character, create_project, and 40 more.

Is Spriteship down?

It answered our last check on 19 October 2026 in 287 ms. Over 6 checks since 10 September 2026 it answered 6.

How do I add Spriteship to Cursor?

Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://spriteship.com/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.

Does Spriteship need an API key?

It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.

Where this comes from

Publisher: com.spriteship. Endpoint host: spriteship.com. ARD identifier: urn:air:com.spriteship:mcp:spriteship. First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page is inferred from its name. Ranking in Neuronto search is never for sale.

Is this your server? Get a message the day it stops answering or its tools change: monitoring, 14 days free. Or claim the domain to manage how it is listed.