MCP server for managing an AzerothCore WoTLK server through its SOAP interface. Exposes 28 Game Master tools that any MCP-compatible client (Claude Code, Claude Desktop, etc.) can call directly via an LLM.
- Node.js >= 20.6.0
- An AzerothCore worldserver with SOAP enabled (
SOAP.Enabled = 1 in worldserver.conf)
git clone <repo-url> && cd azerothcore-wotlk-mcp
npm install
cp .env.example .env # edit with your SOAP credentials
npm run build
| Variable |
Default |
Description |
TRANSPORT |
stdio |
Transport mode: stdio or sse |
HTTP_PORT |
3000 |
HTTP port for SSE mode (ignored in stdio) |
SOAP_HOST |
127.0.0.1 |
AzerothCore SOAP host |
SOAP_PORT |
7878 |
AzerothCore SOAP port |
SOAP_USERNAME |
required |
SOAP account username |
SOAP_PASSWORD |
required |
SOAP account password |
The SOAP account must have security level 3 (SEC_ADMINISTRATOR) on the AzerothCore server.
Add to your MCP client configuration (Claude Code, Claude Desktop, etc.):
{
"mcpServers": {
"azerothcore": {
"command": "node",
"args": ["--env-file=.env", "dist/index.js"],
"cwd": "/path/to/azerothcore-wotlk-mcp"
}
}
}
Set TRANSPORT=sse in .env, then:
npm start
# MCP SSE server listening on http://localhost:3000/mcp
Client configuration:
{
"mcpServers": {
"azerothcore": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp"
}
}
}
| Tool |
Description |
server_info |
Server version, uptime, connected players |
server_set_motd |
Set the Message of the Day |
server_reload_config |
Reload worldserver.conf without restart |
| Tool |
Description |
account_create |
Create a game account |
account_delete |
Delete a game account |
account_set_gmlevel |
Set GM security level (0-3) |
| Tool |
Description |
character_level |
Set character level (1-80) |
character_rename |
Force rename at next login |
character_changerace |
Force race change at next login |
character_changefaction |
Force faction change at next login |
| Tool |
Description |
ban_account |
Ban an account (duration + reason) |
ban_ip |
Ban an IP address |
ban_character |
Ban a character |
unban_account |
Remove account ban |
unban_character |
Remove character ban |
unban_ip |
Remove IP ban |
mute_player |
Mute a player for N minutes |
| Tool |
Description |
teleport_player |
Teleport to a named location |
summon_player |
Summon a player |
| Tool |
Description |
send_mail |
Send in-game mail |
send_items |
Send items via mail |
send_money |
Send copper via mail |
| Tool |
Description |
guild_create |
Create a guild |
guild_delete |
Delete a guild |
guild_invite |
Invite a player to a guild |
| Tool |
Description |
announce |
Server-wide chat announcement |
notify |
Server-wide screen notification |
| Tool |
Description |
player_info |
Detailed player information |
lookup_player_ip |
Find characters by IP |
lookup_player_account |
Find characters by account |
| Tool |
Description |
raw_command |
Execute any GM command directly |
In worldserver.conf:
SOAP.Enabled = 1
SOAP.IP = "127.0.0.1"
SOAP.Port = 7878
The account used for SOAP must be granted admin level:
-- In the auth database
INSERT INTO account (username, sha_pass_hash) VALUES ('admin', SHA1(CONCAT(UPPER('admin'), ':', UPPER('admin'))));
-- Then set GM level 3
INSERT INTO account_access (id, gmlevel, RealmID) VALUES ((SELECT id FROM account WHERE username = 'admin'), 3, -1);
Or via the worldserver console:
.account create admin admin
.account set gmlevel admin 3 -1
MIT