Skip to main content
Glama
Gamezxz

lpc-character-mcp

by Gamezxz
README.md
# lpc-character-mcp (Cloudflare Worker)

A hosted **MCP server** that randomly generates [Universal LPC Spritesheet
Character Generator](https://github.com/LiberatedPixelCup/Universal-LPC-Spritesheet-Character-Generator)
characters and renders each as a full animation spritesheet PNG — no local
install, no AI image model, just real sprite layers composited on a canvas.

Runs entirely on **Cloudflare Workers** + **Browser Rendering** (headless
Chromium via `@cloudflare/puppeteer`), with the ~141k sprite assets and every
generated character stored in **R2**.

## Endpoints

| Route | Purpose |
|-------|---------|
| `GET  /mcp` | MCP Streamable HTTP endpoint (tool: `generate_random_character`) |
| `GET  /api/generate` | Generate one character on demand → JSON `{ files: [...] }` |
| `GET  /api/files` | List every generated spritesheet stored in R2 |
| `GET  /files` | Backend page: browse + download generated characters |
| `GET  /generated/*` | Serve a generated PNG from R2 |
| `GET  /spritesheets/*` | Serve a source sprite layer from R2 |
| `GET  /mcp-docs.html` | Landing/docs page with a live "Randomize" button |

## MCP tool parameters

| Name | Type | Default | Notes |
|------|------|---------|-------|
| `count` | integer 1–8 | `1` | Characters per call |
| `bodyType` | enum | `random` | `male` `female` `teen` `child` `muscular` `pregnant` |
| `seed` | integer | — | Reproducible results across a batch |
| `includeRareExtras` | boolean | `false` | Wounds, tails, wings, prostheses, etc. |
| `humanOnly` | boolean | `false` | Human faces + normal skin bodies only |

## Connect

```
claude mcp add --transport http lpc-character-remote https://lpc-character-mcp.gamezxz.workers.dev/mcp
```

## Storage

Generated characters live under the `generated/` prefix in R2 and are
auto-deleted after **30 days** by a bucket lifecycle rule
(`expire-generated-30d`).

## Develop / deploy

See [DEPLOY.md](./DEPLOY.md). In short:

```sh
npm install
npx wrangler deploy
```

`PUBLIC_URL` in `wrangler.jsonc` must point at the Worker's own public URL —
Browser Rendering navigates over the real network.