Free pixel and tileset editor, no account: hand-edit sprites, animations and Wang tilesets in chat
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
An edit session's id (the s= value of an edit link), or the edit link itself.
Also return the palette and index grid (default false).
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.
| Argument | Type | Description |
|---|---|---|
| session_id* | string | An edit session's id (the s= value of an edit link), or the edit link itself. |
| include_pixels | boolean | Also return the palette and index grid (default false). |
{
"type": "object",
"required": [
"session_id"
],
"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)."
}
},
"additionalProperties": false
}Loads an edit session's sprite into the SpriteForge editor card. Only the card calls it.
| Argument | Type | Description |
|---|---|---|
| session_id* | string |
{
"type": "object",
"required": [
"session_id"
],
"properties": {
"session_id": {
"type": "string"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| art | object | 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. |
| name | string | Sprite name, used as the download filename (letters, digits, _ and -). |
| width | integer | Blank canvas width in pixels (default 32). |
| height | integer | Blank canvas height in pixels (default 32). |
| palette | array | Starting palette for a blank canvas, as hex colours. |
| png_base64 | string | A PNG file, base64-encoded (a data: URL prefix is fine). Pixels under 50% alpha become transparent. |
{
"type": "object",
"properties": {
"art": {
"type": "object",
"required": [
"palette",
"grid"
],
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"frames": {
"type": "array",
"items": {
"type": "object",
"required": [
"grid"
],
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
}
}
}
},
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256
}
},
"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."
},
"name": {
"type": "string",
"description": "Sprite name, used as the download filename (letters, digits, _ and -)."
},
"width": {
"type": "integer",
"maximum": 128,
"minimum": 1,
"description": "Blank canvas width in pixels (default 32)."
},
"height": {
"type": "integer",
"maximum": 128,
"minimum": 1,
"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."
},
"png_base64": {
"type": "string",
"description": "A PNG file, base64-encoded (a data: URL prefix is fine). Pixels under 50% alpha become transparent."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| art | object | 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. |
| name | string | Sprite name, used as the download filename (letters, digits, _ and -). |
| width | integer | Blank canvas width in pixels (default 32). |
| height | integer | Blank canvas height in pixels (default 32). |
| palette | array | Starting palette for a blank canvas, as hex colours. |
| png_base64 | string | A PNG file, base64-encoded (a data: URL prefix is fine). Pixels under 50% alpha become transparent. |
| session_id | string | An edit session that's already open, or an edit link containing ?s=<id>. |
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.
| Argument | Type | Description |
|---|---|---|
| base | array | A square seamless texture to derive a Wang set's 16 tiles from. |
| kind | string | 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. |
| name | string | The set's name. |
Saves the user's edits from the SpriteForge editor card to its edit session. Only the card calls it.
| Argument | Type | Description |
|---|---|---|
| art* | object | 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. |
| session_id* | string |
{
"type": "object",
"required": [
"session_id",
"art"
],
"properties": {
"art": {
"type": "object",
"required": [
"palette",
"grid"
],
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"frames": {
"type": "array",
"items": {
"type": "object",
"required": [
"grid"
],
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
}
}
}
},
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256
}
},
"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."
},
"session_id": {
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"art": {
"type": "object",
"required": [
"palette",
"grid"
],
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"frames": {
"type": "array",
"items": {
"type": "object",
"required": [
"grid"
],
"properties": {
"grid": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
}
}
}
}
},
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256
}
},
"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."
},
"name": {
"type": "string",
"description": "Sprite name, used as the download filename (letters, digits, _ and -)."
},
"width": {
"type": "integer",
"maximum": 128,
"minimum": 1,
"description": "Blank canvas width in pixels (default 32)."
},
"height": {
"type": "integer",
"maximum": 128,
"minimum": 1,
"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."
},
"png_base64": {
"type": "string",
"description": "A PNG file, base64-encoded (a data: URL prefix is fine). Pixels under 50% alpha become transparent."
},
"session_id": {
"type": "string",
"description": "An edit session that's already open, or an edit link containing ?s=<id>."
}
},
"additionalProperties": false
}| size |
| integer |
| Tile size for a blank set (default 32). |
| tiles | array | The set's tiles in mask order (16 for Wang kinds, 49 for platformer), palette indexes, -1 transparent. |
| layout | string | 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). |
| palette | array | Hex colours for tiles or base. |
| png_base64 | string | A tileset PNG (a Wang set's 4x4 sheet or 16x1 strip, a platformer set's 7x7 sheet) or a square texture, base64. |
| session_id | string | 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. |
{
"type": "object",
"properties": {
"base": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "integer"
}
},
"description": "A square seamless texture to derive a Wang set's 16 tiles from."
},
"kind": {
"enum": [
"wang",
"wall",
"iso",
"platformer"
],
"type": "string",
"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."
},
"name": {
"type": "string",
"description": "The set's name."
},
"size": {
"type": "integer",
"maximum": 64,
"minimum": 4,
"description": "Tile size for a blank set (default 32)."
},
"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."
},
"layout": {
"enum": [
"sheet",
"strip",
"texture"
],
"type": "string",
"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)."
},
"palette": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 256,
"description": "Hex colours for tiles or base."
},
"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."
},
"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."
}
},
"additionalProperties": false
}