Learn Plugin Docs
Turn a plugin name or URL into a local, condensed markdown reference, then answer from it.
When to use
Any time you are not confidently current about a specific plugin's config keys, permission
nodes, commands, or placeholders. Fetch first, answer second. Never invent config keys.
Procedure
Given an argument like LuckPerms, MythicMobs, https://modrinth.com/plugin/dynmap, or a
Hangar slug:
Check the bundled library first, then the cache. ~55 popular plugins are pre-fetched into
skills/learn-plugin-docs/library/ (committed, zero-network) and resolved by name/alias via
library/registry.json. learn-docs.mjs does this automatically — resolution order is
library → _cache/ (7-day) → registry canonical URL → Modrinth/Hangar search. Pass
--refresh to bypass the library/cache and re-fetch. If skills/_cache/<slug>/REFERENCE.md
already exists and is recent, it is reused.
Resolve the target. If $ARGUMENTS is a URL, infer the host. If it's a name, the script
searches Modrinth, then Hangar.
Run the fetcher:
node "${CLAUDE_PLUGIN_ROOT}/skills/learn-plugin-docs/scripts/learn-docs.mjs" "$ARGUMENTS"
It picks the cheapest adapter for the host (see references/source-routing.md), fetches the
authoritative markdown, condenses it, and writes:
skills/_cache/<slug>/REFERENCE.md — condensed (Overview, Install, Config keys, Permissions,
Commands, Placeholders, Dependencies, Folia, Footguns), with source_url + fetched_at.
skills/_cache/<slug>/RAW.md — the full fetched markdown.
Read REFERENCE.md and answer the user's actual question from it. Summarise the key config
keys, permissions, and commands, and cite the cache path + source URL.
If the fetch fails (host unknown, network blocked on enterprise installs), tell the user and
offer the manual fallback: ask them to paste the relevant docs, or to upload the plugin
.jar so you can read plugin.yml (commands/permissions) and bundled config.yml.
Adapter status (v1.0 — all wired)
- Modrinth —
/v2/project/{slug}, markdown body. ✓ live-tested
- Hangar — slug-only endpoints (
/api/v1/projects/{slug} + /api/v1/pages/main/{project};
the older /{author}/{slug} forms are deprecated). ✓ live-tested
- GitHub README —
raw.githubusercontent.com/{owner}/{repo}/HEAD/README.md. ✓ live-tested
- Oraxen — content negotiation (
.md / ?format=md / Accept: text/markdown) + /api/docs/_all. ✓ live-tested
- SpigotMC — XenforoResourceManagerAPI + BBCode→Markdown (lossy; warns). ✓ live-tested
- Skript Hub —
/api/v1/addonsyntaxlist/ (note: addon is a nested object — filter on addon.name). ✓ live-tested
- PaperMC — Starlight slug ≠ source path, so it tree-searches
github.com/PaperMC/docs
(src/content/docs/**.mdx) for the page. ✓ live-tested
- GitBook —
.md suffix → llms-full.txt. Best-effort: the .md/llms export is
per-site toggleable; on hosts that disable it the router falls through to Readability.
- Readability (generic fallback) — wired, but needs optional deps
(
npm install jsdom @mozilla/readability turndown turndown-plugin-gfm); without them it asks you
to use WebFetch or paste the docs.
Notes
- Modrinth requires a unique
User-Agent; the script sets one. Rate limit is 300 req/min.
- Heavy deps (
jsdom, @mozilla/readability, turndown) are only needed by the stubbed
Readability fallback and are lazy-imported — the wired adapters run on stock Node ≥18 with
no npm install.
- Cache writes live under
skills/_cache/ and are gitignored.
1---2name: learn-plugin-docs3description: Fetches and condenses the documentation for ANY Minecraft plugin or mod on demand into a local markdown reference. Use this skill whenever the user asks "how do I configure X", "what does X do", "where are X's docs", "set up X", "what are X's permission nodes/commands/config keys", or names any plugin you do not already have a confident, current reference for, even if they did not explicitly ask you to read docs. Knows the cheap channel per host: Modrinth and Hangar REST APIs, the GitBook .md-suffix trick plus llms.txt/llms-full.txt, raw GitHub READMEs and wikis, Skript Hub's syntax API, the SpigotMC JSON API, and a Readability fallback for unknown hosts. Writes a condensed REFERENCE.md under skills/_cache/[slug]/ and tells you to read that instead of re-fetching. Use before answering any uncertain plugin-specific question; do not guess keys.4license: MIT5---67# Learn Plugin Docs89Turn a plugin name or URL into a local, condensed markdown reference, then answer from it.1011## When to use1213Any time you are not **confidently current** about a specific plugin's config keys, permission14nodes, commands, or placeholders. Fetch first, answer second. Never invent config keys.1516## Procedure1718Given an argument like `LuckPerms`, `MythicMobs`, `https://modrinth.com/plugin/dynmap`, or a19Hangar slug:20211. **Check the bundled library first, then the cache.** ~55 popular plugins are pre-fetched into22 `skills/learn-plugin-docs/library/` (committed, zero-network) and resolved by name/alias via23 `library/registry.json`. `learn-docs.mjs` does this automatically — resolution order is24 **library → `_cache/` (7-day) → registry canonical URL → Modrinth/Hangar search**. Pass25 `--refresh` to bypass the library/cache and re-fetch. If `skills/_cache/<slug>/REFERENCE.md`26 already exists and is recent, it is reused.272. **Resolve the target.** If `$ARGUMENTS` is a URL, infer the host. If it's a name, the script28 searches Modrinth, then Hangar.293. **Run the fetcher:**3031 ```bash32 node "${CLAUDE_PLUGIN_ROOT}/skills/learn-plugin-docs/scripts/learn-docs.mjs" "$ARGUMENTS"33 ```3435 It picks the cheapest adapter for the host (see `references/source-routing.md`), fetches the36 authoritative markdown, condenses it, and writes:37 - `skills/_cache/<slug>/REFERENCE.md` — condensed (Overview, Install, Config keys, Permissions,38 Commands, Placeholders, Dependencies, Folia, Footguns), with `source_url` + `fetched_at`.39 - `skills/_cache/<slug>/RAW.md` — the full fetched markdown.404. **Read `REFERENCE.md`** and answer the user's actual question from it. Summarise the key config41 keys, permissions, and commands, and cite the cache path + source URL.425. If the fetch fails (host unknown, network blocked on enterprise installs), tell the user and43 offer the **manual fallback**: ask them to paste the relevant docs, or to upload the plugin44 `.jar` so you can read `plugin.yml` (commands/permissions) and bundled `config.yml`.4546## Adapter status (v1.0 — all wired)4748- **Modrinth** — `/v2/project/{slug}`, markdown `body`. ✓ live-tested49- **Hangar** — slug-only endpoints (`/api/v1/projects/{slug}` + `/api/v1/pages/main/{project}`;50 the older `/{author}/{slug}` forms are deprecated). ✓ live-tested51- **GitHub README** — `raw.githubusercontent.com/{owner}/{repo}/HEAD/README.md`. ✓ live-tested52- **Oraxen** — content negotiation (`.md` / `?format=md` / `Accept: text/markdown`) + `/api/docs/_all`. ✓ live-tested53- **SpigotMC** — XenforoResourceManagerAPI + BBCode→Markdown (lossy; warns). ✓ live-tested54- **Skript Hub** — `/api/v1/addonsyntaxlist/` (note: `addon` is a nested object — filter on `addon.name`). ✓ live-tested55- **PaperMC** — Starlight slug ≠ source path, so it tree-searches `github.com/PaperMC/docs`56 (`src/content/docs/**.mdx`) for the page. ✓ live-tested57- **GitBook** — `.md` suffix → `llms-full.txt`. **Best-effort**: the `.md`/llms export is58 per-site toggleable; on hosts that disable it the router falls through to Readability.59- **Readability** (generic fallback) — wired, but needs optional deps60 (`npm install jsdom @mozilla/readability turndown turndown-plugin-gfm`); without them it asks you61 to use WebFetch or paste the docs.6263## Notes6465- Modrinth requires a unique `User-Agent`; the script sets one. Rate limit is 300 req/min.66- Heavy deps (`jsdom`, `@mozilla/readability`, `turndown`) are only needed by the stubbed67 Readability fallback and are **lazy-imported** — the wired adapters run on stock Node ≥18 with68 no `npm install`.69- Cache writes live under `skills/_cache/` and are gitignored.