Skip to main content
Glama
mhoydich

digital-fireplace-mcp

by mhoydich
README.md
# digital-fireplace-mcp

> Brought to you by **[Good Feels](https://shop.getgoodfeels.com)** · _shop.getgoodfeels.com_

An MCP server (and a self-hosted gallery) for **34 embeddable pixel-art digital fireplaces**.

Each fireplace is a single-file HTML page that renders a tiny living scene — a stone hearth, a CRT yule log, a sparkler, a slow-burning joint, a phoenix egg, a plasma reactor — and pins a small Good Feels attribution to the bottom-right. Embed any of them with one `<iframe>` snippet, anywhere.

```
classic-hearth   wood-stove       campfire         joint-tray
yule-log         crystal-cave     space-stove      tiki-torch
lava-lamp        cabin-window     mystic-brazier   jack-o-lantern
menorah          birthday-candle  sparkler         new-years
bonfire-beach    forge-anvil      sun-disc         volcano
aurora           dragon-mouth     phoenix-egg      lightsaber
solar-flare      welding-arc      gas-stove        furnace-coal
tea-light        match-strike     cigar-ashtray    incense
bong-cherry      firefly-jar
```

CC0. Take it, fork it, theme it, ship it.

---

## What's in the box

- **`public/fireplaces/*.html`** — 34 self-contained fireplace pages
- **`public/lib/fire.js`** — the shared fire engine (Doom 1993 fire algorithm + 7 swappable palettes + a `FireCrackle` WebAudio synth)
- **`public/lib/chrome.js`** — shared sponsor footer + tap-to-start audio gate
- **`public/index.html`** — "The Hearth Picker" gallery, a live grid of all 34 with embed code modal
- **`public/server.js`** — minimal Node static server (no framework deps)
- **`src/index.ts`** — MCP server exposing 7 tools

## Quick start

```bash
# Install + build
npm install
npm run build

# Run the static gallery on http://127.0.0.1:4700
npm run serve

# Run the MCP server (stdio)
npm start
```

Open <http://127.0.0.1:4700> to browse the picker. Click any tile's **embed** button to get a turnkey iframe snippet for your own site.

## Embed anywhere

```html
<iframe
  src="https://your-host/fireplaces/joint-tray.html"
  width="800" height="500"
  frameborder="0"
  allow="autoplay"
  title="Good Feels · digital fireplace"
  style="border:none;"
></iframe>
<!-- brought to you by Good Feels · shop.getgoodfeels.com -->
```

## MCP tools

Wire into your Claude Code, Cursor, or any MCP-compatible client by adding to its `mcpServers` config:

```json
"digital-fireplace": {
  "command": "node",
  "args": ["/absolute/path/to/digital-fireplace-mcp/dist/index.js"],
  "type": "stdio",
  "env": { "FIREPLACE_SERVER_URL": "http://127.0.0.1:4700" }
}
```

| Tool | What it does |
|---|---|
| `fireplace_list_styles` | Catalog of all 34 fireplaces with mood, palette, tags, URL |
| `fireplace_get_html` | Raw HTML for one fireplace (optionally bundled with `fire.js` / `chrome.js` for self-hosting) |
| `fireplace_get_embed_code` | Turnkey `<iframe>` snippet with sponsor comment |
| `fireplace_get_url` | Live URL for a specific fireplace |
| `fireplace_random` | Surprise pick |
| `fireplace_get_gallery_url` | URL of the picker grid |
| `fireplace_recommend` | Free-form vibe → top-3 matches by tag scoring |

Example: _"recommend a fireplace for a winter night sci-fi stream"_ → `crystal-cave`, `space-stove`, `aurora`.

## How the fire engine works

The shared `PixelFire` class implements the classic Doom 1993 fire algorithm. For every pixel from bottom row to top, it copies from the row below with a small random horizontal offset and decays the palette index by 0–3. The hot source row at the bottom plus randomized decay produces a beautiful living flame that costs almost nothing to render.

Each fireplace picks a palette and (optionally) a mask + custom source row to shape the fire. Crystal Cave uses a cool blue palette. Plasma Reactor masks the fire to a circle. Gas Stove punches 12 hot zones into the source row to make discrete jets. Sun Disc and Solar Flare use a mostly-white solar palette.

Some fireplaces (`lava-lamp`, `aurora`, `lightsaber`, `firefly-jar`, `joint-tray`, `bong-cherry`, `incense`, `match-strike`, `birthday-candle`, `new-years`) use entirely custom CSS / canvas particle systems instead — picked when the Doom-fire approach didn't fit the subject.

## Palettes

`hearth` · `crystal` · `ember` · `mystic` · `plasma` · `tiki` · `lava` · `forge` · `gas` · `saber` · `solar` · `aurora`

Add your own to `public/lib/fire.js`. Each is just an array of `[r, g, b]` triples ordered cold→hot.

## Sponsor

Every fireplace renders a small fixed-position attribution linking to **<https://shop.getgoodfeels.com>**. The gallery hub also has a banner sponsor button. Both are baked into the chrome and present on every page.

If you fork this and want to remove or replace the sponsor with your own, edit `public/lib/chrome.js` (one file, ~120 lines).

## License

CC0 1.0 Universal — public domain. See `LICENSE`. The fire algorithm itself was published by Fabien Sanglard / id Software in 1993 and is also widely-shared.

## Credits

Built by [@mhoydich](https://github.com/mhoydich) · sponsored by [Good Feels](https://shop.getgoodfeels.com).

Doom-fire algorithm (1993) — Fabien Sanglard's [reverse-engineering writeup](https://fabiensanglard.net/doom_fire_psx/) is the canonical reference.

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose: retrieving fireplaces via different formats (URL, HTML, embed, gallery), listing all styles, random selection, and vibe-based recommendation. No two tools overlap in functionality.

Naming Consistency5/5

All tools follow the consistent pattern 'fireplace_verb_noun' (e.g., fireplace_get_url, fireplace_list_styles). The naming is uniform, descriptive, and easy to understand.

Tool Count5/5

With 7 tools, the scope is well-matched to the domain of a digital fireplace server. It provides essential operations (listing, retrieval, random, recommendation) without being too many or too few.

Completeness5/5

The tool surface covers the full consumption lifecycle: discover (list, random, recommend), retrieve (URL, HTML, embed code, gallery). There are no obvious gaps for a read-only fireplace catalog.

Maintenance

ActivityInactive
ResponsivenessNo issues