MCP server that forges pixel art sprites & game assets using Google Gemini
PixelForge has 8 tools with complete input schemas and reasonable descriptions, but suffers from several critical pattern violations. Tool names use 'forge_' and 'process_'/'optimize_' prefixes rather than clear action verbs (create_, generate_, etc.), making intent less obvious. Descriptions are present but generic (100-150 chars typical) and lack actionable context about when/why to use each tool or what downstream tools need. No output schemas are documented anywhere in the source. Error handling is minimal, the server logs errors but provides no recovery guidance or categorization. The tools read/write files to user-specified paths without validation or safety guardrails, creating injection risks. Most critically, STDIO transport caps the overall score at 50; without HTTP/SSE, the server cannot be used by hosted clients. Definitions themselves are borderline C-grade; protocol readiness is the hard ceiling.
Generate an animated sprite sheet with multiple frames
Generate a full game background image
Generate a sprite sheet of game items (potions, weapons, collectibles, etc.)
Generate a single pixel art sprite with optional background
Generate a game screenshot/thumbnail showing action composition
Generate a seamless tileable texture for game terrain
Optimize sprite file size: reduce colors, apply quantization, compress
No output schemas documented. All 8 tools lack documented return types and field structures. LLMs cannot infer what fields are in responses, forcing them to guess or experiment with results.
Tool naming violates verb-first convention. 'forge_sprite', 'forge_animation', etc. use a prefix pattern rather than clear action verbs (create_, generate_, synthesize_). LLMs must infer intent from the prefix.
Descriptions are generic and lack recovery guidance. 'Generate a single pixel art sprite with optional background' tells WHAT but not WHY, WHEN, or what to do if generation fails. No dependency hints (e.g., 'Use process_sprite to remove backgrounds afterward').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 62 | - | v1 |
Post-process a sprite: remove background, crop to content, make transparent
No error handling or recovery guidance. The server logs errors but provides no categorization (retryable vs. user-fixable vs. fatal), no suggestions for next steps, and no actionable feedback when Gemini API calls fail or file writes are denied.
Path traversal and injection risks. All 8 tools accept arbitrary file paths (outputPath, spritePath) without validation or sandboxing. An LLM or user could pass '../../sensitive/file.png' or construct paths that escape intended directories.
Parameters lack clear constraints and enums. 'style' and 'background' accept constrained values (neon, retro, gameboy, etc.) but are documented as free-form strings. Should be declared as enums to prevent LLM hallucination of invalid values.
API key exposed as runtime dependency without clear secret injection pattern. GEMINI_API_KEY is read from process.env in index.ts with only a warning if missing. No documentation of secure configuration, and the server continues to run with degraded functionality instead of failing fast.
Tool composition lacks idempotency documentation. Calling forge_sprite twice with the same description and outputPath will overwrite the file silently. No mention of idempotency, no confirmation mechanism, and no dry-run support for irreversible operations.