// documentation
Skills and engine
mcwrench is a router plus twelve specialist skills, backed by a docs-learner that fetches and condenses any plugin's real documentation, a pre-built library of 64 popular plugins, conflict checks, and a set of helper scripts.
The router and 12 specialists
mcwrench is one always-on hub plus eleven focused specialists. You never name the specialist. The minecraft-server-router skill engages on any server-admin topic and hands off to the right one based on what you describe. Each skill is gamemode-agnostic and plugin-agnostic, and defers exact config keys to the docs-learner rather than guessing.
| Skill | Use for |
|---|---|
minecraft-server-router | Always-on hub. Engages on any server-admin topic and routes to a specialist below. |
audit-config | Lint a config tree (server.properties, paper-global.yml, spigot.yml, velocity.toml) for footguns, performance, and security; reports critical to low. |
server-doctor | Day-2 ops, read-only: diagnose a crash report or log (names the culprit plugin), grade server health, and plan a 26.1 / Java 25 upgrade. |
performance-tuning | Lag, TPS, MSPT, GC pauses, OOM. Spark profiling, heap sizing, view and simulation distance, entity and chunk tuning. |
permissions-helper | LuckPerms groups, tracks, contexts, and meta; Vault bridging; node conventions. |
proxy-network | Velocity, BungeeCord, or Waterfall; modern forwarding and the forwarding.secret handshake. |
gamemode-stacks | Canonical plugin stacks, config touchpoints, and pitfalls for server archetypes (SMP, skyblock, prison, factions, towny, minigames, RPG, KitPvP, and more). |
server-branding | Brand kit from a name plus vibe: identity, MOTD in the right format per plugin, rank ladder, store and Discord copy. |
gamemode-designer | Invents and scores original gamemodes (combine archetypes plus one twist), then plans a fun server locally. The foundry behind /mcwrench:create. |
new-server-bootstrap | Greenfield Paper or Velocity setup; Fill v3 Paper download, Java 25 plus Aikar's flags startup, EULA, starter config. |
pterodactyl-ops | Pterodactyl and Pelican panel ops: RCON via a secondary allocation, the Xmx/AlwaysPreTouch container OOM footgun, backups, the client API. |
skript-author | Write, debug, and explain Skript (.sk); reload-safety; fetch live syntax from the Skript Hub API. |
learn-plugin-docs | Fetch and condense any plugin's docs on demand; 64 popular plugins pre-loaded; --pin stores permanently. |
The docs-learner
When mcwrench is not confidently current about a plugin's config keys, permission nodes, or commands, it runs learn-plugin-docs first and answers from the fetched reference instead of guessing. The learner routes each plugin to the cheapest authoritative source, condenses the result, and caches it.
Source routing
The host of a URL (or the result of a name search) selects an adapter. The aim is the cheapest channel that returns clean markdown. The learner also probes /llms.txt and /llms-full.txt for docs sites.
| Source | Channel |
|---|---|
| Modrinth / Hangar | Official REST APIs (markdown body) |
| GitHub README | Raw README from raw.githubusercontent.com/<owner>/<repo>/HEAD/README.md |
| Oraxen | Content negotiation (.md / ?format=md) plus /api/docs/_all |
| SpigotMC | XenforoResourceManagerAPI, BBCode to Markdown (lossy) |
| Skript Hub | Syntax API (/api/v1/addonsyntaxlist/) |
| PaperMC | Tree-searches github.com/PaperMC/docs |
| GitBook / unknown | Best-effort: .md then llms-full.txt, then a Readability fallback |
Resolution and output
A bare URL maps straight to its host adapter. A bare name searches Modrinth, then Hangar. An owner/repo shorthand goes to the GitHub README adapter. The fetched markdown is condensed into a structured reference and written to the cache:
- ▸
skills/_cache/<slug>/REFERENCE.mdholds the condensed reference (withsource_urlandfetched_at). - ▸
skills/_cache/<slug>/RAW.mdholds the full fetched markdown. - ▸The
_cache/tree is git-ignored. Re-running within the TTL reuses the cache and skips the network.
Library and durability
64 popular plugins ship pre-fetched in the committed skills/learn-plugin-docs/library/ directory, alongside a name and alias registry.json. Common lookups (LuckPerms, EssentialsX, ViaVersion, WorldGuard, and the rest) resolve with zero network.
Resolution order
- ▸Library first. A registry name or a matching
<slug>.mdfile inlibrary/is served immediately, no fetch. - ▸Then the local _cache/ if a fresh
REFERENCE.mdexists. - ▸Then the registry URL for a known name (fetching the canonical docs URL, not a bare-name search, which avoids picking the wrong project).
- ▸Then a Modrinth then Hangar search for anything unknown.
Flags and durability
--pin
Re-fetch from the canonical source and store the reference permanently into library/, surviving the cache TTL. Also upserts the registry entry.
--refresh
Bypass the library and cache and re-fetch from source.
MCWRENCH_CACHE_TTL
Set the ad-hoc cache TTL in days (default 7). The committed library never expires; this only governs the _cache/ path.
stale-while-revalidate
If a refetch fails (host or network down) but a cache exists, the cached copy is served rather than erroring. A meta.json sidecar stores HTTP validators so a 304 reuses the cache.
Conflict and profile checks
Two read-only helpers keep an installed plugin set sane and let later answers stop re-asking the basics.
check-conflicts.mjs
Reads the plugin set (from <root>/plugins/*.jar, an explicit --list, or the server profile via --profile) and flags well-established overlaps and gaps:
- ▸Mutually exclusive plugins, such as two skyblock engines, two claim systems, or ItemsAdder alongside Oraxen.
- ▸Missing dependencies, such as Vault without an economy plugin, or LibsDisguises without ProtocolLib.
- ▸Proxy and Folia mismatches between the software and the network setup.
It is conservative by design and only reports established overlaps and deps. Verify with learn-plugin-docs before removing anything.
scan-server-tree.mjs --write-profile
Manifests a server tree and, with --write-profile, saves the server profile to skills/_cache/server-profile.json (software, version, host, RAM, gamemode, proxy, online-mode, plugins, worlds, chat formatter). Every skill reads it first and tailors answers to known facts.
Script reference
The helper scripts run on stock Node 18 or newer, with no install for the common paths. In Claude Code and Antigravity, ${CLAUDE_PLUGIN_ROOT} resolves to the plugin root; from a clone, paths are relative to the repo root.
| Script | Does |
|---|---|
learn-plugin-docs/scripts/learn-docs.mjs "<name-or-url>" | Fetch and condense plugin docs into the cache (or library). |
new-server-bootstrap/scripts/fetch-paper.mjs <mcver> [--download] | Resolve the latest Paper build via the Fill v3 API; optionally download the jar. |
skript-author/scripts/fetch-skripthub.mjs --addon <X> | --search <t> | Pull live Skript syntax from the Skript Hub API. |
audit-config/scripts/scan-server-tree.mjs <root> [--write-profile] | Manifest a server tree; with --write-profile, save the server profile. |
audit-config/scripts/check-conflicts.mjs <root> | --list "A,B" | --profile | Flag plugin conflicts, missing deps, and proxy/Folia mismatches. |
server-branding/scripts/format.mjs --to-legacy | --to-mm | --preview "<text>" | Convert text between MiniMessage and legacy ampersand-hex color. |
audit-config/scripts/diff-against-defaults.mjs <cfg> <defaults> | Show which keys a config overrides versus the defaults. |
scripts/refresh-library.mjs [plugin] | Re-pin the committed plugin library from canonical sources (used by CI). |
scripts/validate.mjs [--strict] | Validate the repo structure and portability. |
scripts/pack-skill.mjs <name> | --all | Zip a skill folder for use on Claude.ai. |