An RPG engine where an LLM acts as the narrator and a separate MCP server enforces the rules. The architecture is deliberately generic — GameManager depends only on ports (NarratorPort, InputPort, OutputPort, ProfileStore) — so the game layer is swappable without touching the orchestration logic.
The rule system (mcp-game-rules) is Cosmere-flavoured: six attributes, 1d20 + attribute + skill vs DC, optional plot dice, and data-driven DicePolicy per rule pack. Difficulty and rule complexity are layered so the game can grow as the player does. Performance is evaluated by an LLM-as-judge tuned for a 2-year-old — rewarding engagement over description quality.