A TypeScript MCP server exposes two tools to launch playable DOOM inline in ChatGPT and Claude or fall back to a signed browser URL, with no server-side session state required.
Key Takeaways
Two MCP tools: create_doom_session for inline rendering in compatible hosts, get_doom_launch_url as a universal fallback; signed token is self-contained.
The critical architectural fix: run the DOOM canvas directly inside the host iframe instead of nesting a separate browser page, which hit CSP and frame-src blocks.
Uses cloudflare/doom-wasm runtime with Freedoom Phase 1 for redistribution; WAD config written directly into the Emscripten filesystem to eliminate blob-backed preload failures.
Deployed to Netlify under /doom/*; TypeScript MCP server and static DOOM assets coexist under the same namespace.
Feature scope was cut aggressively – save/load, screenshots, persistence adapters – to keep the signed-token boot path simple and the inline app reliable.
Hacker News Comment Review
At least one commenter assumed MCP was synthesizing DOOM frames from a training set, revealing the MCP app concept is not self-evident even to technical HN readers.
One commenter framed this as useful boundary-testing for MCP apps, which are still new and underused – treating the project as exploration rather than production tooling.
Notable Comments
@nsxwolf: Asked if MCP is “synthesizing DOOM frames from a training set” – a sharp signal that MCP app rendering needs better top-of-post framing for builders.