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 生成的概览

面向《魔兽世界》插件开发的本地 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 分