Hated WoW MCP

io.github.RdyGaming由 GitHub 帳號 RdyGaming 發布v0.8.0更新於 Nov 3, 2026

MCP server for WoW addons: Lua API, UI source, CVars, art, linting, plus model export to glTF/OBJ.

概覽

AI 產生的概覽

供《魔獸世界》UI 插件開發使用的本機 MCP 伺服器:遊戲內 Lua API、暴雪 UI 原始碼、CVar、美術資源查詢、程式檢查與無介面模型匯出。

可以做什麼
  • 檢索遊戲內 Lua API:含簽章的函式、含參數的事件、列舉與結構,以及各用戶端可用性差異與索引狀態。
  • 檢索暴雪隨用戶端發布的 UI 原始碼:XML 範本、mixin、CVar、對 Lua/XML 原始碼的正規表達式搜尋、讀取檔案與列出套件。
  • 驗證與產生插件程式碼:檢查已移除 API 與 taint 的 Lua 檢查、依暴雪 schema 驗證 XML、驗證 .toc,以及產生插件骨架。
  • 查詢遊戲美術資源:檔案路徑與 FileDataID、圖示、材質圖集,以及本機安裝與已安裝插件清單。
  • 從本機安裝匯出遊戲資源:模型、生物與 NPC、材質和地形區塊,輸出 glTF、OBJ 或 PNG。
適用情境
在撰寫或除錯《魔獸世界》插件時,希望助理核對真實的 API 簽章、暴雪自身的 UI 實作與有效的材質參照,而不是憑空猜測。也適合從本機遊戲安裝匯出生物、道具或地形模型供 Blender 使用。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node 20+。Lua API 索引隨套件提供;UI 原始碼、CVar 與美術查詢需要一次性同步,同步要求 PATH 中有 git,並下載約 44 MB 的 UI 原始碼與約 149 MB 的 listfile。模型匯出需要本機已安裝遊戲並額外同步 model-data。選用環境變數:WOW_DEFAULT_FLAVOR、WOW_INSTALL_PATH、WOW_ADDON_PATH、WOW_MCP_DATA_DIR。
安裝前請注意
有五個工具會寫入磁碟:四個匯出工具寫入你指定的資料夾,wow_addon_scaffold 在傳入 write 時寫入檔案,並在傳入 overwrite 時可能覆蓋既有插件,因此不要將它加入自動核准清單。同步會從公開鏡像與 wago.tools 取得資料,後者可能拒絕資料中心或 VPN 連線。同步資料超過 30 天會被標示為過期。不涉及憑證或付費。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Hated WoW MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Hated WoW MCP

[npm] [license]

An MCP server for writing World of Warcraft addons, and for pulling models out of the game. Free and open source.

It gives your MCP client things it otherwise guesses at: the in-game Lua API for the client you are targeting, Blizzard's own shipped UI source so it can see how the game itself does something, and the game's art and file data so texture references are real rather than invented. It can also read your local install and export models headless: creatures and NPCs with their skins, props, and buildings, as glTF or OBJ with PNG textures, ready for Blender.

27 tools. Setup for Claude Code, Claude Desktop, Cursor, Cline, Antigravity, Codex and VS Code is below, and anything else that speaks MCP works too. Or browse them in a local web UI with no client at all.

☕ Support this project

Hated WoW MCP is free and always will be. If it saves you time, you can buy me a coffee, it genuinely helps keep it maintained through patch cycles.

buymeacoffee.com/rdygaming

Everything here is about code that runs inside the client. There is no Battle.net web API in this server, no armory lookups, no auction house.


Quick start

Requires Node 20+. Nothing to clone, nothing to build.

Claude Code

bash
claude mcp add wow -- npx -y hated-wow-mcp

Add -s user to make it available in every project instead of just the current one. Verify with claude mcp list.

Claude Desktop

Edit your config file:

OSPath
Windows%APPDATA%\Claude\claude_desktop_config.json
macOS~/Library/Application Support/Claude/claude_desktop_config.json

Windows Store install? If that path doesn't exist, look under %LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\ instead.

Add the mcpServers block. If the file already has other keys, keep them: merge this in rather than replacing the file:

json
{  "mcpServers": {    "wow": {      "command": "npx",      "args": ["-y", "hated-wow-mcp"],      "env": {        "WOW_DEFAULT_FLAVOR": "mainline"      }    }  }}

Then fully quit Claude Desktop from the system tray and reopen it, closing the window is not enough, and the config is only read at startup.

Other clients

It is a standard stdio MCP server, so any MCP client can run it. What differs is the config format. The shapes below come from each client's own documentation.

ClientWhereFormat
Cursor.cursor/mcp.json in a project, or ~/.cursor/mcp.jsonsame mcpServers JSON as above
ClineMCP Servers panel, then Configure (CLI: ~/.cline/mcp.json)same mcpServers JSON
Antigravity~/.gemini/config/mcp_config.json, or Settings, Customizations, Open MCP Configsame mcpServers JSON. Its docs ask for absolute command paths
Windsurfits MCP config filesame mcpServers JSON
VS Code.vscode/mcp.json, or the MCP: Open User Configuration commandservers, not mcpServers
Codex~/.codex/config.tomlTOML, see below

VS Code uses a different top-level key from everyone else:

json
{  "servers": {    "wow": { "command": "npx", "args": ["-y", "hated-wow-mcp"] }  }}

Codex reads TOML, not JSON. Either run codex mcp add wow -- npx -y hated-wow-mcp or add this to ~/.codex/config.toml:

toml
[mcp_servers.wow]command = "npx"args = ["-y", "hated-wow-mcp"]env = { WOW_DEFAULT_FLAVOR = "mainline" }startup_timeout_sec = 30

Raise startup_timeout_sec from Codex's default of 10. The first npx run has to download the package, which took about 9 seconds on a fast connection and would time out on a slower one. Claude Code has the same knob as MCP_TIMEOUT.

On Windows, some clients start servers without a shell, and plain npx then fails to launch at all (ENOENT). Wrap it in cmd:

json
{  "mcpServers": {    "wow": {      "command": "cmd",      "args": ["/c", "npx", "-y", "hated-wow-mcp"]    }  }}

That starts a live server in about 4 seconds. From a clone, "command": "node" with the path to dist/index.js starts in half a second and needs no network.

Tool approvals. 23 of the 27 tools only read local data and declare that (readOnlyHint), so a client that prompts per call can safely skip them. The exceptions are wow_model_export, wow_creature_export, wow_texture_export and wow_map_export, which write into the folder you name, and wow_addon_scaffold. The scaffold writes files only when you pass write, and it refuses to overwrite an addon that already exists unless you also pass overwrite. If you use auto-approve, leave that one out of the list.

See mcp-config.example.json in this repo for a starting file.

Then sync the game data

The Lua API indexes ship inside the package, so API search, type and event lookup, linting, TOC/XML validation and scaffolding work the moment you add it with no sync and no waiting.

The UI source corpus and the art/FileDataID lookups are too large to ship, so those nine tools, the CVar lookup included, need a one-time sync. It needs git on your PATH:

bash
npx -y hated-wow-mcp sync all

Before you sync: open https://wago.tools/ once in your browser and let the page fully load. wago.tools sits behind bot protection, and visiting it first from the same connection lets the atlas download through. Skip this and the atlas step may fail with HTTP 403.

That fetches a ~44 MB shallow clone of Blizzard's UI source and a ~149 MB listfile, a few minutes on first run. Re-running later is cheap: an unchanged listfile is revalidated rather than re-downloaded, so a no-op sync takes about two seconds.

Classic and WoW Forever

A bare sync all (or sync ui-source) indexes your default client's UI source, retail unless you set WOW_DEFAULT_FLAVOR, plus every WoW client it finds installed. With _forever_ installed, WoW Forever is indexed with no flag. With only retail installed, nothing extra is downloaded. The log says what it chose.

To pick clients yourself, name them. That overrides the detection, and every sync adds to the same index rather than replacing it:

bash
npx -y hated-wow-mcp sync ui-source -- forever   # WoW Forever (Camelot)npx -y hated-wow-mcp sync ui-source -- classic   # Mists / Cata / Wrath / TBCnpx -y hated-wow-mcp sync ui-source -- vanilla   # Classic Eranpx -y hated-wow-mcp sync ui-source -- mainline  # retail only, skip the rest

Each client is its own ~46 MB checkout, so a machine with all four installed downloads about four times what a retail-only one does.

The art data follows the same rule. sync game-data builds the texture atlas for your default client plus every installed one, and you can name clients the same way (sync game-data -- forever). An atlas is small, a few MB, so this costs far less than the UI source. The file index is shared by every client and is built once.

Ask a tool about a client you have not synced and it says so and gives you the command. It does not fall back to retail's source, which would answer with code that may not exist on that client.

The API index for all four clients ships in the package, so flavor: "forever" works on API search, linting and .toc validation with no sync at all. See Known limits for what upstream does not publish for it yet.

Verify it worked

Ask in your client: "Using the WoW MCP, what does C_Item.GetItemInfo return?" You should get a full 18-value signature. Or run the server directly:

bash
npx hated-wow-mcp --list

That should print all 27 tools.

Where the data lives

Synced data never goes inside the package. That is what makes npx work. It lands in your OS cache directory:

PlatformLocation
Windows%LOCALAPPDATA%\hated-wow-mcp\Cache
macOS~/Library/Caches/hated-wow-mcp
Linux$XDG_CACHE_HOME/hated-wow-mcp, else ~/.cache/hated-wow-mcp

Set WOW_MCP_DATA_DIR to override, useful for putting ~70 MB on another drive, or sharing one sync between several installs. wow_data_status always reports where it resolved to and why.


Running from a clone

You only need this to modify the server, or to use the local web UI, which is not part of the published package. Requires Node 20+ and git.

bash
git clone https://github.com/RdyGaming/hated-wow-mcp.gitcd hated-wow-mcpnpm installnpm run buildnpm run sync-allnpm test

npm test should report 111 passed, 0 failed. On Windows, setup.cmd does all five steps and prints the absolute path you need below.

A clone keeps its synced data in data/ beside the source rather than in the OS cache, so working on the server never disturbs an npx install you already have.

Point your client at the built entry point instead of npx:

json
{  "mcpServers": {    "wow": {      "command": "node",      "args": ["C:\\absolute\\path\\to\\hated-wow-mcp\\dist\\index.js"]    }  }}

On Windows, backslashes must be doubled in JSON. On macOS/Linux use a normal path like /Users/you/hated-wow-mcp/dist/index.js.

See CONTRIBUTING.md before opening a PR.


Browse it without an MCP client

Every tool also runs in a local web UI: no client, no API key, no tokens. Useful for looking something up quickly, or for checking what a tool returns before you wire it into a prompt.

This one needs a clone; it is not part of the npm package.

bash
npm run web

Then open http://localhost:3001.

Pick a tool from the sidebar and it builds the form for you: the fields, their types, and the help text all come from the tool's own schema, so the UI always matches what the tool actually accepts. Results render in a Monaco editor with a copy button.

This talks to the tools directly. It does not speak the MCP protocol, so nothing here interferes with the server your client is using. Both can run at the same time.

Two things worth knowing:

  • Run npm run sync-all first. The UI is only as complete as your synced data; without it the UI source and game data tools return nothing.
  • Art tools show paths, not pictures. wow_icon_search and friends return FileDataIDs and texture paths. Paste a FileDataID into wago.tools to see the actual image, or decode it to PNG with wow_texture_export.

Set PORT if 3001 is taken:

bash
PORT=4000 npm run web

The UI's dependencies (express, cors) are dev dependencies, so a normal npm install picks them up, and the MCP server itself never imports them.


Configuration

All settings are optional, see .env.example.

VariablePurpose
WOW_DEFAULT_FLAVORClient to answer for when a tool call doesn't name one: mainline, mists, cata, wrath, tbc, vanilla, forever. Defaults to mainline.
WOW_INSTALL_PATHYour WoW folder. Auto-detected if unset.
WOW_ADDON_PATHAddOns folder the file tools read and write. Confines them to that directory.

What it knows

Data setContentsSource
Lua API index6,335 functions, 1,783 events, 1,676 enums/structures, 6,704 globals (retail; Classic and Classic Era indexed separately)Blizzard's own generated /api documentation, mirrored at Gethe/wow-ui-source
UI source4,036 files across 348 Blizzard_* packages, 4,044 inheritable XML templates, 3,488 mixins, 26,859 mixin methodsSame mirror
CVars1,635 console variables with defaults, categories, scope and Blizzard's own descriptions; 451 also carry usage evidence from the UI sourceKetho/BlizzardInterfaceResources + UI source
UI schemaBlizzard's UI.xsd, parsed for element/attribute validationSame mirror
File index172,175 interface files including 36,624 icons, mapped to FileDataIDswowdev/wow-listfile
Atlas indexNamed SetAtlas elements with sizes and coordinates, one index per client at an exact build (17,467 retail, 20,454 WoW Forever)wago.tools DB2 exports

All of it is synced from public mirrors by the scripts in src/sync/, so it tracks patches without anyone hand-maintaining a list.


Tools

API reference

ToolPurpose
wow_api_searchFind a function with its full argument and return signature
wow_api_event_searchFind an event and its payload arguments, in order
wow_api_type_searchFind an Enum.*, Constants.* or structure table
wow_api_diffCompare availability across retail / Classic / Classic Era
wow_api_statsShow which indexes are loaded and when they were synced

Blizzard's UI source

ToolPurpose
wow_ui_template_searchFind an inheritable XML template, with its inheritance chain
wow_ui_mixin_searchFind a mixin by name or by one of its methods
wow_cvar_searchFind a CVar: default, category, scope, whether it is protected, and how Blizzard uses it
wow_ui_grepRegex-search all 4,036 shipped Lua/XML files
wow_ui_read_fileRead a shipped source file in context
wow_ui_list_packagesList the Blizzard_* packages

Authoring

ToolPurpose
wow_lua_lintRemoved/moved APIs, unknown events, taint, performance traps
wow_xml_validateValidate interface XML against Blizzard's UI.xsd
wow_toc_validateValidate a .toc: interface version, flavor suffix, file list
wow_addon_scaffoldGenerate a working addon skeleton
wow_install_infoReport local installs and installed addons

Game data and art

ToolPurpose
wow_file_searchPath ↔ FileDataID, both directions
wow_icon_searchFind an icon and get both usable reference forms
wow_atlas_searchFind a SetAtlas element with size and coordinates
wow_data_statusShow which game data sets are synced

Model export (reads your local install directly)

ToolPurpose
wow_model_searchFind M2 (creature, prop) and WMO (building) models by path words or FileDataID
wow_model_exportExport a model to glTF with animations (M2) or OBJ+MTL (WMO), with PNG textures beside it
wow_creature_searchFind creatures and NPCs by name, creature id or display id
wow_creature_exportExport a creature or NPC to glTF with animations and its skin. Humanoid NPCs get the right race model, hair and beard geosets, the baked NPC skin and their worn armor; helms, shoulders and weapons come out as separate models with the bone each one attaches to
wow_texture_exportDecode a BLP texture to PNG
wow_map_searchFind maps by name, directory or id, and turn a world position into its terrain tile
wow_map_exportExport terrain tiles (ADT) to OBJ with a blended texture, alpha masks, or geometry only, optionally with the tile's buildings and props

The exporter opens the CASC storage under your game folder directly and writes into the folder you name, keeping the game's own folder layout, so the relative texture paths in the files resolve in Blender. MTL paths use forward slashes because Blender's importer mangles backslash-relative ones. It needs sync game-data for the listfile and one small extra sync (sync all runs both):

npx -y hated-wow-mcp sync model-data

That fetches table layouts from WoWDBDefs and decryption keys from TACTKeys; no game files are downloaded. The first export in a session takes about 30 seconds while the storage index loads. Data synced before 0.8.0 lacks the NPC gear tables, so run sync model-data again after updating. Not covered yet: armor that ships as extra skinned meshes (some recent sets), hair and face textures on humanoids, and player characters.


Why the linter is worth running

It is built on the per-flavor index rather than a hand-written deprecation list, so it knows things that are true for the client you are targeting:

$ wow_lua_lint --flavor mainlinelocal n = GetContainerNumSlots(0)
  1:9  warning  api/moved-to-namespace      "GetContainerNumSlots" has moved into a namespace in Retail (Midnight)…      -> C_Container.GetContainerNumSlots

The same code is clean on Classic, because there the global still exists. That distinction is derived from Blizzard's data, not asserted by hand.

It also catches the taint mistakes that produce "Interface action failed because of an AddOn": calling protected functions, reassigning Blizzard globals, touching secure frames during combat lockdown.

Measured false-positive rate, checked by running both validators across Blizzard's own shipped code:

  • XML validator: 0 of 1,091 files report an error.
  • Lua linter: 48 of 2,551 files (1.9%), and those are almost entirely correct: they are Blizzard's own Blizzard_Deprecated* shims, which exist precisely to redefine removed APIs.

Keeping it current

Re-run after a patch. wow_api_stats and wow_data_status show what you have and when it was synced.

CommandFetchesNotes
npm run sync-apiLua API index for all three clients~1,700 small HTTPS requests
npm run sync-ui-sourceBlizzard UI source (shallow git clone, ~44 MB)Re-run fast-forwards
npm run sync-game-dataListfile + atlas tablesAdd --full for models/maps/sounds
npm run sync-allAll three

Those are the commands for a clone. An installed copy has no package scripts, so it uses the sync subcommand instead:

bash
npx -y hated-wow-mcp sync allnpx -y hated-wow-mcp sync game-data -- --full

sync-api is checkout-only: it regenerates data that ships inside the package, so an installed copy gets a newer API index by upgrading rather than syncing.

The data comes from public upstream mirrors, so re-syncing picks up patch changes without waiting on a release here. Note that those mirrors typically lag a live patch by hours to days.

Re-syncing is cheap when nothing changed. The 149 MB listfile is revalidated with its ETag, so an unchanged one costs a single round trip rather than a fresh download, and the index is left alone rather than rebuilt, a no-op sync-game-data finishes in about two seconds. Pass --force to ignore the cache and rebuild regardless.

The server tells you when it has gone stale. Once a synced index is more than 30 days old, answers drawn from it carry a one-line warning, and wow_data_status reports the age of each set. Stale data is the failure mode worth catching: a confident answer about a function or texture that a patch has since removed is worse than no answer at all.

wago.tools access

Open https://wago.tools/ in a browser and let it load before running sync-game-data or sync-all. The site is behind bot protection, and a browser visit from the same connection clears the way for the atlas download that follows. Doing this first avoids most atlas failures.

If the atlas step still reports HTTP 403, wago.tools is refusing the connection outright: it blocks many datacentre, cloud and VPN IP ranges. Run it from a normal desktop connection, with any VPN off.

This never blocks the rest of the sync. The file index in the same script comes from GitHub and works regardless, and only wow_atlas_search depends on the atlas step. The other 19 tools are unaffected.


Layout

src/  config.ts            flavors, interface versions, install detection  wowapi/              API index loading, search, rendering  uisource/            Blizzard UI source index, template/mixin/grep search  gamedata/            listfile and atlas lookup  lua/                 tokenizer, analyzer, rule tables  xml/                 UI.xsd parser, XML validator  toc/                 .toc parser and validator  scaffold/            addon generator  tools/               MCP tool definitions  sync/                the three sync scripts, plus their shared entry point  paths.ts             bundled vs. synced data locationsserver.js              local web UI backend (npm run web)index.html             local web UI frontendtest/smoke.mjs         111 end-to-end checks against real datadata/                  bundled API indexes, plus synced ones in a clone

Known limits

  • Widget method inheritance is not modelled. Frame:SetPoint is found, but the server does not know that Button inherits it from Frame. Searching the bare method name works.
  • Classic progression flavors share one index. Blizzard publishes generated docs for the clients that are actually running; Cata/Wrath/TBC map onto the Classic index, so answers for those are approximate.
  • WoW Forever is its own client. It is built on the retail codebase (Blizzard calls the game type camelot) at Interface 16001, so it has its own index and does not share Classic Era's. Both upstream mirrors carry it, so it has the same five lists as retail. The Battle.net product is wowf and the install folder is _forever_; the old _classic_beta_ folder from the beta is no longer detected.
  • Atlases are built per client, so each has to be synced. Retail and WoW Forever share 16,788 atlas names, but 3,666 exist only on Forever and 720 only on retail, so wow_atlas_search answers from the client you name and says which build it used. A client whose atlas is not built says so and gives the command; it does not borrow retail's.
  • Search tools show paths, not pictures. They return paths, FileDataIDs and atlas coordinates. wow_texture_export decodes a texture to PNG from your own installation.
  • The linter's scope model is approximate. It is a lexer with a scope stack, not a full Lua parser. It errs toward silence on ambiguous code.

Troubleshooting

Server doesn't appear in Claude Desktop. Fully quit from the system tray, not just the window. Check the JSON is valid and backslashes are doubled.

"Cannot find module ... dist/index.js". Only applies when running from a clone: you skipped npm run build, or the path in your config is wrong. It must be absolute. On npx, use "command": "npx", "args": ["-y", "hated-wow-mcp"] and there is no path to get wrong.

UI source, art or icon lookups return nothing. Those need the one-time sync. Run npx -y hated-wow-mcp sync all (or npm run sync-all from a clone), then check wow_data_status: it reports where it looked and when that data was built.

The sync fails. You need git on your PATH for the UI source step. For an HTTP 403 on the atlas step, see the wago.tools note in Quick start.

Data seems stale after an update. npx caches the package. Force the newest release with npx -y hated-wow-mcp@latest, or clear it with npm cache clean --force. wow_api_stats shows which index is actually loaded.

"Filename too long" / "Clone succeeded, but checkout failed" (Windows). Some Blizzard filenames are 108 characters on their own, so a deep clone path can exceed Windows' 260-character limit. The sync scripts pass core.longpaths=true to git to handle this. If you still hit it, clone somewhere shorter, keep the path under about 150 characters (C:\dev\hated-wow-mcp is plenty of room), or enable long paths system-wide in Windows.


Contributing

Issues and pull requests welcome at github.com/RdyGaming/hated-wow-mcp.

CONTRIBUTING.md covers the dev setup, how the two data sets differ, and what to know before adding a tool. Participation is governed by the Code of Conduct.

The most valuable report is a lookup that returns something wrong rather than nothing: there is an issue template for it that asks how you verified the real behaviour, so the fix can be checked against the game.

Found a security problem? Please report it privately. See SECURITY.md.

License

MIT, see LICENSE. The model exporter includes code from wow.export (MIT, Kruithne and Marlamin); see THIRD_PARTY.md.

Not affiliated with or endorsed by Blizzard Entertainment. World of Warcraft is a trademark of Blizzard Entertainment, Inc. All game data is fetched at runtime from public community mirrors and is not redistributed by this project.

來源:README.md,提交 b0893aa

工具

27

wow_api_diff

Compare API availability across clients

Check whether a function, event or type exists in each game client (retail, Classic progression, Classic Era, WoW Forever). Use this before writing code that has to run on more than one flavor, or to explain why something works on Classic but not retail.

輸入參數name必填

wow_api_stats

Show what API data is loaded

Report which API index, UI source and game data sets this server has, when each was synced, and how large it is. Use this to confirm the data is present and current before relying on other tools.

無需輸入參數。

wow_ui_grep

Search Blizzard's UI source code

Regex-search the full Lua and XML source of the 348 Blizzard addons that ship with the client. This is the ground truth for how the game itself does something — event handling, secure frames, data providers, layout. Use it when the API reference tells you what a function is but not how it is meant to be used.

輸入參數extpkglimitflavorcontextpattern必填ignoreCasepathContains

wow_ui_read_file

Read a file from Blizzard's UI source

Read a Lua or XML file from Blizzard's shipped interface source, by the path that wow_ui_grep or wow_ui_template_search reported. Use this to see a full implementation in context rather than a single matching line.

輸入參數path必填flavorendLinestartLine

wow_ui_list_packages

List Blizzard's shipped UI packages

List the Blizzard_* addon packages that ship with the client, optionally filtered. Use this to find which package owns a piece of the UI before grepping it, e.g. Blizzard_ActionBar for action buttons.

輸入參數filterflavor

wow_lua_lint

Lint addon Lua against a game client

Analyse addon Lua for problems specific to World of Warcraft: APIs that were removed or moved into a namespace in the target client, unknown events, taint (calling protected functions, overwriting Blizzard globals, touching secure frames in combat), and performance traps. Run this on any addon Lua before shipping it, and whenever porting between clients.

輸入參數codepathflavordisableknownGlobals

wow_xml_validate

Validate interface XML

Validate WoW interface XML against Blizzard's own UI.xsd: unknown or misspelled elements and attributes, invalid nesting, bad enum values, and structural mistakes like a virtual frame with no name. Run this on every XML file an addon loads — the client silently ignores what it does not understand, so these mistakes are otherwise invisible.

輸入參數xmlpath

wow_toc_validate

Validate an addon .toc manifest

Validate a .toc manifest: interface version against the target client, flavor suffix consistency, unrecognised directives the client silently drops, SavedVariables names, and files listed but missing (or present but unlisted). Run this whenever an addon fails to load or shows as out of date.

輸入參數tocpathfileName

wow_addon_scaffold

Generate an addon skeleton

Generate a complete, working addon skeleton: .toc manifests for the chosen clients, an event-dispatch Core.lua with SavedVariables handling and a slash command, and optionally an XML frame template with its Lua mixin and a Settings-API options panel. Use this to start a new addon rather than writing boilerplate by hand. By default it only returns the files. With `write` it saves them into the addon folder, and it refuses if any of the files already exist unless `overwrite` is also set.

輸入參數name必填noteswriteauthorflavorsversionoverwritewithFramewithOptionsslashCommandsavedVariables

wow_install_info

Show the local WoW installation

Report the World of Warcraft installations found on this machine — their paths, flavors, build numbers, and the addons currently installed. Use this to confirm which client tools will target and to discover addon folders to lint.

無需輸入參數。

wow_data_status

Show game data availability

Report which game data sets are synced — the file/FileDataID index and the texture atlas index — with counts and sync dates, and what to run for any that are missing. Use this when a game data lookup returns nothing.

無需輸入參數。

wow_model_export

Export a game model

Export a model from the local WoW install's game files into a folder, headless. M2 models become glTF with animations (or GLB/OBJ); WMO models become OBJ+MTL (or glTF). Textures are decoded to PNG beside the model in the game's folder layout, so relative texture paths resolve in Blender. The first call opens the game storage and takes about 30 seconds. Needs the game-data and model-data syncs.

輸入參數model必填flavorformatoutputDir必填animationssplitGroups

wow_creature_export

Export a creature or NPC with its skin

Export a creature or NPC as glTF with animations and its skin textures, headless. Beasts and monsters get their display skin and geosets. Humanoid NPCs (built from a player race model) get the right race and sex model, the NPC's hair, beard and similar geosets, the baked NPC skin and their worn armor (boots, robes, tabards and so on). Helms, shoulders and the NPC's weapons are written as separate models beside it, with the bone and position each one attaches to. Written to <outputDir>/creatures/.

輸入參數flavorformatdisplayIdequipmentoutputDir必填animationscreatureId

wow_texture_export

Export a game texture as PNG

Decode a BLP texture from the local WoW install to PNG, keeping the game's folder layout under outputDir. Accepts a FileDataID or listfile path.

輸入參數flavortexture必填outputDir必填

wow_map_export

Export map terrain

Export terrain tiles of a map as OBJ with a texture, headless. Give a map id from wow_map_search plus tiles, or a world position. Texture modes: 'tex0' blends the tile's layers into one PNG (default), 'alpha' writes the layer textures and blend masks, 'none' is geometry only. Optionally places the tile's buildings and props. Written to <outputDir>/maps/<directory>/. Baked high-resolution textures are not supported (they need a GPU).

輸入參數xymapId必填tilesflavorobjectstextureoutputDir必填

版本歷史

4
  1. v0.8.0最新Nov 1, 2026
  2. v0.7.0Nov 1, 2026
  3. v0.6.1Sep 19, 2026
  4. v0.6.0Sep 19, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分