PlugWiki

MSW Painter skill for Claude Code: draw a pixel-art sprite and upload it to MapleStory Worlds

A MapleStory Worlds skill that makes Claude draw a pixel-art sprite in code, render it to PNG and upload it for a sprite RUID.

Installs
10.1K
on skills.sh
Stars
38
on GitHub
Files
5
besides SKILL.md
Updated
Oct 2026
last repo commit

msw-painter is a fallback. Claude must call msw-search first and use a matching RUID if there is one. Only if nothing fits does it draw a sprite as SVG, canvas or HTML code, in a chunky-pixel or a Maple-cartoon style, and render it to a PNG.

The render step runs a bundled Node script that needs puppeteer (about 200 MB with Chromium). The upload goes through the msw-mcp server in two steps with a presigned URL, and Claude then registers sprite properties such as pivot and filter mode.

Good for

  • MapleStory Worlds creators who cannot find a fitting sprite in search
  • Developers who want a quick icon, tile or placeholder character
  • Anyone who wants the sprite registered with pivot and 9-slice settings

Install msw-painter

Claude Code

  1. 1

    Copy this prompt.

    Install the msw-painter skill in Claude Code. Run this command:
    
    npx skills add https://github.com/msw-git/msw-ai-coding-plugins-official --skill msw-painter --skill msw-general --skill msw-search
    
    Then check that it loaded and tell me how to use it.
  2. 2

    Paste it into Claude Code. It shows the change and asks before running it.

Requires Node.js.

The plugin route installs msw-maker-base-skill: 13 skills (counted from the git tree) and hooks (6 hook events backed by 12 Node scripts, per hooks.json and the git tree). Read the permissions section first. The skills CLI route copies only the skill folders named, without the hooks. SKILL.md for msw-general says every other MSW skill depends on it, so it is always in the list, plus msw-search which this skill sends you to. The skills also call two MCP servers, msw-maker-mcp and msw-mcp. SKILL.md points to the official setup page for wiring them and the API key: https://maplestoryworlds-creators.nexon.com/ko/docs?postId=1368 The default shown is the skills CLI route, which does not add the hooks.

Built from the package data we hold. Not yet tested by us. Source.

What's in the skill

When it loads

When msw-search cannot find a suitable sprite RUID, draw a pixel art sprite directly with SVG / HTML5 Canvas / HTML code, render it to PNG, and upload it via the msw-mcp asset upload tool to obtain a sprite RUID (if no upload tool is connected, guide the user to register it through Maker). Two style modes are supported: chunky pixel (retro / icon / tile feel) and maple cartoon (MapleStory-inspired character / NPC feel). Triggers: draw sprite directly, create sprite, image generation, custom graphic, pixel art, cartoon sprite, maple style, chibi character, painter, draw a sprite, make an icon, create NPC image directly, draw a slime, custom sprite.

Sections in SKILL.md

  1. When to invoke
  2. Workflow
  3. 1. Choosing the medium
  4. Minimal SVG template
  5. Minimal Canvas template
  6. Minimal HTML template
  7. 2. Choosing the style
  8. Defaults when in doubt
  9. 3. Size guide (summary)
  10. 3.5 Multi-sprite sets — derive every variant from one seed
  11. 4. PNG render — render.cjs
  12. One-time dependency install
  13. Sandboxing & network isolation
  14. Invocation
  15. 5. Resource upload — two-step pattern
  16. Step 1 — request a presigned URL

Key facts

Installs on skills.sh
10,122 as of Nov 2, 2026
Last commit to the repo
Oct 6, 2026

What it includes

  • Search first, paint only if nothing fits

    If msw-search returns a suitable RUID, Claude uses it. It paints directly when you ask for a hand-drawn look.

    Read · When to invoke

  • SVG, canvas or HTML; chunky or maple; 128 by 128 default

    SVG suits icons and shape-based pixel art. Canvas suits loop-drawn textures. Size and style rules live in the three reference files.

    Try: “Draw a 32 by 32 pixel potion icon and upload it.”

    Write · Choose medium, style and size

  • node scripts/render.cjs --type --in --out --width --height

    Needs a one-time npm ci in scripts/, which installs puppeteer. SKILL.md says the page is served from a data: URL with a strict content policy, all network requests are blocked, SVG and HTML input is sanitized, and the Chromium sandbox is on unless PAINTER_DISABLE_SANDBOX=1.

    Runs code · Render with render.cjs

  • msw-mcp creation tool with a presigned URL

    Claude requests a presigned URL, PUTs the PNG with curl, then calls the tool again to get the RUID. SKILL.md says to treat the URL as a secret and never show it in chat.

    Write · Upload in two steps

  • asset_update_resource_storage_info

    Sets pivot, filter mode, wrap mode and 9-slice borders. Defaults: Point filter, Clamp wrap, pivot_x 0.5.

    Write · Register sprite properties

  • Returns the RUID and a short description

    Placing the sprite on an entity or in a script is outside the painter's scope.

    Read · Report

From the official docs

Permissions

Medium risk

This skill installs puppeteer, runs a headless browser and uploads a sprite to your MapleStory Worlds account, and the plugin route adds hooks. Review the PNG first and read the hook findings before installing the plugin.

What it can do

  • Read your data
  • Create and change things
  • Delete things
  • Read-only mode

Watch out for

  • It installs puppeteer and runs a headless browser

    SKILL.md tells Claude to run npm ci in scripts/, which installs puppeteer and Chromium (about 200 MB; package.json asks for puppeteer ^23.0.0). SKILL.md says npm ci uses a committed package-lock.json, but the git tree has none and the repo .gitignore lists plugins/**/package-lock.json, so the pinned versions SKILL.md describes are not in the repo. Check what npm installs. github.com

  • It uploads files to your account

    The two-step upload creates a sprite in your MapleStory Worlds account. Check the PNG and the asset name first. github.com

  • The plugin runs 9 hook scripts on 6 events

    hooks.json registers 9 hook scripts on 6 events. SessionStart: mlua-session-start.cjs starts the mlua LSP daemon in the background when it finds a RootDesk folder, and inject-agents-md.cjs (next item). UserPromptSubmit: skill-router-reminder.cjs adds the same fixed routing reminder to every prompt. PreToolUse: skill-read-guard.cjs refuses Bash reads such as cat, head or grep on the plugin's skill .md files, and structured-file-guard.cjs refuses reads, edits and shell commands on .model and .ui files. PostToolUse on Edit, Write and MultiEdit: mlua-diagnose-post-tool-use.cjs runs the mlua checker on edited .mlua files and returns a block decision with the errors when it finds any, and a second hook calls the msw-maker-mcp tool maker_refresh_workspace. PostToolUse on Read and Skill, and the InstructionsLoaded event: skill-log.cjs logs skill reads to .mswai/logs/skill.log. PostToolUse on every tool: mcp-log.cjs (below). SessionEnd: mlua-session-end.cjs stops the LSP daemon. Use the skills CLI route in the install box if you do not want hooks. github.com

  • The plugin writes AGENTS.md and edits CLAUDE.md

    inject-agents-md.cjs copies its AGENTS.md to your project root, replacing the file if the content differs, and adds an @AGENTS.md line at the top of CLAUDE.md. Back up an existing AGENTS.md first. github.com

  • The plugin runs a downloaded package with npx -y

    The mlua checks start a background daemon at session start and run again after each .mlua edit. resolve-cmd.cjs looks first for a local copy (env override, the workspace .mswai/runtime folder, the ai-cli vendored copy, mlua-lsp on PATH). If none is found and npx exists, it runs npx -y @maplestoryworlds/mlua-lsp@1.1.4, which downloads that package from the npm registry. github.com

  • Sandbox opt-out exists

    PAINTER_DISABLE_SANDBOX=1 turns off the Chromium sandbox. SKILL.md says not to set it on a developer workstation. github.com

  • The plugin logs every MCP call to .mswai/logs

    mcp-log.cjs runs after every tool call and, for MCP tools from any server, appends one line to .mswai/logs/mcp.log in your project with the tool name, the full arguments and the full response (cut only if MCP_LOG_MAX_OUTPUT_BYTES is set). lsp.log and skill.log are written to the same folder. Our advice: add .mswai/ to .gitignore, because the log can hold anything your MCP servers return. github.com

  • The plugin blocks direct reads of .model and .ui files

    structured-file-guard.cjs refuses Read, Edit, Write and shell commands on .model and .ui files and tells Claude to use the builders. Setting MSW_STRUCTURED_FILE_GUARD_DISABLE=1 turns it off. github.com

Security advisories

No published security advisories as of Nov 2, 2026.

Technical details
Turning on read-onlySKILL.md names no read-only setting.
Talks tomsw-mcp server and the presigned storage URL it returns
Scopes
  • Runs npm ci in the skill's scripts folder (puppeteer with Chromium)

  • Runs scripts/render.cjs, which starts headless Chromium

  • Uploads a PNG to your MapleStory Worlds account through msw-mcp and a presigned URL with curl

  • Updates sprite properties through asset_update_resource_storage_info

Questions

What does the msw-painter skill do?

It makes Claude draw a pixel-art sprite from code, render it to PNG and upload it to MapleStory Worlds so you get a sprite RUID. It runs only when msw-search finds nothing suitable, or when you ask for a hand-drawn look.

What does it install on my machine?

SKILL.md tells Claude to run npm ci in the skill's scripts folder, which installs puppeteer with a headless Chromium (about 200 MB). SKILL.md says npm ci uses a committed lockfile, but the git tree lists package.json and no package-lock.json, and the repo .gitignore lists plugins/**/package-lock.json.

Does the upload need an account?

It goes through the msw-mcp server's asset creation tool, so you need that server set up as described on the official page: https://maplestoryworlds-creators.nexon.com/ko/docs?postId=1368. If the server has no upload tool, Claude asks you to register the PNG in Maker.

How do I install it?

Use the install box above. The skills CLI route also installs msw-general and msw-search, which this skill calls first.

Is it official, made by Nexon?

The repo does not say so. It is published by a personal GitHub account named MSW-Git (account type User, no company or description on the profile). The repo name contains "official" and the README calls it the public release source for MSW maker skills, but nothing in the repo names Nexon as the publisher. marketplace.json lists the owner as MSW-Git with an outlook.kr email address. The skills do link to Nexon's MapleStory Worlds creators docs for MCP setup. Our advice: treat it as a third-party toolkit for Nexon's platform unless Nexon confirms otherwise.

Is msw-painter safe to use?

It runs a Node script that starts headless Chromium, installs a package, and uploads a file to your MapleStory Worlds account. The plugin route also adds hooks, so read the permissions section before you install it. Our advice: review the PNG before you let it upload.

Does it work on Windows?

SKILL.md gives PowerShell and bash upload commands and says to use curl.exe, not Invoke-WebRequest, on Windows PowerShell 5.1, because that call can freeze after upload.

Information

updated Nov 2, 2026

Folder
plugins/msw-maker-base-skill/skills/msw-painter

msw-git/msw-ai-coding-plugins-officialskills.sh

Sources

Docs, issue trackers and discussions this page is built from.

Show all 18
  1. msw-ai-coding-plugins-official README · github.com
  2. marketplace.json · github.com
  3. msw-painter SKILL.md · github.com
  4. skills.sh listing · skills.sh
  5. msw-painter scripts/render.cjs · github.com
  6. msw-painter scripts/package.json · github.com
  7. .gitignore · github.com
  8. MSW-Git GitHub profile · github.com
  9. hooks.json · github.com
  10. inject-agents-md.cjs · github.com
  11. resolve-cmd.cjs · github.com
  12. mcp-log.cjs · github.com
  13. structured-file-guard.cjs · github.com
  14. skill-router-reminder.cjs · github.com
  15. mlua-diagnose-post-tool-use.cjs · github.com
  16. skill-log.cjs · github.com
  17. skill-read-guard.cjs · github.com
  18. mlua-session-start.cjs · github.com

Updated Nov 2, 2026.