Koskamo

SpriteForge Editor MCP

An official MCP server provided by SpriteForge that allows agents to open and edit pixel art, animations, and Wang tilesets using SpriteForge's editors through edit sessions without requiring an account. It supports tools like open_editor, open_full_editor, open_tileset_editor, and get_sprite.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

SpriteForge Editor MCP logo, by SpriteForgeVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by SpriteForge
MCP endpoint (Streamable HTTP)
https://www.spriteforge.tech/mcp/editor
Vendor documentation

What you can do with it

  • Open pixel art in SpriteForge's compact editor
  • Edit sprites with layers, selection, shapes, and frames
  • Manage Wang and platformer tilesets
  • Retrieve current pixels and PNG links for sprites

Source and maintenance

Vendor evidenceRegistry 0.1.0

Protocol and capabilities

Server
spriteforge-editor 0.1.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
3 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

SpriteForge Editor opens pixel art in a free, no-account browser pixel editor. Use open_editor when the user wants to edit or touch up a sprite by hand, or open_full_editor straight away (same sources) when they want the full editor - layers, selection, shapes, frames with onion skin. Where the app shows interactive cards, the editor appears inline under the call and its Done button sends you a message with the session_id; otherwise give the user the edit link it returns. After they're done, call get_sprite to see the result and get the PNG (in a shell, download png_url with curl). Edit links are unlisted but anyone holding one can view and edit that sprite, and they close 24 hours after the last edit - tell the user that when you share one. For a tileset (a Wang autotile set or platformer tiles), use open_tileset_editor: SpriteForge's tileset editor, with a tiling preview and a base texture that re-derives the tiles; to show an open set as walls or isometric terrain, call it with the set's session_id and kind.

Tools

6 advertised

open_editor — Open a sprite in the SpriteForge editor
Advertised by the server during the last successful anonymous check.

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.

open_editor input schema
{
  "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
}
open_editor annotations
{
  "title": "Open a sprite in the SpriteForge editor",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_sprite — Get a sprite from a SpriteForge edit session
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_sprite input schema
{
  "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
}
get_sprite annotations
{
  "title": "Get a sprite from a SpriteForge edit session",
  "readOnlyHint": true,
  "openWorldHint": false
}
open_full_editor — Open the full SpriteForge editor
Advertised by the server during the last successful anonymous check.

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.

open_full_editor input schema
{
  "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
}
open_full_editor annotations
{
  "title": "Open the full SpriteForge editor",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
open_tileset_editor — Open the SpriteForge tileset editor
Advertised by the server during the last successful anonymous check.

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; sets SpriteForge derives add 4 variants of tile 15 as tiles 16-19, mixed into painted floors) 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 20 grids for Wang, 49 for platformer, in mask order), palette + base (a seamless square texture; the 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 or 20x1 image is a strip, a 4x5 one a sheet, 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.

open_tileset_editor input schema
{
  "type": "object",
  "properties": {
    "base": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "integer"
        }
      },
      "description": "A square seamless texture to derive a Wang set from (its 16 tiles and 4 variants of tile 15)."
    },
    "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, or 20 with tile 15's 4 variants after them; 49 for platformer), palette indexes, -1 transparent."
    },
    "layout": {
      "enum": [
        "sheet",
        "strip",
        "texture"
      ],
      "type": "string",
      "description": "How to read png_base64: sheet (4x4 or 4x5 Wang sheet, or a platformer set's 7x7), strip (16x1 or 20x1) or texture (a square base texture the 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 or 4x5 sheet or 16x1 or 20x1 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
}
open_tileset_editor annotations
{
  "title": "Open the SpriteForge tileset editor",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
load_art — Load an edit session into the editor card
Advertised by the server during the last successful anonymous check.
Advertised read-only

Loads an edit session's sprite into the SpriteForge editor card. Only the card calls it.

load_art input schema
{
  "type": "object",
  "required": [
    "session_id"
  ],
  "properties": {
    "session_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
load_art annotations
{
  "title": "Load an edit session into the editor card",
  "readOnlyHint": true,
  "openWorldHint": false
}
save_art — Save the editor card's sprite
Advertised by the server during the last successful anonymous check.

Saves the user's edits from the SpriteForge editor card to its edit session. Only the card calls it.

save_art input schema
{
  "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
}
save_art annotations
{
  "title": "Save the editor card's sprite",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

3 advertised

spriteforge-editor-card — SpriteForge Editor

Advertised by the server during the last successful anonymous check.

Inline pixel editor shown under open_editor in hosts that support MCP Apps.

spriteforge-editor-card URI
ui://spriteforge/editor-v2.html

MIME type: text/html;profile=mcp-app

spriteforge-full-editor-card — SpriteForge full editor

Advertised by the server during the last successful anonymous check.

The full SpriteForge pixel editor, shown under open_full_editor in hosts that support MCP Apps.

spriteforge-full-editor-card URI
ui://spriteforge/editor-full-v1.html

MIME type: text/html;profile=mcp-app

spriteforge-tileset-editor-card — SpriteForge tileset editor

Advertised by the server during the last successful anonymous check.

SpriteForge's tileset editor (tiling preview, tiles, base texture), shown under open_tileset_editor in hosts that support MCP Apps.

spriteforge-tileset-editor-card URI
ui://spriteforge/tileset-editor-v1.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
636 ms
95th percentile latency
636 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 636 ms · metadata changed · 6 tool(s), 3 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http spriteforge-editor-mcp https://www.spriteforge.tech/mcp/editor

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add spriteforge-editor-mcp --url https://www.spriteforge.tech/mcp/editor

Cursor

Merge this server into .cursor/mcp.json in your project, then enable spriteforge-editor-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "spriteforge-editor-mcp": {
      "url": "https://www.spriteforge.tech/mcp/editor"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "spriteforge-editor-mcp": {
      "type": "streamableHttp",
      "url": "https://www.spriteforge.tech/mcp/editor",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start spriteforge-editor-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "spriteforge-editor-mcp": {
      "type": "http",
      "url": "https://www.spriteforge.tech/mcp/editor"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http spriteforge-editor-mcp https://www.spriteforge.tech/mcp/editor

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "spriteforge-editor-mcp": {
      "url": "https://www.spriteforge.tech/mcp/editor"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "spriteforge-editor-mcp": {
      "serverUrl": "https://www.spriteforge.tech/mcp/editor"
    }
  }
}

Let your agent find its tools

Find servers like SpriteForge Editor MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run SpriteForge Editor MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing