<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SpriteShip Team</title>
    <description>The latest articles on DEV Community by SpriteShip Team (@spriteship).</description>
    <link>https://dev.to/spriteship</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4086461%2Fe5dd3426-4c34-4a48-a15d-f24ef64daf0e.png</url>
      <title>DEV Community: SpriteShip Team</title>
      <link>https://dev.to/spriteship</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spriteship"/>
    <language>en</language>
    <item>
      <title>How to give a coding agent a complete 2D game-art pipeline over MCP</title>
      <dc:creator>SpriteShip Team</dc:creator>
      <pubDate>Thu, 20 Aug 2026 12:42:02 +0000</pubDate>
      <link>https://dev.to/spriteship/how-to-give-a-coding-agent-a-complete-2d-game-art-pipeline-over-mcp-1475</link>
      <guid>https://dev.to/spriteship/how-to-give-a-coding-agent-a-complete-2d-game-art-pipeline-over-mcp-1475</guid>
      <description>&lt;p&gt;Most coding agents can write the player controller, register an animation, and&lt;br&gt;
load a texture atlas. They usually stop at the point where the art has to exist.&lt;/p&gt;

&lt;p&gt;That boundary is awkward for an autonomous workflow. An image generator can&lt;br&gt;
produce a PNG, but the agent still has to guess how to split frames, name&lt;br&gt;
animations, build an atlas, define collision, and package everything for the&lt;br&gt;
engine.&lt;/p&gt;

&lt;p&gt;SpriteShip's hosted Model Context Protocol server is meant to close that gap. It&lt;br&gt;
currently exposes 41 tools for creating, reading, revising, animating, and&lt;br&gt;
exporting a game's 2D art layer.&lt;/p&gt;

&lt;p&gt;The cover image for this article was AI-generated with SpriteShip.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the agent can actually make
&lt;/h2&gt;

&lt;p&gt;The tool surface covers more than characters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;animated characters and directional turns;&lt;/li&gt;
&lt;li&gt;static props and animated objects;&lt;/li&gt;
&lt;li&gt;tilesets, terrain sheets, backgrounds, and seamless textures;&lt;/li&gt;
&lt;li&gt;level maps assembled from those assets;&lt;/li&gt;
&lt;li&gt;engine-native exports for Phaser, Godot, Unity, GameMaker, and Tiled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is the sequence. An agent can create a project, generate an&lt;br&gt;
asset inside it, poll the asynchronous job, inspect the result, and export files&lt;br&gt;
without requiring somebody to first prepare the entity in the web dashboard.&lt;/p&gt;
&lt;h2&gt;
  
  
  Connect the MCP server
&lt;/h2&gt;

&lt;p&gt;Create a scoped API key in SpriteShip under &lt;strong&gt;Account → API keys&lt;/strong&gt;, then expose it&lt;br&gt;
to the process running your agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SPRITESHIP_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ss_live_..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP endpoint is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://spriteship.com/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An MCP client configuration has three essential fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"spriteship"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://spriteship.com/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer ${env:SPRITESHIP_API_KEY}"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact config-file location differs between Claude Code, Cursor, Windsurf,&lt;br&gt;
Cline, and Codex, but the endpoint and authorization header are the same.&lt;/p&gt;
&lt;h2&gt;
  
  
  Start with a project
&lt;/h2&gt;

&lt;p&gt;Characters and assets live inside a project. The project also owns the permanent&lt;br&gt;
game perspective that guides later generations: platformer, angled top-down,&lt;br&gt;
straight overhead, isometric, or point-and-click.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;create_project&lt;/code&gt; is synchronous and free. A typical instruction to the agent is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a platformer project called Clockwork Harbor. Use a hand-drawn style and&lt;br&gt;
describe it as a foggy port city powered by unreliable brass machinery.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before creating anything, the agent should call &lt;code&gt;list_projects&lt;/code&gt; and reuse a&lt;br&gt;
matching project rather than creating a near-duplicate.&lt;/p&gt;
&lt;h2&gt;
  
  
  Generate four character options for one image call
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;create_character&lt;/code&gt; makes the initial character image. Setting both &lt;code&gt;gridRows&lt;/code&gt;&lt;br&gt;
and &lt;code&gt;gridCols&lt;/code&gt; to &lt;code&gt;2&lt;/code&gt; asks for a four-variation sheet. It is still one image call,&lt;br&gt;
so the four resulting character designs have the same generation cost as one.&lt;/p&gt;

&lt;p&gt;That makes the sensible first workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Request a 2×2 set of character variations.&lt;/li&gt;
&lt;li&gt;Poll the returned job with &lt;code&gt;get_job&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Show the four &lt;code&gt;characterPreviews&lt;/code&gt; to the user.&lt;/li&gt;
&lt;li&gt;Animate only the selected design.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Generation is asynchronous. The create call returns a &lt;code&gt;jobId&lt;/code&gt;; when the job is&lt;br&gt;
finished, &lt;code&gt;get_job&lt;/code&gt; returns the created character IDs and expiring preview URLs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Preview the cost before spending
&lt;/h2&gt;

&lt;p&gt;Paid SpriteShip MCP tools default to &lt;code&gt;dryRun: true&lt;/code&gt;. A dry run returns the&lt;br&gt;
estimated credit cost, current balance, daily spend cap, recent spend, and&lt;br&gt;
remaining cap. It generates nothing.&lt;/p&gt;

&lt;p&gt;The expected exchange looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user: make four plague-doctor character concepts for this project

agent: the generation is estimated at 150 credits. Your balance after the call
       would be 1,350 credits. Shall I run it?

user: yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only after that explicit approval should the agent repeat the call with&lt;br&gt;
&lt;code&gt;dryRun: false&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is backed by server-side controls rather than prompt etiquette:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API keys have separate read, write, and spend scopes;&lt;/li&gt;
&lt;li&gt;each key has a daily credit ceiling;&lt;/li&gt;
&lt;li&gt;real writes are idempotent, so a retry cannot dispatch and charge twice;&lt;/li&gt;
&lt;li&gt;writes against a busy entity are rejected instead of racing;&lt;/li&gt;
&lt;li&gt;revoking a key cancels its unfinished jobs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a job reaches a terminal state, the agent should report the job's actual&lt;br&gt;
net charge rather than repeating the estimate. Four variations still come from&lt;br&gt;
one charged image call, and failed steps can change the final amount.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add real motion
&lt;/h2&gt;

&lt;p&gt;The still image and its animations are intentionally separate decisions.&lt;br&gt;
&lt;code&gt;generate_character_animation&lt;/code&gt; creates image-to-video motion such as a walk,&lt;br&gt;
idle, attack, or dodge. Each generated animation is a separate paid video call,&lt;br&gt;
so the agent should ask which motions are actually needed.&lt;/p&gt;

&lt;p&gt;For directional characters, a generated direction can also produce a free&lt;br&gt;
mirrored copy in the same job. A real second generation is still the right choice&lt;br&gt;
for an asymmetric character, because mirroring moves a held item to the opposite&lt;br&gt;
hand.&lt;/p&gt;

&lt;p&gt;Recent animation work also makes the generated motion more usable downstream:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the starting pose is checked for visual inventory so empty hands remain empty
and existing held items are preserved;&lt;/li&gt;
&lt;li&gt;occupied animation names resolve non-destructively (&lt;code&gt;jump&lt;/code&gt;, &lt;code&gt;jump_2&lt;/code&gt;,
&lt;code&gt;jump_3&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;jump animations can be split into takeoff, airborne, and landing phases;&lt;/li&gt;
&lt;li&gt;character exports carry ten skeleton-derived attachment points for equipment
and effects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Export something the engine understands
&lt;/h2&gt;

&lt;p&gt;Once the character is ready, &lt;code&gt;get_export_command&lt;/code&gt; returns an authenticated URL&lt;br&gt;
and a ready-to-run &lt;code&gt;curl&lt;/code&gt; command for the chosen engine. The agent runs that&lt;br&gt;
command in its own shell rather than passing a multi-megabyte zip through the&lt;br&gt;
language model.&lt;/p&gt;

&lt;p&gt;An export can contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sprite sheets and atlas metadata;&lt;/li&gt;
&lt;li&gt;native engine resources;&lt;/li&gt;
&lt;li&gt;animation names and frame timing;&lt;/li&gt;
&lt;li&gt;collision shapes and ground footprints;&lt;/li&gt;
&lt;li&gt;per-frame equipment attachment points;&lt;/li&gt;
&lt;li&gt;a manifest, JSON Schema, README, and SpriteShip skill instructions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last group matters. The bundle explains its own structure, so the coding&lt;br&gt;
agent can register the animation in the game instead of inventing a file layout.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful end-to-end prompt
&lt;/h2&gt;

&lt;p&gt;After connecting the server, try an instruction shaped like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a platformer project for a clockwork harbor game. Preview the cost of&lt;br&gt;
four character designs for a lantern-carrying mechanic. Wait for my approval&lt;br&gt;
before spending anything. When they finish, show me the options and let me pick&lt;br&gt;
one. Then quote an idle and walk animation, generate only after I approve, and&lt;br&gt;
export the result for Phaser.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That single request exercises the important boundaries: project context, cost&lt;br&gt;
preview, explicit approval, asynchronous jobs, visual selection, separate&lt;br&gt;
animation spend, and engine-native export.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to go next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Agent overview and setup guides: &lt;a href="https://spriteship.com/agents" rel="noopener noreferrer"&gt;https://spriteship.com/agents&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MCP endpoint: &lt;a href="https://spriteship.com/mcp" rel="noopener noreferrer"&gt;https://spriteship.com/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;API and key management: &lt;a href="https://spriteship.com/account/api-keys" rel="noopener noreferrer"&gt;https://spriteship.com/account/api-keys&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SpriteShip includes 1,500 starting credits and does not require a card to try the&lt;br&gt;
first workflow. Reading existing assets and re-exporting them are free; credits&lt;br&gt;
are used for new AI generations.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>mcp</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
