SpriteForge Editor
Free pixel and tileset editor, no account: hand-edit sprites, animations and Wang tilesets in chat
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"editor": {
"url": "https://www.spriteforge.tech/mcp/editor"
}
}
}Remote endpoints
https://www.spriteforge.tech/mcp/editorstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟡open_editor(name, png_base64, art, width, height, ...)
Opens pixel art in SpriteForge's compact pixel editor - pencil, eraser, fill, colour picker, palette, undo and animation frames - as an interactive card where the app shows them, and returns an edit link (the same editor in a browser) and a session_id. No account needed. One source at most: png_base64 (an existing PNG), art (palette + index grid), or neither for a blank width x height canvas. Max 128x128 pixels and 256 colours. The user's edits save to the edit session automatically.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Sprite name, used as the download filename (letters, digits, _ and -)."
},
"png_base64": {
"type": "string",
"description": "A PNG file, base64-encoded (a data: URL prefix is fine). Pixels under 50% alpha become transparent."
},
"art": {
"type": "object",
"description": "Pixel art in SpriteForge's format: palette = hex colours, grid = rows of palette indexes (-1 = transparent). Optional frames for an animation, each { grid } on the same palette.",
"properties": {
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256
},
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"frames": {
"type": "array",
"items": {
"type": "object",
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"required": [
"grid"
]
}
}
},
"required": [
"palette",
"grid"
]
},
"width": {
"type": "integer",
"minimum": 1,
"maximum": 128,
"description": "Blank canvas width in pixels (default 32)."
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 128,
"description": "Blank canvas height in pixels (default 32)."
},
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256,
"description": "Starting palette for a blank canvas, as hex colours."
}
},
"additionalProperties": false
}🟢get_sprite(session_id, include_pixels)
Returns the current state of a SpriteForge edit session: a preview image, its size and palette, how many edits were saved, and a PNG URL with the exact pixels at 1x (add &frame=N for another frame). With include_pixels it also returns the palette-index grid. Read-only.
Input Schema
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "An edit session's id (the s= value of an edit link), or the edit link itself."
},
"include_pixels": {
"type": "boolean",
"description": "Also return the palette and index grid (default false)."
}
},
"required": [
"session_id"
],
"additionalProperties": false
}🟡open_full_editor(session_id, name, png_base64, art, width, ...)
Opens a sprite in SpriteForge's full pixel editor - layers, selection and move, line/rectangle/ellipse, mirror painting, brush sizes, animation frames with onion skin and playback, palette tools - as an interactive card where the app shows them, and returns an edit link that opens the same editor in a browser. One source at most: session_id (an edit session that's already open, or an edit link), png_base64 (an existing PNG), art (palette + index grid), or none for a blank width x height canvas. Max 128x128 pixels and 256 colours. The user's edits save to the edit session.
Input Schema
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "An edit session that's already open, or an edit link containing ?s=<id>."
},
"name": {
"type": "string",
"description": "Sprite name, used as the download filename (letters, digits, _ and -)."
},
"png_base64": {
"type": "string",
"description": "A PNG file, base64-encoded (a data: URL prefix is fine). Pixels under 50% alpha become transparent."
},
"art": {
"type": "object",
"description": "Pixel art in SpriteForge's format: palette = hex colours, grid = rows of palette indexes (-1 = transparent). Optional frames for an animation, each { grid } on the same palette.",
"properties": {
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256
},
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"frames": {
"type": "array",
"items": {
"type": "object",
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"required": [
"grid"
]
}
}
},
"required": [
"palette",
"grid"
]
},
"width": {
"type": "integer",
"minimum": 1,
"maximum": 128,
"description": "Blank canvas width in pixels (default 32)."
},
"height": {
"type": "integer",
"minimum": 1,
"maximum": 128,
"description": "Blank canvas height in pixels (default 32)."
},
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256,
"description": "Starting palette for a blank canvas, as hex colours."
}
},
"additionalProperties": false
}🟡open_tileset_editor(session_id, kind, palette, tiles, base, ...)
Opens a tileset in SpriteForge's tileset editor as an interactive card where the app shows them, and returns an edit link that opens the same editor in a browser. For a Wang autotile set (16 tiles; tile i is drawn where the map cells at its corners are painted, NW=1 NE=2 SW=4 SE=8, so tile 15 is the solid base) the user paints a small map to see the tiles chain, draws on the map or on single tiles, and edits the base texture, which re-derives the edge tiles (tiles drawn by hand stay); a platformer set (49 tiles) is edited tile by tile. With session_id it opens a tileset that's already in an edit session, and kind (wang = flat floor terrain, wall, iso) switches that Wang set's preview, keeping its tiles and the user's edits. Otherwise it makes a new set from kind (wang, wall, iso or platformer; default wang) plus palette + tiles (16 or 49 grids in mask order), palette + base (a seamless square texture; the 16 Wang tiles are derived from it as SpriteForge does), png_base64 (a tileset sheet or a texture), or size alone for a blank set. With png_base64 and no layout, a 16x1 image is a strip, and a square one is a 4x4 sheet when its tiles look like a Wang set in mask order (tile 0 empty, or nearly every tile's corners matching tile 15 where its mask has that corner and tile 0 where it doesn't), else a texture. The result says which view it opened and how it read the PNG. The user's edits save to the edit session.
Input Schema
{
"type": "object",
"properties": {
"session_id": {
"type": "string",
"description": "An existing tileset edit session, or an edit link containing ?s=<id>. Give kind with it to change a Wang set's preview; the other fields are for a new set."
},
"kind": {
"type": "string",
"enum": [
"wang",
"wall",
"iso",
"platformer"
],
"description": "wang (flat floor terrain), wall (Wang walls), iso (isometric Wang) or platformer. For a new set, default wang. With session_id, wang, wall or iso switches that Wang set's preview, keeping its tiles; a Wang set can't become a platformer set or the other way round."
},
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256,
"description": "Hex colours for tiles or base."
},
"tiles": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"description": "The set's tiles in mask order (16 for Wang kinds, 49 for platformer), palette indexes, -1 transparent."
},
"base": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
},
"description": "A square seamless texture to derive a Wang set's 16 tiles from."
},
"png_base64": {
"type": "string",
"description": "A tileset PNG (a Wang set's 4x4 sheet or 16x1 strip, a platformer set's 7x7 sheet) or a square texture, base64."
},
"layout": {
"type": "string",
"enum": [
"sheet",
"strip",
"texture"
],
"description": "How to read png_base64: sheet (4x4 Wang sheet, or a platformer set's 7x7), strip (16x1) or texture (a square base texture the 16 Wang tiles are derived from). Default: guessed from the image (see the tool description)."
},
"size": {
"type": "integer",
"minimum": 4,
"maximum": 64,
"description": "Tile size for a blank set (default 32)."
},
"name": {
"type": "string",
"description": "The set's name."
}
},
"additionalProperties": false
}🟢load_art(session_id)
Loads an edit session's sprite into the SpriteForge editor card. Only the card calls it.
Input Schema
{
"type": "object",
"properties": {
"session_id": {
"type": "string"
}
},
"required": [
"session_id"
],
"additionalProperties": false
}🟡save_art(session_id, art)
Saves the user's edits from the SpriteForge editor card to its edit session. Only the card calls it.
Input Schema
{
"type": "object",
"properties": {
"session_id": {
"type": "string"
},
"art": {
"type": "object",
"description": "Pixel art in SpriteForge's format: palette = hex colours, grid = rows of palette indexes (-1 = transparent). Optional frames for an animation, each { grid } on the same palette.",
"properties": {
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256
},
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"frames": {
"type": "array",
"items": {
"type": "object",
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"required": [
"grid"
]
}
}
},
"required": [
"palette",
"grid"
]
}
},
"required": [
"session_id",
"art"
],
"additionalProperties": false
}Community
Evidence