WoW Server
FreeNot checkedA local MCP server that lets any MCP-compatible AI client manage a standalone World of Warcraft private server, including server control, database operations, N
About
A local MCP server that lets any MCP-compatible AI client manage a standalone World of Warcraft private server, including server control, database operations, NPC/quest/loot management, and more.
README
🐉 New from me — WOW Legends: a free WotLK 3.3.5a repack
Run your own living Wrath of the Lich King (3.3.5a) world in a few clicks — hundreds of AI-driven bots, an AI companion that chats back, hardcore mode, and a one-click installer.
▶ Check it out → wow-legends.eu
WoW Server MCP
Version Build MCP MIT License Node.js TypeScript
A local MCP server that lets any MCP-compatible AI client (Claude, Codex, Cursor, etc.) manage a standalone World of Warcraft private server. Built and tested for Cata / MoP repacks with MySQL — works with any repack once configured.
TL;DR: if you can do it in-game as a GM or via the database, the agent can do it for you.
💛 Using the WoW Server MCP? It's free and open-source, built and maintained in spare time. If it's saved you hours of server admin — or you'd like to see it keep growing — a coffee genuinely helps. See Support the Project.
Table of Contents
- What the Agent Can Do
- Why an MCP Instead of Raw Credentials?
- Demo Videos
- Quick Start
- Dynamic Schema (Any Expansion)
- Available Tools (82 total)
- Bug-Hunting / DB Integrity
- Database Backups
- Updating
- Prerequisites
- Project Structure
- Releases
- Support the Project
What the Agent Can Do
Once connected, the AI gets full control over your WoW server through natural language.
| Category | Capabilities |
|---|---|
| 🚀 Server Control | Start / stop / restart MySQL, authserver, worldserver |
| 🗄️ Database | Run any SELECT, INSERT, UPDATE, DELETE — or use scoped helpers |
| 👤 Accounts | Create accounts, set GM levels, grant Donation Points |
| 🐉 NPCs | Clone templates, set flags, manage vendors, gossip menus, waypoints |
| 📜 Quests | Create quests, assign giver/ender NPCs, manage rewards & relations |
| 💎 Loot | Add/remove creature drops, search which mobs drop an item |
| 🔮 Spells & Events | Look up spells from spell_dbc, view world events |
| 📍 Teleports | Find coordinates and map positions for NPC placement |
| ⚙️ Config | Edit rates, caps, realm settings in worldserver.conf |
| 📡 Remote Access | Send any RA command — anything you'd type in the worldserver console |
| 📊 Monitoring | Uptime, online players, DB statistics |
| 💾 Backups | Full or table-specific mysqldump with WHERE clause support |
| 🔬 Forensics | Deep-inspect creatures / gossip chains / SmartAI / loot, find orphan FK refs, verify ScriptNames against core source |
Why an MCP Instead of Raw Credentials?
You could hand the AI your DB password and RA port and let it figure things out — but a dedicated MCP is significantly better:
| Raw Credentials | MCP Server | |
|---|---|---|
| Reliability | Agent guesses SQL column names | Pre-built queries matched to your exact schema |
| Speed | Writes + debugs SQL from scratch every time | Instant tool calls — no trial and error |
| Safety | Unrestricted DB access (DROP TABLE is one prompt away) |
Scoped tools with built-in validation and WHERE guards |
| Token cost | Burns tokens on boilerplate SQL and schema reads | Just the tool name and parameters |
| Consistency | Different results depending on the model's mood | Same reliable output every time |
| Portability | Prompts break when you switch AI clients | Works with any MCP-compatible client |
Demo Videos
| What | Link |
|---|---|
| 🛠️ How to set it up | Watch on YouTube |
| 🛒 Add a vendor to the world | Watch on YouTube |
| ⚔️ Update NPC stats | Watch on YouTube |
| ⚙️ Change server rates | Watch on YouTube |
Quick Start
[!IMPORTANT] The default
config.jsonand 1-click installer assume the standard folder layout used by most Cata / MoP repacks. You can install anywhere — just edit the paths inconfig.jsonto point at your repack's executables and config files.Recommended layout (works with default config paths):
📁 YourRepackFolder\ ├── 📁 Database\ ├── 📁 Repack\ └── 📁 wow-server-mcp\ ← clone herecd "C:\path\to\YourRepackFolder" git clone https://github.com/timoinglin/wow-server-mcp.git
1. Install & Build
Easy (Windows): double-click install.bat. It checks for Node.js (installs via winget if missing), copies example.config.json → config.json, runs npm install, and builds.
Manual (any OS):
cd wow-server-mcp
cp example.config.json config.json # Windows: copy example.config.json config.json
npm install
npm run build
2. Configure
Edit config.json:
- Database credentials — defaults to
root/ascentonlocalhost:3306 - RA credentials — set after creating a GM account (level 3+)
- Server paths — only change if your folder layout differs from the recommended one above
3. Enable Remote Access (RA) on the Worldserver
In Repack/worldserver.conf:
Ra.Enable = 1
Ra.IP = 127.0.0.1
Ra.Port = 3443
Restart the worldserver and put the matching credentials in config.json under remote_access.
4. Add to Your AI Client
Replace <REPACK_PATH> below with the absolute path to your repack folder.
Use forward slashes / even on Windows (e.g. C:/Games/mop_repack/MOPFREE).
After adding the config, restart your AI client; wow-server will appear in its tool list.
🟠 Claude Desktop
Open Settings → Developer → Edit Config, or edit the file directly:
| OS | Path |
|---|---|
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": {
"wow-server": {
"command": "node",
"args": ["<REPACK_PATH>/wow-server-mcp/dist/index.js"]
}
}
}
If the file already exists, merge the "wow-server" entry into the existing mcpServers object. Quit Claude from the tray icon (right-click → Quit) before relaunching — closing the window leaves it running in the background.
🟢 Claude Code (VS Code extension / CLI)
Easiest — one command:
claude mcp add wow-server -s user -- node "<REPACK_PATH>/wow-server-mcp/dist/index.js"
-s user makes the server available in every project. Use -s project to scope it to the current workspace (writes .mcp.json to the project root).
Or edit the project-scoped file by hand, <your-project>/.mcp.json:
{
"mcpServers": {
"wow-server": {
"type": "stdio",
"command": "node",
"args": ["<REPACK_PATH>/wow-server-mcp/dist/index.js"]
}
}
}
Reload VS Code (Ctrl+Shift+P → "Developer: Reload Window"). For project-scoped servers, Claude prompts once to approve — click approve. Verify with /mcp inside Claude Code.
🔷 Codex CLI
Add to ~/.codex/config.toml (create the file if it doesn't exist):
[mcp_servers.wow-server]
command = "node"
args = ["<REPACK_PATH>/wow-server-mcp/dist/index.js"]
Start a fresh codex session. Tools appear under the namespace mcp__wow-server__*.
🟣 Antigravity (Google's VS Code-based agent IDE)
Easiest — built-in UI: click the Agent Manager icon in the top bar, then the ⋯ menu → MCP Servers and add a new server with:
- Command:
node - Args:
<REPACK_PATH>/wow-server-mcp/dist/index.js
Or edit the config file directly at C:\Users\<you>\.gemini\antigravity\mcp_config.json:
{
"mcpServers": {
"wow-server": {
"command": "node",
"args": ["<REPACK_PATH>/wow-server-mcp/dist/index.js"],
"cwd": "<REPACK_PATH>/wow-server-mcp"
}
}
}
Dynamic Schema (Any Expansion)
The MCP ships with the Cata / MoP TrinityCore schema baked in, but it can adapt to any repack — Wrath, Cataclysm, MoP, Legion, AzerothCore variants — by overriding column names.
To set it up for a non-default core:
- Complete the Quick Start so the AI can reach your database.
- Ask the AI to run the
discover_schematool. It scansINFORMATION_SCHEMAand writes aschema_override.jsontailored to your DB. - The default
example.config.jsonalready sets"schemaOverride": "schema_override.json"— so if you copied that as yourconfig.json, the file is picked up on the next start. If yourconfig.jsondoesn't have that line, add it. - Restart your AI client. Look for
Schema override loaded from …in the MCP server's stderr to confirm.
Available Tools (82 total)
Config Management (4)
| Tool | Description |
|---|---|
get_config |
Read current config.json |
update_config |
Update config fields (deep merge; config_files is read-only) |
reset_config |
Reset to example defaults |
discover_schema |
Auto-detect DB structure for custom repacks |
Database Access (7)
| Tool | Description |
|---|---|
db_query |
Parameterized SELECT queries |
db_insert |
Insert a row |
db_update |
Update with WHERE |
db_delete |
Delete with WHERE |
db_execute |
Raw SQL (DDL, complex joins, etc.) |
db_test_connection |
Test DB connectivity |
create_db_backup |
Full or table-specific mysqldump with optional WHERE |
RA Commands (2)
| Tool | Description |
|---|---|
ra_command |
Send a single RA command |
ra_command_batch |
Send multiple commands in sequence |
Process Management (10)
| Tool | Description |
|---|---|
start_mysql / stop_mysql / restart_mysql |
MySQL control |
start_authserver / stop_authserver / restart_authserver |
Auth control |
start_worldserver / stop_worldserver / restart_worldserver |
World control |
get_server_status |
Check all processes |
Account Management (7)
| Tool | Description |
|---|---|
create_account |
Create game account via RA |
set_gm_level |
Set GM level (0–9) |
set_account_password |
Change password |
modify_dp |
Set DP (Battle Pay) balance |
add_dp |
Add/subtract DP (atomic) |
list_accounts |
List all accounts |
get_account_characters |
List characters for an account |
Server Config Files (5)
| Tool | Description |
|---|---|
read_server_config |
Read allowed config files |
write_server_config |
Write allowed config files |
get_conf_value |
Get a single .conf setting |
update_conf_value |
Update a single .conf setting |
list_allowed_files |
List which config files are accessible |
Lookup & Editing (13)
| Tool | Description |
|---|---|
search_creature_template / get_creature_template / update_creature_template |
NPC lookup & editing |
search_quest_template / get_quest_template / update_quest_template |
Quest lookup & editing |
search_item_template / get_item_template / update_item_template |
Item lookup & editing |
search_gameobject_template |
Gameobject search |
get_server_info |
Server uptime/players via RA |
get_online_players |
Online players from DB |
get_db_stats |
Database statistics |
NPC Development (13)
| Tool | Description |
|---|---|
spawn_creature |
Spawn NPC at GM's in-game position via RA |
delete_creature_spawn |
Delete a creature spawn by GUID |
get_creature_spawns |
List all spawns of a creature entry |
clone_creature_template |
Duplicate existing NPC with new entry & name |
set_npc_flags |
Set npcflag bitfield (Vendor, QuestGiver, Trainer, etc.) |
set_npc_gossip_menu |
Set gossip menu ID on a creature template |
search_gossip_menu |
View gossip menu options and text IDs |
get_npc_vendor_items |
List items sold by a vendor NPC |
add_npc_vendor_item |
Add item to vendor inventory (auto-reloads) |
remove_npc_vendor_item |
Remove item from vendor (auto-reloads) |
get_waypoints |
List waypoints for a creature path |
add_waypoint |
Add waypoint to creature path |
delete_waypoints |
Delete all waypoints for a path |
Quest Development (7)
| Tool | Description |
|---|---|
create_quest |
Create new quest with title, levels, rewards |
delete_quest |
Delete quest and all NPC relations |
set_quest_giver |
Assign NPC as quest starter (auto-sets QuestGiver flag) |
set_quest_ender |
Assign NPC as quest turn-in (auto-sets QuestGiver flag) |
remove_quest_relation |
Remove giver/ender relations |
get_quest_relations |
Show all NPCs/GOs that give/finish a quest |
get_quest_rewards |
Show reward items, choices, XP, money |
Loot & World Data (8)
| Tool | Description |
|---|---|
get_creature_loot |
List loot table for a creature (with item names) |
add_creature_loot_item |
Add item to creature loot (chance, qty, quest-only) |
remove_creature_loot_item |
Remove item from creature loot |
search_loot_by_item |
Find which creatures drop a given item |
get_item_loot |
Get loot contents of a container item |
search_spell |
Search spells by name or ID from spell_dbc |
get_world_events |
List world events with active/upcoming status |
search_teleport_location |
Find teleport locations by name (with coordinates) |
Forensics / DB Integrity (6) — new in 1.4.0
| Tool | Description |
|---|---|
inspect_creature |
One-call deep dive: template (incl. ScriptName, AIName), quest starter/ender, vendor, smart_scripts summary, spawn count, loot table summary. Flags NPCs whose SmartAI gossip handlers make "missing menu" claims false positives. |
inspect_gossip_chain |
Walk a gossip menu: row + options + per-option action_menu_id status (exists / missing / GOSSIP_OPTION_* sentinel like 1048576 = battlefield queue) + every NPC using the menu + cross-referenced SmartAI event 62/64 handlers. |
get_smart_scripts |
Pull SmartAI rows for any creature / gameobject / quest / etc. with human-readable event_type and action_type names. |
find_orphan_refs |
Generic FK-integrity sweep — "rows in source.col pointing to values absent from target.col". Auto-excludes gossip sentinels. Pre-built sweep examples in docs/BUGHUNT.md. |
check_scriptname |
Grep the configured worldserver core source tree (core_source_path in config.json) for a ScriptName. Returns file:line matches or a "not found in upstream — may be in modified core" warning. |
inspect_loot_table |
Inspect any loot table for an entry, classifying each row as valid item / currency (negative ID) / reference / missing. Prevents the "chest drops nothing" false positive when 12 of 14 drops actually work. |
See docs/BUGHUNT.md for the false-positive playbook these tools were designed around.
Bug-Hunting / DB Integrity
The forensic tools above were built to answer one question: "is this DB anomaly actually a bug, or does the core handle it some other way?" Common pitfalls they prevent:
- Currencies aren't items. Negative item IDs in loot tables point to
Currency.dbc, notitem_template.inspect_loot_tablelabels them explicitly. - Magic
action_menu_idvalues aren't menus.1048576=GOSSIP_OPTION_BATTLEFIELD(Wintergrasp queue),2097152= auctioneer, etc.inspect_gossip_chainflags all known sentinels. - SmartAI bypasses missing gossip rows.
event_type = 62(GOSSIP_SELECT) fires when a player clicks an option regardless of whether the destination menu row exists.inspect_creaturewarns when bothgossip_menu_idand SmartAI gossip handlers are present. ScriptNameimplies C++ handling. A non-emptycreature_template.ScriptNamemeans a compiled handler exists on the running server.check_scriptnameverifies whether the name resolves in the configured core source tree.- Cherry-picking rows is misleading. A loot table with 12 working + 2 broken rows is not "broken".
inspect_loot_tablealways shows the full picture.
If you're running a hunt at scale, read docs/BUGHUNT.md first — it includes pre-built find_orphan_refs queries for the most productive sweeps.
To enable check_scriptname, add to config.json:
{
"core_source_path": "C:/path/to/your/SkyFire_or_TrinityCore/checkout"
}
Database Backups
create_db_backup invokes mysqldump securely (no shell, password via MYSQL_PWD env, identifier validation on table names) and writes to a backups/ directory next to wow-server-mcp. Three modes:
- Full backup — pass all three databases (
auth,characters,world) for a complete dump. - Single database — pass one database to dump its entire schema.
- Targeted backup — pass one database + specific
tables+ an optionalWHEREclause (e.g. dumpaccountrows forusername = 'kneuma').
Updating
cd wow-server-mcp
git pull
npm install
npm run build
Then restart your AI client to load the new code.
[!NOTE]
config.jsonis gitignored and won't be overwritten. If new options appear in a release, checkexample.config.json.
Prerequisites
- Node.js 18+ (tested through v24.x)
- MySQL running (the repack's
MySQL.batworks) - Worldserver running (required for RA-based tools)
- A GM account with level 3+ (for RA authentication)
Project Structure
wow-server-mcp/
├── src/ — TypeScript source
├── dist/ — Compiled JS (generated by `npm run build`)
├── install.bat — One-click Windows installer
├── install.ps1 — Installer script (called by install.bat)
├── example.config.json — Template config (commit-safe)
├── config.json — Your local config (gitignored, has credentials)
└── package.json
Releases
Per-version release notes live on the GitHub Releases page.
Support the Project
This project is free and open-source, built and maintained in spare time. If it's saved you time setting up or running your server — or you'd just like to see it keep growing — a coffee is hugely appreciated and helps keep the WoW repack tools maintained and improving.
Every contribution also funds more free tools for the MoP / Cata repack community — thank you! 💛
Installing WoW Server
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/timoinglin/wow-server-mcpFAQ
Is WoW Server MCP free?
Yes, WoW Server MCP is free — one-click install via Unyly at no cost.
Does WoW Server need an API key?
No, WoW Server runs without API keys or environment variables.
Is WoW Server hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install WoW Server in Claude Desktop, Claude Code or Cursor?
Open WoW Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
wenb1n-dev/SmartDB_MCP
A universal database MCP server supporting simultaneous connections to multiple databases. It provides tools for database operations, health analysis, SQL optim
by wenb1n-devPostgres Server
This server enables interaction with PostgreSQL databases through the Model Context Protocol, optimized for the AWS Bedrock AgentCore Runtime. It provides tools
by madhurprashPostgres
Query your database in natural language
by AnthropicPostgreSQL
Read-only database access with schema inspection.
by modelcontextprotocolCompare WoW Server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All data MCPs
