tmw-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TMW_PORT | No | Override port only. Default `6901`. | 6901 |
| TMW_WORLD | No | World name (blank for default). | |
| TMW_SERVER | No | Login server. Accepts `host` or `host:port`. Default `server.themanaworld.org:6901`. | server.themanaworld.org:6901 |
| TMW_PASSWORD | No | Account password | |
| TMW_USERNAME | No | Account name | |
| TMW_CHAR_NAME | No | Character name. If omitted, the account's first character is used. | |
| TMW_CLIENT_DATA | No | Skip the update-host download and read game data from this directory instead. Dev-only convenience. | |
| TMW_DASHBOARD_PORT | No | Bind the browser dashboard on 127.0.0.1:PORT. Off by default. | |
| TMW_CREDENTIALS_FILE | No | Absolute path to a `credentials.json`. Useful when your MCP host runs `tmw-mcp` from a cwd that doesn't contain one. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {
"claude/channel": {}
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| stateA | Get current game state: character info, position, HP/SP, nearby beings, floor items. |
| inventoryB | List inventory items. |
| onlineA | Get list of all players currently online. |
| sayC | Send a public chat message in-game. |
| whisperC | Send a private message to a player. |
| party_chatB | Send a message to party members. |
| party_leaveB | Leave the current party. |
| walkB | Walk to coordinates (x, y) using A* pathfinding. Sends a channel notification on arrival or failure. |
| faceB | Change facing direction (0=south, 2=west, 4=north, 6=east). |
| sitC | Sit down. |
| standC | Stand up. |
| attackB | Attack a being by ID (starts continuous attack). |
| stop_attackA | Stop auto-attack and hunting. |
| huntA | Continuously hunt monster(s) by name. Comma-separated for multiple types. Pass empty string to stop. |
| respawnB | Respawn after death. |
| party_replyC | Accept or reject a party invitation. |
| attack_rangeA | Override weapon attack range (normally auto-detected from server). 1=melee, 2=scythe/polearm. |
| ferry_exitA | Auto-exit the ferry after N bell rings. E.g. bells=1 exits at next stop, bells=2 skips one stop then exits. |
| pickupC | Pick up a floor item by ID. |
| shop_buyB | Open a shop NPC's buy list. Use after clicking a shop NPC (0x00c4 event). The buy list will appear in game state. |
| shop_sellB | Open a shop NPC's sell list. Use after clicking a shop NPC (0x00c4 event). |
| buyC | Buy items from shop. Must open buy list first with tmw_shop_buy. |
| sellB | Sell items to shop. Must open sell list first with tmw_shop_sell. |
| equipC | Equip an item by inventory index. |
| useC | Use an item by inventory index. |
| dropC | Drop an item on the ground. Amount 0 = drop entire stack. |
| npcC | Click on an NPC to start dialog. |
| npc_nextA | Continue NPC dialog (click Next). |
| npc_closeA | Close NPC dialog. If npc_id is 0 (default), closes the NPC tracked by the client; pass an explicit id to close a specific NPC when the client state is stale (e.g., after clicking a storage NPC that never sent a dialog packet). |
| close_storageA | Send CMSG_CLOSE_STORAGE (0x00f7) to the server. Required after clicking a storage NPC; without it, the server leaves sd->state.storage_open set and silently drops walks and item-use packets. |
| npc_chooseC | Choose an NPC menu option (1-based index). |
| npc_input_strC | Submit text input to an NPC dialog. |
| npc_input_intC | Submit integer input to an NPC dialog. |
| trade_requestC | Request a player-to-player trade with the given player name. |
| trade_acceptB | Accept an incoming trade request. |
| trade_rejectB | Reject an incoming trade request. |
| trade_add_itemC | Add an inventory item to the trade offer (amount=0 means entire stack). |
| trade_add_zenyC | Add zeny (GP) to the trade offer. |
| trade_lockB | Lock your side of the trade (indicate readiness to commit). |
| trade_commitA | Commit the trade after both sides have locked. |
| trade_cancelB | Cancel the current trade. |
| followB | Follow a player by name or ID. Pass empty string to stop. |
| emoteC | Send an emote. |
| statB | Increase a stat: str, agi, vit, int, dex, or luk. |
| mapB | Show ASCII minimap around current position. |
| restartA | Hard-restart the TMW bot daemon. Sends a clean quit to the map server so re-login succeeds immediately. Useful when the bot is wedged or after a code change. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 46 tools
Most tools target clearly distinct game actions, with descriptions that clarify sequencing and context. Some potential confusion exists between pairs like npc_close/close_storage, shop_buy/buy, and attack/hunt, but these are mitigated by explicit instructions in the descriptions.
All tools use snake_case, but the naming pattern is mixed: many are single verbs (walk, attack), several are nouns (state, inventory), and others are verb_noun (trade_commit, npc_next). This inconsistency reduces predictability, though names remain readable.
46 tools is well above the typical 3-15 range and exceeds the 25+ threshold for 'too many'. While the domain is complex, many tools could be consolidated or grouped (e.g., trade operations, NPC dialog steps) to reduce surface area.
The surface covers core gameplay: state, movement, combat, chat, party, trade, shop, inventory, NPC dialog, and stats. Minor gaps include no party_invite tool and no explicit skill/ability management, but the core lifecycle is well covered.