How it works
NosTale's client is a 32-bit Windows program. To see its plaintext packets, the logger has to run inside that process, after the game decrypts what it receives and before it encrypts what it sends. That is why the hook DLL is Windows code on both platforms: on Linux it is cross-built with MinGW and injected into the client running under Wine.
Everything outside the game is native. The DLL talks to the host over one loopback TCP connection on 127.0.0.1:47821, because a Wine named pipe is not reachable from a Linux process while a socket is. The Python host turns the stream into a world model, the GTK4 window draws it, and the MCP server hands it to an AI agent.
Movement goes through the client's own MoveTo, so the game finds the way, animates the character and sends its normal walk packet. Attacks, spells and pickups are game packets sent through the game's own send function, and each one counts only when the server answers: a hit arrives as su, a pickup as get, a step as the new position.
Questions
What is NostaleBot?
NostaleBot is the open-source project NosTale Packet Logger on GitHub. A small DLL inside the NosTale client reads the packets the game has already decrypted and can send packets and movement commands back through the game itself. Around it are a world model, a map and combat bot with a GTK4 window, a command line and an MCP server for AI agents.
Can Claude or another AI agent really play NosTale with it?
Yes, through the MCP server. The agent reads the world (position, HP and MP, monsters, drops, portals, learned spells) and acts with tools that walk, fight, cast and loot. Moves, attacks, spells and pickups wait for the server's confirmation, so the agent knows whether they worked. The tools are building blocks: the agent decides what to do with them.
Which MCP tools does it expose?
Twenty: game_state, game_entities, game_drops, game_map, game_portals, game_path, game_spells and game_status to read the world; game_move, game_travel, game_rest, game_select, game_attack, game_cast, game_cast_spell and game_pickup to act; game_send, game_wait_for, game_memory_find and game_memory_read for low-level work. A resource ntpl://game/state carries the world snapshot.
Does it work on Linux?
Yes, Linux is the main target. NosTale runs under Wine, the DLL is cross-built with MinGW, and everything outside the game is native: the TCP link, the Python host, the GTK4 window and the MCP server. It was run against the live client under Wine 11.
Does it work on Windows?
The repository keeps the original Windows build: an MSVC DLL, a C++ injector and a C# WinForms packet logger that shows, filters, exports and sends packets. The map bot and the MCP server live in the Linux tree.
Is using a bot allowed in NosTale?
No. Gameforge's terms of service prohibit automation, and an account that uses a bot can be banned. NostaleBot is a tool for the account owner's own client, it has no detection evasion, and using it on a live account is the owner's decision and risk.
Does it send my data anywhere?
No. The DLL listens on 127.0.0.1 only, the host and the MCP server run on your own computer, and nothing is sent to TechTools. The packet log stays on your disk.
What happens after a NosTale update?
A client patch can move the code the hooks look for. The DLL then reports NOT-FOUND instead of crashing the game, and docs/hooking.md in the repository explains how to find the new signatures.
What does it cost?
Nothing. The code is on GitHub under the MIT license, and you build it yourself from source.