# Reported issues for pixoo-mcp-server

Pod holds 21 of 44 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [pixoo-mcp-server](/mcp/pixoo-mcp-server).

## Most discussed

### bug(remote-image): https images depend on a writable temp dir and render unlike local files

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

`fetchRemoteImageToTempPng` (`src/renderer/remote-image.ts`) re-encodes every https download as a PNG in the OS temp dir so `loadImage` can read it, and `pixoo_push_image` and the `pixoo_compose_scene` image preload unlink it afterwards. The round trip costs three things: every remote source fails when the temp dir isn't writable,…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/23) · 2026-09-24 · closed · 4 comments

### feat(text): report characters drawn as the ? fallback in standard and compact text

### Use case

A caller renders `20 €`, `9 ♥ 7×`, or common typed punctuation (`it’s`, `—`) in the `standard` or `compact` font. Both faces draw the same characters, printable ASCII plus `° ← ↑ → ↓ ▲ ▼ ♥ · …`; anything else, including a newline inside a single string or the invisible U+FE0F that often follows `♥`, draws as `?`, and nothing in the response says so. The caller only finds out by inspecting the preview image, which a model may not do closely enough to notice a single substituted…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/57) · 2026-09-27 · closed · 3 comments

### bug(tools): Object.prototype names like constructor resolve as colors

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

`constructor` and `__proto__`, in any case, pass as colors. `@cyanheads/pixoo-toolkit` 0.8.2's `resolveColor` returns the inherited `Object.prototype` member instead of throwing (cyanheads/pixoo-toolkit#51), so every color input of `pixoo_compose_scene`, `pixoo_display_text`, and `pixoo_overlay_text` accepts them and draws black.…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/32) · 2026-09-26 · closed · 3 comments

### bug(pixoo_overlay_text): x/y bounds hardcoded to 64 regardless of PIXOO_SIZE

### Server version

1.0.0

### mcp-ts-core version

0.10.6

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

stdio

### OS

macOS

### Description

`pixoo_overlay_text`'s `x`/`y` are `.min(0).max(64)` regardless of `PIXOO_SIZE`: one past the edge on a 64px display (last addressable index is 63), far off-canvas on a 16/32px device. Unlike `pixoo_display_text` and `pixoo_compose_scene`, which read `getServerConfig()` in their handlers, this tool never imports it.

The bound can't…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/8) · 2026-06-30 · closed · 3 comments

### enhancement(pixoo_push_image): enforce fetch size cap during streaming

### Use case

`fetchRemoteImageToTempPng` (`src/renderer/remote-image.ts`) — the single fetch path shared by `pixoo_push_image` and the scene image preloader — enforces its 10 MB cap (`MAX_IMAGE_BYTES`) only after the full response body is buffered: it checks `content-length`, then `await resp.arrayBuffer()`, then checks `buf.byteLength`. A response with no `content-length` header passes the pre-check and is buffered in full before the post-check fires, so a remote URL can force unbounded…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/7) · 2026-06-30 · closed · 3 comments

### bug(pixoo_display_text): a scrolling line's layout box is not where its frame draws it

### Server version

1.2.1

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

When single-line text is too wide for the panel, `pixoo_display_text` scrolls it and reports `layout[0].action: "scrolling"`, but `box.x` is the centered placement, off the left edge. The static frame, the preview, and the scroll's starting position all draw the text from x = 0, so a caller reading `box` to place other content gets a column the…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/55) · 2026-09-27 · closed · 2 comments

### bug(pixoo_compose_scene): image and icon w/h accept 0 and negatives

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

The `pixoo_compose_scene` image element declares `w` and `h` as `z.number().int()` with no lower bound, so `0` and negative values pass validation and reach sharp inside `loadImage`. The caller gets an unclassified internal error with no recovery hint. The icon element has the same gap: `w: 0` renders nothing and reports success.…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/33) · 2026-09-26 · closed · 2 comments

### bug(config): a relative PIXOO_OUTPUT_DIR reports relative outputFiles

### Server version

1.2.2

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

`PIXOO_OUTPUT_DIR` accepts any string, and preview files are written to `path.join(<dir>, <name>)`. A relative value such as `previews` saves under the server's working directory and reports relative `outputFiles`, while every render tool's output schema describes `outputFiles` as absolute paths. A caller can't resolve a relative path without…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/61) · 2026-09-27 · closed · 1 comment

## Most recent

### bug(pixoo_display_text): unknown keys in style, position, and background are dropped silently

### Server version

1.2.2

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

`pixoo_display_text` rejects an unknown top-level key, but its nested objects are open: `style` and its custom `palette` stop, `position`, and both `background` object forms drop unknown keys silently. A misspelled key (`style.colour`, `position.X`, `background.gradeint`) renders as if it were absent. `pixoo_compose_scene` closes the same objects…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/60) · 2026-09-27 · closed · 1 comment

### bug(pixoo_compose_scene): an element's effect is ignored when it also has animate

### Server version

1.2.2

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

An element holding both `effect` and `animate` renders only its `animate` tracks: the scene renderer compiles `effect` only when `animate` is absent, so the effect is dropped with no error or notice. The design doc states one of `effect` or `animate` per element, but the element schemas accept both.

### Steps to reproduce

1. Call…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/59) · 2026-09-27 · closed · 1 comment

### bug(tools): layout action misreports static overflow and advertises values no path returns

### Server version

1.2.1

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

The `layout[]` output schema on `pixoo_display_text` and `pixoo_compose_scene` advertises values no path returns. `action` lists `none`, `shrunk-to-compact`, `scrolling`, `wrapped`, `truncated`, and `clipped`: `pixoo_display_text` returns only the first three, and `pixoo_compose_scene` returns only `none`, since scene elements are placed as given…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/56) · 2026-09-27 · closed · 1 comment

### bug(pixoo_compose_scene): misspelled element keys are dropped silently

### Server version

1.2.1

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

`pixoo_compose_scene` rejects an unknown top-level key, but every nested object drops unknown keys silently: each element type, `style` and its custom `palette` stop, `effect`, `animate`, a rect `gradient`, each `pixels` point, and the `background` objects. Only `finish` is closed. A misspelled key (`colour`, `strokewidth`, `amplitud`), a key the…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/54) · 2026-09-27 · closed · 1 comment

### bug(image): relative image and sprite paths resolve against the server's working directory

### Server version

1.2.1

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

`pixoo_push_image` `source`, and the `pixoo_compose_scene` image `source` and sprite `path`, are described as absolute local paths, but a relative path is accepted and resolved against the server process's working directory. A caller can't know that directory, so the same call finds a file or fails as `asset_not_found` depending on how the server…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/53) · 2026-09-27 · closed · 1 comment

### bug(pixoo_compose_scene): asset_not_found never sends its declared recovery hint

### Server version

1.2.1

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

`pixoo_compose_scene` declares `asset_not_found` with the recovery hint "Verify the file path exists and is readable, or check the URL is reachable.", but no path that raises it sends that hint: `assertReadableAsset` (`src/renderer/scene-renderer.ts`) writes its own ("Pass an absolute path to an existing, readable image file."), and the…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/51) · 2026-09-26 · closed · 1 comment

### bug(keyframes): twinkle renders different frames for identical calls

### Server version

1.2.1

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

The `twinkle` effect adds `Math.random()` jitter to each frame's brightness (`src/renderer/keyframes.ts`), so two identical `pixoo_compose_scene` calls render different frames. The tool declares `idempotentHint: true`, an agent comparing a preview with what it pushed a moment later sees different pixels, and any hash pin on a twinkling scene is…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/50) · 2026-09-26 · closed · 1 comment

### bug(pixoo_display_text): layout reports fits:true for text off the top, left, or bottom

### Server version

1.2.1

### mcp-ts-core version

0.13.9

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

stdio

### Description

`pixoo_display_text` reports `layout[].fits: true` for text that runs off the display. The single-line check compares only the text width to the panel (`src/renderer/text-engine.ts`), and the multi-line check tests only the right and bottom edges (`pixoo-display-text.tool.ts`), so text that is too tall, or placed above or left of the panel, still…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/49) · 2026-09-26 · closed · 1 comment

### bug(keyframes): non-numeric track values are accepted, then render wrong or fail unclassified

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

The `pixoo_compose_scene` `animate` schema accepts any string as a keyframe value, and the renderer reads `opacity`, `dx` and `dy` with `Number()`. A non-numeric string therefore becomes `NaN` and is never rejected. `visible` reads with `Boolean()`, so `"false"` keeps the element shown. Related: #45.

### Steps to reproduce

1.…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/47) · 2026-09-26 · closed · 1 comment

### bug(keyframes): numeric-string keyframes hold or draw fully opaque between keyframes

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

`interpolateKeyframe` treats every pair of strings as colors. A numeric-string `opacity`, `dx` or `dy` keyframe that isn't a color holds its first value instead of ramping. One that looks like a hex color (`"000"`, `"100"`, `"123456"`) lerps to `#rrggbb`, which reads as `NaN`, so the element draws fully opaque between keyframes.…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/43) · 2026-09-26 · closed · 1 comment

### bug(pixoo_compose_scene): effect amplitude is ignored by pulse and twinkle

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

The `pixoo_compose_scene` effect `amplitude` is described as "0–1 scale for fade/pulse", but only `float`, `scroll-left`/`scroll-right` and `drift` read it. The other effects ignore it:

- `pulse` always ramps opacity 50–100.
- `twinkle` always flickers 40–100.
- `fade-in`, `fade-out` and `blink` ignore it.

### Steps to reproduce…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/41) · 2026-09-26 · closed · 1 comment

### bug(keyframes): an invalid color keyframe past the last frame is never reported

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

When a color keyframe doesn't resolve, `interpolateKeyframe` (`src/renderer/keyframes.ts`) holds the previous color. The bad keyframe errors only on its own frame, so a typo in a keyframe past the scene's last frame is never reported.

### Steps to reproduce

1. Call `pixoo_compose_scene` with `push: false`, `frames: 2`, and one…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/40) · 2026-09-26 · closed · 1 comment

### bug(pixoo_compose_scene): stroke-drawn icons lose their glyphs

### Server version

1.2.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.2

### Transport

HTTP (Streamable HTTP)

### Description

Several registry icons are drawn as strokes, but the `icon` element fills every path with the even-odd rule. A two-point subpath has no area, so those strokes vanish:

- `snow` draws nothing.
- The arrows lose their shafts, and `sun` loses its rays.
- `x-circle`, `alert-circle` and `info` render as plain disks.
- `check-circle`'s…

[Read the thread](https://github.com/cyanheads/pixoo-mcp-server/issues/39) · 2026-09-26 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/pixoo-mcp-server/issues).
