Releases: timoinglin/wow-server-mcp
Release list
v1.4.3 — Fix find_orphan_refs self-join column ambiguity
When source_table === target_table (e.g. quest_template.PrevQuestId → quest_template.Id), bare column references in the user-supplied WHERE clause were ambiguous because both s and t aliases expose every column. MySQL returned Column 'X' in where clause is ambiguous.
Fix: auto-prefix bare column identifiers with s. when a self-join is detected. Already-qualified columns (s.Foo, t.Foo), SQL keywords, quoted string literals, and alias prefixes (the t in t.Title) are left untouched.
This makes the natural usage just work:
find_orphan_refs(
source_table='quest_template',
source_column='PrevQuestId',
target_table='quest_template',
target_column='Id',
where='PrevQuestId > 0' # auto-prefixed to s.`PrevQuestId`
)
If you need to reference a target-table column instead, qualify it explicitly with t.colname.
Upgrade
cd wow-server-mcp
git pull && npm install && npm run buildRestart your AI client.
v1.4.2 — Fix get_smart_scripts LIMIT binding
mysql2's prepared-statement protocol rejects numeric placeholders for LIMIT on some MySQL server versions (MySQL 8.x in this case) with the error Incorrect arguments to mysqld_stmt_execute. Inlined the limit value (already validated by zod min(1).max(500)) instead of binding it.
Spotted on EmuCoach MoP Premium 7.1's MySQL 8.x server during smoke testing of v1.4.1.
Upgrade
cd wow-server-mcp
git pull && npm install && npm run buildRestart your AI client.
v1.4.1 — Patch: smart_scripts schema compat + loot summary wording
Two patch-grade fixes caught by smoke-testing v1.4.0 against a live EmuCoach MoP Premium 7.1 database:
get_smart_scriptsqueried atarget_param4column that exists on TrinityCore 3.3.5 but not on SkyFire MoP / Cata. Replaced the explicit column list withSELECT *(rows are small and now schema-agnostic) and made thep4=print conditional onrow.event_param4being defined.inspect_loot_tablesummary self-contradicted on tables where every row was broken (Ordos'screature_loot_template, etc.) — it claimed "the table still produces valid drops from the other 0 row(s)". Rewrote the summary branch so a fully-broken table now reportsALL N row(s) are broken — this loot table produces NOTHING in-game.and the mixed case reportsN of M rows still produce valid drops.
No new tools, no API changes. Pure correctness fixes.
Upgrade
cd wow-server-mcp
git pull
npm install
npm run buildThen restart your AI client to reload the MCP server.
v1.4.0 — Forensic / DB-integrity tools
Summary
Six new MCP tools focused on the "is this actually a bug?" verification workflow that comes up constantly when auditing repack databases. Each one combines several raw db_query calls into a single focused inspection and surfaces the patterns that most often produce false positives when bug-hunting.
New tools
inspect_creature(entry)— single deep-dive: template (withScriptName+AIName), quest starter/ender, vendor count,smart_scriptssummary, spawn count, loot table summary. Warns when SmartAI gossip handlers coexist with agossip_menu_id.inspect_gossip_chain(menu_id)— full gossip trace: row + options + per-optionaction_menu_idstatus (exists / missing /GOSSIP_OPTION_*sentinel like1048576= battlefield queue) + all NPCs using the menu + cross-referenced SmartAI event 62/64 handlers.get_smart_scripts(entryorguid, source_type=0)— first-class SmartAI access with human-readableevent_type/action_typenames. Flags gossip handlers up front.find_orphan_refs(source_table, source_column, target_table, target_column, where?, exclude_sentinels?)— generic FK-integrity sweep. Auto-excludes gossip option sentinels when scanningaction_menu_id. Returns count + sample rows + reproducible SQL.check_scriptname(name)— greps the configured worldserver core source tree (new config fieldcore_source_path) for aScriptName. Returns file:line hits or a "not in upstream — may be in modified core" warning.inspect_loot_table(table, entry)— classifies each loot row as valid item / currency (negative ID) / reference / missing. Prevents "drops nothing" misframings on tables that actually have a mix of working and broken rows.
New documentation
docs/BUGHUNT.md— anti-false-positive playbook codifying lessons from a live audit session:- Negative item IDs are currencies, not missing items
GOSSIP_OPTION_*sentinels (1048576=BATTLEFIELD,2097152=AUCTIONEER, etc.) are not menu IDs- SmartAI event 62 / 64 bypasses missing
gossip_menurows ScriptNameimplies C++ handling — verify before claiming DB-level breakage- Don't cherry-pick evidence rows
- Mark UNVERIFIED rather than file on a hunch
- Includes pre-built
find_orphan_refssweep recipes for the most productive integrity audits.
Config
New optional field in config.json:
{
"core_source_path": "C:/path/to/your/SkyFire_or_TrinityCore/checkout"
}Required for check_scriptname. When unset, that tool returns a clear "not configured" message instead of erroring; the other five tools work without it.
Upgrade
cd wow-server-mcp
git pull
npm install
npm run buildThen restart your AI client to load the new code.
Tool count
76 → 82 total tools.
v1.3.3
🔒 Security
- Hardened
create_db_backup—mysqldumpis now spawned with an argv array (no shell), the MySQL password is passed via theMYSQL_PWDenv var so it's no longer visible intasklist/ps, and table/database names are validated as identifiers before being passed in. - Locked down
update_config— the tool can no longer rewrite theconfig_filessection. Without this, an agent could repointworldserver_confto any path and then write to it viawrite_server_config. Editconfig.jsondirectly to change those paths. - Redact passwords in RA echoes —
create_accountandset_account_passwordno longer surface the plaintext password through RA command echoes back to the agent.
🐛 Fixes
- Fixed dead
schemaOverrideconfig (the headline v1.3.0 feature actually does something now).index.tswas callinginitializeSchema()with no argument, so the override file was never loaded. The override is now read fromconfig.schemaOverrideand merged on top of the default MoP schema. Per-table deep merge so partial overrides (e.g. justaccount.dp) no longer wipe the other columns in that table. - Fixed
creature(spawn) schema —get_creature_spawnsnow goes through the schema resolver instead of hard-codingid, anddiscover_schemadetects whether your core usescreature.id(MoP/Cata) orcreature.id1(TC 3.3.5 / AzerothCore). - Fixed
add_dprace condition — the previous SELECT-then-UPDATE pattern lost concurrent updates. Now uses a single atomicUPDATE … SET dp = dp + ?.
🧹 Cleanups
- Removed dead
player_nameparameter fromspawn_creature— the parameter was accepted but its value was ignored. RA has no per-call player context. - Schema resolver footgun fix — tool handlers now call
getSchema()per-invocation instead of capturing it at registration time. This means a futurereload_schematool would actually work. example.config.jsonnow ships withschemaOverridepre-set toschema_override.json, so the post-discover_schemaflow works out of the box.
📝 Documentation
- Rewrote the Add to Your AI Client section with clear, copy-paste install blocks for Claude Desktop, Claude Code (VS Code extension + CLI), Codex CLI, and Antigravity (UI flow first, JSON config as fallback).
- Removed the inline changelog (release notes now live here on the Releases page).
- Fixed the Lookup & Editing tool count (10 → 13). Total is still 76.
- Tightened the Dynamic Schema section now that the override flow actually works.
🛠️ Build / repo hygiene
- Added
.github/workflows/build.yml— type-check + build matrix on Node 18 / 20 / 22 for every push and PR tomain. .gitignorenow covers.mcp.json,.claude/,.vscode/mcp.json(per-developer MCP client wiring with user-specific absolute paths).
v1.3.1was intentionally skipped between v1.3.0 and v1.3.2.
Full diff: v1.3.2...v1.3.3
v1.3.2 - WoW Server MCP Rebrand
Renamed the project from emucoach-mcp to wow-server-mcp and updated all internal references.
v1.3.0 - The 'Universal Expansion' Update 🚀
v1.3.0 - The 'Universal Expansion' Update 🚀
This major release introduces the Dynamic Schema Mapping system, transforming the Emucoach MCP into a truly expansion-proof management suite.
Key Highlights:
- 🛠️ Intelligent Schema Discovery: New
discover_schematool scans your connected world/auth databases to auto-generate aschema_override.jsontailored to your repack (WotLK, Cata, MoP, Legion, etc.). - ♻️ Universal Compatibility: All 76 development tools (NPCs, Quests, Loot, Accounts, Lookup) now use a dynamic resolver to match your specific database columns.
- ⚙️ Refining the Core: Improved deep-merge logic in the schema loader ensures robust configuration handling.
- 📝 Enhanced Documentation: Updated README with 5-step instructions for custom repack integration.
The MCP is no longer locked to a single version—it now grows with your server!
v1.2.1
Fixes for column mismatches in quest and development tools
v1.2.0 — Schema Fixes & Improved README
What's New
🐛 Bug Fixes
-
Fixed
LIMIT ?in prepared statements — incompatible with older MySQL versions (13 queries across 3 files) -
Fixed reserved keyword escaping for
rank,type,Typecolumns -
Fixed
spell_dbcschema mismatch (Commentinstead ofSpellName1) -
Fixed
game_eventschema mismatch (eventEntryinstead ofentry)
📝 Improvements
-
New "Why MCP Instead of Raw Credentials?" section in README
-
Added version, MCP, Node.js, and TypeScript badges
-
Added "Updating from an Older Release" section
-
Improved capabilities overview with comparison table
✅ Verified
All 75 tools tested and verified operational against Emucoach MoP Premium v7.0.
Full Changelog: v1.1.0...v1.2.0
Repack Development Suite
🧰 Repack Development Suite
This release transforms emucoach-mcp from a server management tool into a full repack development suite — enabling AI agents to create NPCs, build questlines, edit loot tables, and more, all through natural language.
⚡ Speed Improvements
-
Persistent RA session — login handshake happens once per session instead of per command (~80% faster RA calls)
-
Parallel DB stats —
get_db_statsnow queries all 3 databases concurrently -
Larger connection pool — MySQL pool size increased from 5 → 10
🐉 NPC Development (13 new tools)
Spawn creatures, clone NPC templates, manage vendor inventories, set gossip menus, configure waypoint patrol paths, and set NPC flags — all without touching the DB manually.
📜 Quest Development (7 new tools)
Create quests from scratch, assign quest giver and ender NPCs (with automatic flag management), remove relations, and inspect quest rewards.
💎 Loot & World Data (8 new tools)
Add/remove items from creature loot tables, search which mobs drop a specific item, inspect item container loot, search spells from spell_dbc, list world events, and find teleport location coordinates.
📊 Total: 72 tools (was 44)
Full tool list in the README.