Forge & NeoForge · 1.16 – 1.21 · dedicated servers

Which mod killed your server?

Command-line tools for people who run modded Minecraft servers. One file each, no dependencies, Python 3.8+.

Free edition on GitHub See the tools no install · no account · MIT
$ python forge_doctor.py crash-reports/crash-2026-10-01_12.34.56-server.txt

  Minecraft        1.20.1
  Loader           47.4.10
  Java             21.0.10
  Reached 'Done'   no

  Crash description: Ticking entity

  CULPRIT (first non-vanilla frame):
    grimfauna-1.20.1-2.1.11.jar
    in StalkerOnEntityTickUpdateProcedure

[1] FATAL  A mod crashed while ticking an entity or block

     How to fix it:  update that mod, or remove the entity —
     the crash report gives you its coordinates.

The tools

Three jobs. One finds out why your server died. One finds the things that are broken and never say so. One keeps it running without looping on the same failure.

Forge Server Doctor

$19 · free edition available

Reads a crash report or latest.log and reports the root cause, the mod responsible, and the fix.

  • 24 failure modes, each with its own written remedy
  • Names the mod jar at fault from the stack trace
  • Verified against 13 real crash reports from a live 234-mod server
  • --json and real exit codes for start scripts

Pack Doctor

$24 · free edition available

Indexes every ID your mods actually register, then checks everything your datapacks, KubeJS scripts, quests and configs reference against it.

  • Finds typo'd IDs that silently give the player nothing
  • Knows KubeJS startup scripts register content
  • Findings tiered by confidence, so it doesn't cry wolf
  • Flags duplicate mod jars before they stop your server booting

Server Sentinel

$29

Restarts your crashed server, but refuses to restart into a crash it has already seen. One bad mod stops being an all-night loop.

  • Crash signatures that tell "the same crash again" from "a different crash"
  • Names the mod jar at fault, not the vanilla frame on top of it
  • Read-only watch mode that changes nothing
  • Discord alerts, JSON event log, live player count

Found in a real, widely-played pack

Pack Doctor was built against two live servers, 92 and 233 jars. These three are live right now in a pack thousands of people play. Every one was confirmed against the mod's own jar: the correct ID exists, the referenced one doesn't.

The pack referencesWhat actually existsResult
cooked_caned_fishcooked_canned_fishno diet category, silently
cooked_canned_rabit_soupcooked_canned_rabbit_soupno diet category, silently
stamplerstaplerremoval never applies

None of those crash. None log an error. You find out when a player complains three weeks later, if ever.

Built against real data, not invented samples

The first version of Forge Server Doctor passed every test I wrote and still missed five of eight real crash reports — the same person had written both the samples and the patterns. It got rebuilt against an actual crash-report folder.

Pack Doctor went the same way: its first run reported 169 typos on a real pack and most were noise, because comparing whole IDs lets a shared namespace inflate every similarity score. Comparing the paths alone cut it to 63 real candidates.

Both tools ship their test suites. Every test is mutation-checked — the fix reverted, the test confirmed failing — so a passing suite means something.

How they were built

A long write-up of the debugging: a tool that passed every test I wrote and still misdiagnosed five of eight real crashes, a filename with two versions in it, and a performance theory that moved the number by 0.00 seconds.

Your test fixtures are lying to you: what 13 real Minecraft crash reports taught me

What they will not do

A diagnostic tool that overstates its reach wastes more of your time than one that admits its edges.