Problem: A D&D 5e campaign setting carried custom subsystems, content that only some players should see, and over 400 homebrew spells. Entering that into Foundry VTT by hand would have taken months and introduced transcription errors.
Approach: We built a set of modules rather than one. The core module handles the spell system overlay with subsystem badges, per-actor gated content, and cognitive load tracking. Supporting modules add a 3D canvas, encounter automation, and theming.
Technical details:
- TypeScript modules built with esbuild for Foundry VTT v14
- Plutonium import pipeline converting 482 spells with VEIL source tags
- Subsystem badges (MAT, ENV, BIO, POW) on the spell sheets
- Knowledge-gated content enforced per actor
- 3D canvas replacement in Three.js
- Encounter automation with roll table triggers and party management
- REST relay and MCP integration for AI-assisted GM tooling
Outcome: The campaign launched with all of its content in the game on day one. The module delivers content and the GM runs the story. 482 spells are playable without a single manual entry.
Stack: TypeScript, esbuild, Foundry VTT v14, Python, REST APIs, Three.js, MCP
Sandboxed plugin ran for projects/foundry-vtt-ecosystem and read “Foundry VTT Module Ecosystem” through the mediated API.