Skip to main content
Glama
README.md
<!--
README DESIGN:

  Product principle.
    The README answers three questions for three readers, each in under
    60 seconds: an operator gets a running server, an evaluator
    understands what it does and how it differs, a contributor finds how
    to help. It is a design document, not an afterthought. Every section
    earns its place.

  Scannability.
    Engineers scan, don't read. Consistent heading hierarchy (ATX only,
    no setext). No wall of prose — every section is broken into
    digestible paragraphs. One story vector per section.

  Voice.
    Punchy, reserved, grounded in fact. Direct address ("you"). No
    first-person ("we", "I", "our"). Professional without being cold.
    No "obvious to me" assumptions — every sentence survives a reader
    who knows nothing about the project.

  Plain English (Standing Rule 10).
    Describe what the user does, not what the tool is called. Write as
    if instructing a person, not documenting an API. Tool names,
    parameter shapes, and technical syntax SHALL NOT appear in prose.
    The validator enforces this.

  Structure.
    Orientation → Table of contents → Run a server (§1) → How it works
    (§2) → How it compares (§3) → License. No other ordering. Section
    headings use canonical numbering (§1–§3) matching the TOC and
    cross-reference links. The TOC is a bulleted list of every h2 and h3
    heading with Markdown anchor links, each h2 entry tagged by audience.
    It does not link to itself or the Orientation.

  Audience split.
    §1 is for operators who want a server now — one copy-paste
    quick-start sequence, plus installing rulesets. §2
    describes capabilities to an evaluator. §3 is the competitive
    landscape — one row per competitor category.

  Orientation.
    Exactly five elements: h1 heading, bold tagline on its own line, a
    project-wiki line, the MCP server card badges (below the wiki line),
    and one prose paragraph (≤80 words). The paragraph defines "holonovel"
    as a Star Trek holodeck program. States what Holonovel builds (the
    server, the Holodeck), what a campaign becomes (the program, the
    Novel), and what rulebooks become (the engine). Names D&D 5e and
    Starfinder as example rulesets the spec can build. Closes with
    "Your books. Your server. Your Holodeck."

  Table of contents.
    Bulleted list of every h2 and h3 heading with Markdown anchor links.
    Appears between the Orientation and §1. Each h2 entry carries a
    trailing audience tag — operators, evaluators, or reference —
    outside the link. h3 entries are untagged. No prose, no descriptions.
    The validator enforces TOC-to-heading consistency.

  Run a server (§1).
    Two h3 subsections. No introductory prose under the h2.
    Install: a lede stating that a fresh install is playable with no
    rulebook (the starter Novel), the base-server description, prerequisite
    (Node.js 24+), shell code block for install, and copy-paste JSON config
    block with `<path>` placeholder.
    Install a ruleset: drop-in packages, lazy loading, and the
    state-directory location.
    Config blocks use `json` language tag. Shell blocks use `sh`.
    No blockquotes, no tool names in prose.

  How it works (§2).
    One introductory h2 sentence (≤50 words) naming the pipeline, then
    five stages — Convert → Build → Holodeck → Novel → Synthesis. Each
    stage follows this format:
      1. What-it-is paragraph — defines the capability conceptually.
      2. What-you-can-do paragraph — describes player/GM capabilities.
      3. Demo blockquote — 2–5 natural-language prompts, each a
         self-contained sentence valid on the holonovel MCP server.
      4. Closing takeaway — one factual sentence, not a slogan.
    Badge enforcement is not a stage — it belongs to the Novel, described
    once there. No forward references between stages. Each stage is
    readable independently.

  Five stages (§2).
    Convert (rulebooks → clean Markdown) and Build (Markdown → a
    declarative ruleset package) carry the Convert/Build claims.
    Holodeck (the simulation engine) covers the spatial model and the
    narrative model, including their couplings. Mentions Inform exactly
    once.
    Novel (the campaign save) covers the customizations and
    configurations that shape play — badge settings, badge enforcement,
    autonomy, player signals, narrative directives, behavioral settings,
    ruleset scope, and presentation.
    Synthesis (the game evolving) distinguishes Ruleset Wisdom, external
    research, internal synthesis, and player-authored items.

  Badge terminology.
    The canonical term is "badge," not "hat." Badges are Novel-scoped:
    each Novel has its own active badge. Enforcement runs server-side.
    Four settings: Player, Game Master, Observer, Editor. Player and GM
    are "in the story." Observer is in the story. Editor (none) is out
    of the story.

  Comparison table (§3).
    h2 heading, no introductory prose. Three columns (Category | What
    you're used to | How Holonovel differs). Three rows, one per
    competitor category — AI storytelling apps, generic LLM chat, and
    rules MCP servers. Never individual products. One
    closing prose paragraph (≤80 words) states the gap and names D&D 5e
    and Starfinder. Rows name the concrete failure mode, not an abstraction.

  Refrain contract.
    "Your books. Your server. Your Holodeck." appears once, in the
    Orientation paragraph. The word "Holodeck" appears in the tagline
    and the refrain as the product's central metaphor. Additional prose
    uses are permissible where the metaphor drives meaning.

  License section.
    A `## License` h2 after §3, listed in the TOC with a reference tag.
    Opens with a canonical-origin line and an MIT statement, then a
    bulleted attribution list (every row in Appendix U, one per bullet)
    prefixed with "Built from:", then the RSS link and last-updated date.
    Date matches package.json version date. Update both or neither.
    Attribution bullets are exempt from the no-feature-list rule.

  Demo prompt maintenance.
    Every prompt in a demo blockquote SHALL be a valid natural-language
    command on the holonovel MCP server. The author SHALL verify all
    prompts after any tool or capability change. Broken prompts are a
    README defect.

  Blockquote convention.
    Blockquotes appear only in §2 stage subsections. No other section
    uses blockquotes. Each blockquote contains 2–5 natural-language
    prompts, each a self-contained sentence. No tool names, no parameter
    shapes, no function signatures — exactly what the user would say
    or type.

  Table convention.
    Exactly one table: the comparison table (§3). No other tables. No
    tables in prose. Pipe-delimited Markdown. No inline formatting beyond
    bold. Column widths are author-managed.

  No repetition.
    One story vector per section. Don't explain the same concept in two
    different places. The validator detects near-duplicate sentences.
    No bullet lists of features in prose; license attribution bullets
    are the exception. No tables for feature descriptions.

  Future targets.
    The Orientation and §3 closing prose name D&D 5e and Starfinder as
    example rulesets. No Mothership appears anywhere in the document.

  Non-goals.
    The README is not an API reference, a tool catalog, a spec document,
    or a changelog. It does not enumerate tools or parameters. It does
    not describe implementation details. It does not repeat information
    found in CHANGELOG.md, AGENTS.md, or holonovel.md. Task-based routing
    lives in the wiki: the README links to Getting Started, Building a
    Server, Game Mastering, and the FAQ at the point of need, and links the
    wiki home once in the Orientation.

  Word budget.
    Total prose ≤ 1,500 words (excludes code blocks, config JSON,
    tables, blockquotes, TOC, and footer). Orientation ≤ 80 words. §3
    closing prose ≤ 80 words. The validator enforces the 1,500-word cap.

  Validator.
    All rules marked "The validator enforces" SHALL be checked by
    scripts/validate-readme.ts. Rules without mechanical enforcement
    are maintained by author discipline. Adding an enforceable rule
    requires a corresponding validator check.

  Readme-driven development.
    The README is the first artifact of the repo. Changes that affect
    the README's claims SHALL update the README before or alongside the
    code change. A README that promises something the server does not
    deliver is a defect.
-->

# Holonovel

**The Holodeck for your rulebooks — rules enforced, worlds remembered.**

Start with the [project wiki](https://git.gay/flukeatzerocool/Holonovel/wiki) —
it routes players, Game Masters, and builders by task.

[![holonovel MCP server](https://glama.ai/mcp/servers/flukeatzerocool/holonovel/badges/card.svg)](https://glama.ai/mcp/servers/flukeatzerocool/holonovel)

A *holonovel* is a Star Trek holodeck program — an interactive story where you
step inside as a character and the rules govern. Holonovel builds the server (the
Holodeck). Your campaign is the program (the Novel). Your rulebooks become the
engine — D&D 5e, Starfinder, or the game on your shelf. Your books. Your server.
Your Holodeck.

## Table of contents

- [Run a server](#run-a-server) — operators
  - [Install](#install)
  - [Install a ruleset](#install-a-ruleset)
- [How it works](#how-it-works) — evaluators
  - [Convert](#convert)
  - [Build](#build)
  - [Holodeck](#holodeck)
  - [Novel](#novel)
  - [Synthesis](#synthesis)
- [How it compares](#how-it-compares) — evaluators
- [License](#license) — reference

## Run a server

### Install

A fresh install is playable without a rulebook. On first start the server creates
**Torre Nosferatu**, a tutorial Novel, and opens it; set `TTRPG_STARTER_NOVEL=off`
to start with an empty world instead.

The base server runs the Holodeck. Rooms, objects, exits, and containment form a
real state graph, while scenes, NPCs, lore, and a story journal layer on top, so
narration is grounded in stored facts rather than prior chat turns. Requires
Node.js 22+.

```sh
npx -y holonovel
```

Add to your MCP client:

```json
"holonovel": {
  "type": "local",
  "command": ["npx", "-y", "holonovel"],
  "enabled": true
}
```

From a source checkout, run `cd holonovel && npm install && npm run start`, then
point the client at `npx tsx src/index.ts` in that directory.

Campaign data defaults to the operating system's user-data directory:
`~/.local/share/holonovel` on Linux, `~/Library/Application Support/holonovel`
on macOS, or `%LOCALAPPDATA%\holonovel` on Windows. Set `TTRPG_DATA_DIR` to
override it. An existing `.holonovel-state/` beside the server is preserved.

Setup details and first-run checks: [Getting Started
guide](https://git.gay/flukeatzerocool/Holonovel/wiki/Getting-Started).

### Install a ruleset

A ruleset package is a declarative bundle produced by the Build workflow. Copy it
into the server's ruleset install directory and the server registers it. That
directory is inside the state directory — by default the per-user data location
described above.

Packages load lazily: a ruleset's tools and index are read only when you open a
campaign bound to it, so unused packages cost nothing at startup. Install,
remove, and list packages from the server's own tools, or move files and restart.

Campaign data and installed packages stay in the state directory, outside the
server tree, so updating Holonovel leaves both intact. The [Building a Server
guide](https://git.gay/flukeatzerocool/Holonovel/wiki/Building-a-Server) covers
packaging a rulebook.

## How it works

Holonovel is one pipeline — Convert, Build, Holodeck, Novel, Synthesis — that
turns a rulebook into a running table.

### Convert

Convert takes PDFs, HTML, and web scrapes and turns them into clean Markdown.
Multi-column pages are read in the right order, and tables split across page
breaks are reassembled. Scanned pages fall back to OCR. The output is
structurally sound — headings resolve and references trace.

> "Convert the files in `ruleset/dnd5e/` to Markdown for the D&D 5e ruleset."
> "Convert the HTML export in `ruleset/starfinder/` for the Starfinder ruleset."

Clean, indexed Markdown ready for the build.

### Build

Build reads that Markdown and extracts the mechanics. Dice procedures, combat
systems, spell catalogues, equipment tables, condition tracks — modeled elements
become tools, resources, or prompts in a declarative ruleset package, while
anything that can't be modeled stays searchable. Guidance prose becomes narrative
material. The discovery engine reads the source in chunks, measures extraction
confidence, and works until the mechanical sections are accounted for. Nothing is
fabricated to fill a gap.

> "Build the Markdown in `ruleset/dnd5e/` into a holonovel."
> "Package `ruleset/starfinder/` as a second ruleset alongside D&D 5e."

One spec reads any rulebook, and the build produces zero hand-written code.

### Holodeck

The Holodeck is the narrative world model — the core engine that drives the
simulation. It turns a saved Novel into a running game. Every part of a campaign
is structured state: rooms, objects, exits, and containment in the spatial
model; scenes, NPCs, lore, factions, secrets, vows, countdowns, relationships,
decisions, and the story journal in the narrative model; mechanics and ruleset
voice alongside them. None is decoration. Each has a defined effect on the
others.

That effect is what makes it an engine. A scene sets the place and cast and
activates lore whose triggers match its text. An NPC carries identity,
disposition, relationships, and a location, so moving them changes who is
present and who can speak. A secret stays hidden until knowledge and trigger
conditions allow it to surface. A vow creates a decision the Game Master
must honor. A countdown advances on schedule and fires its result into the world.
A mechanical outcome — damage, a destroyed object, a doused light — mutates the
state it touches. The story journal records the consequence, and later scenes can
recall it.

The server evaluates these couplings. The AI narrates the result. Nothing is left
to a "remember this" instruction, and nothing drifts between turns.

Parser commands act on the spatial model with real containment logic. Go north.
Take the lantern. The room, the object, and the inventory are stored records, not
claims in narration. Exits connect in both directions, containers hold what they
hold, and doors stay locked until something unlocks them. The spatial conventions
are drawn from Inform, the interactive-fiction language behind decades of
text-adventure classics.

> "Go north into the flooded ossuary."
> "Set the scene here — the ossuary reeks of stale incense and old water."
> "Have Sister Mora follow me into the ossuary."
> "Ask Sister Mora what she knows about the buried order."
> "Advance the reliquary countdown by one day."

The Holodeck is the live simulation; the Novel is its save file.

### Novel

A Novel is the save file for a Holodeck game, and it stores the configuration
that shapes that game. Server settings supply defaults; each Novel overrides them
where the setting is campaign-scoped, and every change is saved with the
campaign.

Who plays is configurable. A badge sets your seat at the table and what that seat
can see: Player is in the story as a character, Game Master sees and controls the
world, Observer watches while the AI runs both roles, and Editor steps outside
the story to manage the save. The server enforces the boundary, so GM-only
secrets do not leak to the Player badge. Each Novel carries its own active badge,
and four autonomy sliders decide how much the AI handles alongside it: level
(auto-play, prompt on mechanical actions, or manual), confirmation (execute,
confirm, or prompt), safety (safe, moderate, or hardcore), and creativity
(predictable, standard, or chaotic). The sliders compose with any badge, so a
human can hand off one character, all NPCs, or the whole table without changing
seats. The [Game Mastering
guide](https://git.gay/flukeatzerocool/Holonovel/wiki/Game-Mastering) covers
running the world from the opposite side.

How the story behaves is configurable. Player signals set pace, difficulty, tone,
focus, and boundaries. A narrative directive tunes pacing, autonomy, world
reactivity, and synthesis in plain language; matching keywords take effect
mechanically, and anything else becomes guidance for the narrator. Behavioral
settings cover whether the world reacts, whether NPCs and factions pursue goals
on their own, when synthesis refreshes, how much memory each tier retains, and
whether moments record automatically. Point of view can lock to the active
character or stay omniscient, and social scenes can use a manual, natural, list,
or pooled speaker order.

What content appears is configurable. A Novel binds to one ruleset at creation
and can add supplementary rulesets without changing that binding. The categories
used to organize available actions can be reassigned per Novel, and briefing
order, enabled action patterns, and journal detail decide which guidance
surfaces during play.

Export as JSON or Markdown. Import with merge, replace, or dry-run. Clone,
checkpoint, and roll back. A clone carries the full configuration.

> "Let the AI run all NPCs and player characters, but pause for mechanical decisions."
> "Make the game faster and darker, with harder fights."
> "Let the world react and NPCs act independently; use the rulebook's voice patterns."
> "Run synthesis whenever the scene changes."
> "Clone this Novel with its settings."

Every Novel-scoped setting is saved with the Novel, so a clone or checkpoint
preserves the exact game you configured.

### Synthesis

Synthesis deepens the Holodeck beyond mechanics. Ruleset Wisdom comes from the
rulebook and any vendor package during Build — voice examples from example-of-play dialogue, lore
templates from setting descriptions, action patterns from resolution sequences,
and narrative voice profiles from inspirational media citations. It is build
output, active by default, and survives every rebuild and synthesis reversion.

The Synthesis run adds two layers on demand. External research collects
web-sourced GM advice, actual-play breakdowns, and designer notes, tagged with
source URLs, confidence scores, and freshness timestamps. Internal synthesis
reads the Novel itself for patterns the table has already produced. Both are
inert by default: the Game Master activates what fits and deactivates what does
not, and that activation state is saved with the Novel. Re-running synthesis
replaces inactive items and preserves active ones. Reverting removes the
synthesis layers; Ruleset Wisdom and player-authored items persist.

Synthesis can run on demand, at the start of a session, or after a scene change.

> "Research horror one-shot pacing and actual-play examples, tagged with sources."
> "Enable the horror pacing guidance that fits this campaign."
> "Run synthesis after every scene change."

Ruleset Wisdom, synthesis layers, and player-authored items coexist in the Novel
without replacing one another.

## How it compares

| Category | What you're used to | How Holonovel differs |
|----------|---------------------|-----------------------|
| AI storytelling apps | Narrative-first apps with no rule engine — conditions drift, dice are improvised, the world is whatever the model remembers | The server holds the rules, dice, and world state; the AI narrates outcomes it cannot invent. |
| Generic LLM chat | General-purpose chat with no durable state — forgets conditions mid-combat, invents spells, drifts toward safe outcomes | Mechanics resolve deterministically, state survives restarts, and the game keeps its consequences. |
| Rules MCP servers | Server-side mechanics and durable saves, but a fixed ruleset or a single SRD seed. | Any rulebook, a containment-based world, and badge-enforced roles in one server. |

Rules engines serve one system. Storytellers improvise mechanics. Holonovel does
neither: any rulebook becomes enforced mechanics, a spatial world, and a saved
campaign. Across the TTRPG MCP servers reviewed in October 2026, no other
reviewed server combined rulebook ingestion, spatial containment, and server-side
role enforcement — for D&D 5e, Starfinder, or your own book. Questions about a
specific table's setup? See the [FAQ](https://git.gay/flukeatzerocool/Holonovel/wiki/FAQ).

## License

Canonical origin: [git.gay/flukeatzerocool/Holonovel](https://git.gay/flukeatzerocool/Holonovel).

Holonovel is MIT-licensed. Built from:

- D&D 5e SRD v5.1 (CC BY 4.0 + OGL 1.0a, Wizards of the Coast)
- Graham Nelson's Inform (Artistic License 2.0, Graham Nelson)
- if-craft-corpus (CC BY 4.0, pvliesdonk)
- dmcp (MIT, Shawn Rushefsky)
- lonelog (CC BY-SA 4.0, zeruhur)
- BitD SRD (CC BY 3.0, John Harper)
- Ironsworn: Starforged SRD (CC BY 4.0, Shawn Tomkin)
- Sly Flourish Lazy GM Resource Document (CC BY 4.0, Mike Shea)
- The Alexandrian (CC BY 4.0, Justin Alexander)
- Dungeon World SRD (CC BY 3.0, Sage LaTorra, Adam Koebel)
- Fate SRD (CC BY 3.0, Evil Hat Productions)
- Ironsworn SRD (CC BY 4.0, Shawn Tomkin)

[RSS](https://git.gay/flukeatzerocool/Holonovel.rss). Last updated: <!-- @spec:date -->2026-10-26.

TDQS

A4.1/5.0

Scored across 36 tools

Disambiguation3/5

Many near-neighbor tools exist (manage_lore vs manage_corpus vs manage_knowledge vs manage_belief vs manage_note; manage_session vs manage_diagnostics; manage_novel vs manage_archive vs open_session/close_session; manage_scene vs manage_world vs manage_staging). The descriptions do substantial work with explicit 'Do NOT use when' cross-references, so an agent can usually disambiguate, but the sheer density of overlapping knowledge/memory tools means misselection remains plausible.

Naming Consistency4/5

The dominant pattern is manage_<noun> (17 tools) with a small set of verb_noun outliers (run_command, take_turn, open_session, close_session, set_badge, respond_decision, resolve_mechanic). The convention is mostly predictable, though the heavy use of an 'action' parameter inside manage_* tools makes the tool names less informative than they could be.

Tool Count2/5

36 tools is well above the workable range for a single server; many manage_* tools bundle a dozen actions each, so the effective surface is far larger than 36 implies. Several tools (manage_synthesis, manage_knowledge, manage_codex, manage_diagnostics) feel like separate subsystems that could be split or trimmed.

Completeness4/5

Coverage is unusually broad: world, PCs, NPCs, combat, conditions, factions, relationships, lore, beliefs, knowledge, story, vows, countdowns, sessions, archives, rulesets, codex, and synthesis all have lifecycle support. Minor gaps exist (e.g. entity lookup/search is scattered across manage_session.discover and manage_knowledge, with no first-class entity search), but core workflows are covered.

Maintenance

ActivityActive
ResponsivenessNo issues