ro-mcp
ro-mcp
MCP-сервер, который управляет реальной клиентской сессией Ragnarok Online против локального сервера rAthena, позволяя агенту входить в игру, перемещаться, разговаривать с NPC и сражаться — и, таким образом, тестировать серверный контент целиком, вместо чтения лог-файлов.
Клиент — OpenKore, управляемый через небольшой управляющий плагин (openkore-plugin/mcpbridge.pl), который предоставляет построчный JSON-сокет.
Claude ⇄ MCP server (stdio)
⇄ JSON over TCP :24390
OpenKore + mcpbridge plugin
⇄ RO protocol (plaintext)
rAthena login:6900 char:6121 map:5121Почему OpenKore, а не самодельный клиент
OpenKore поставляется с точным соответствием версии пакетов, на которой говорит этот сервер: RagexeRE_2021_11_03 присутствует в его деревьях Send и Receive, плюс соответствующая таблица recvpackets. Он уже умеет обрабатывать поиск пути, переподключения, смену карт и инвентарь. Переписывать это было альтернативой; переиспользование было вне конкуренции.
Обфускация пакетов здесь не проблема: rAthena для PACKETVER > 20180307 задаёт нулевые ключи обфускации, что превращает XOR в тождественную операцию. Сервер подтверждает это при запуске сообщением
Packet Obfuscation: Enabled. Keys: 0x00000000, 0x00000000, 0x00000000.
Related MCP server: Roblox Executor MCP
Требования
Требование | Примечания |
Perl 5.34+ | подойдёт системный Perl в macOS |
GNU readline |
|
Xcode Command Line Tools | заголовки C для Perl находятся в SDK в современных версиях macOS |
Python 3 | только для запуска встроенного SCons из OpenKore |
Node.js 18+ | сам MCP-сервер |
Установка
./setup.sh # clone OpenKore, patch, build XSTools, install config + pluginsetup.sh идемпотентен. Он делает четыре вещи, которые стандартная сборка OpenKore не может выполнить в автоматическом режиме на Apple Silicon:
Указывает SConstruct на префикс readline
/opt/homebrew(ему известен только Intel-префикс/usr/local).Указывает SConstruct на заголовки Perl внутри macOS SDK, поскольку
Config.pmвыдаёт голый путь/System/Library, в котором их больше нет.Подменяет
pythonнаpython3для встроенного SCons.Устанавливает нашу серверную точку входа, переопределения конфигурации и плагин
mcpbridge— включая добавлениеmcpbridgeвloadPlugins_list, без чего управляющий сокет никогда не откроется.
Требования на стороне сервера
Экземпляру rAthena нужны три настройки для неинтерактивного входа:
Файл | Настройка | Причина |
|
| позволяет |
|
| запрос PIN-кода блокирует главный цикл OpenKore, что останавливает управляющий сокет |
|
| создание персонажа |
Мостовой протокол
JSON, разделённый переводами строк, в обе стороны, на 127.0.0.1:24390 (только loopback — это даёт полный контроль над игровой сессией).
// requests
{"id": 1, "op": "ping"}
{"id": 2, "op": "state"}
{"id": 3, "op": "run", "cmd": "move 155 180"}
// responses
{"id": 1, "ok": true, "pong": 1}
{"id": 3, "ok": false, "error": "unknown or rejected command: ..."}
// events, pushed as they happen
{"event": "npc_talk", "name": "TS Lab", "msg": "Welcome to the V8 smoke test."}
{"event": "npc_talk_responses", "responses": ["Mob spawn", "Reputation", "Cancel"]}
{"event": "map_changed", "map": "prontera"}op: run передаёт выполнение собственному командному слою OpenKore, а не переписывает логику движения или NPC — OpenKore уже умеет прокладывать путь, повторять попытки и восстанавливаться, а дублировать это здесь означало бы лишь создать код, который будет гнить.
Использование
npm install && npm run build
node scripts/smoke.mjs # end-to-end check against a running serverЗарегистрируйте MCP-сервер в клиенте, указав ему на dist/index.js:
{ "mcpServers": { "ro": { "command": "node", "args": ["/path/to/ro-mcp/dist/index.js"] } } }RO_MCP_KORE_DIR и RO_MCP_PORT переопределяют расположение OpenKore и порт моста.
Инструменты
Tool | Назначение |
| запустить / остановить сессию |
| карта, позиция, HP/SP, уровень, зени, ближайшие NPC и монстры |
| просмотр интерактивных вопросов OpenKore и ответ на них |
| создание и выбор персонажа |
| перемещение по карте / переход на другую карту |
| разговор с NPC; возвращает текст диалога и пункты меню |
| управление диалогом |
| атака ближайшего монстра |
| чтение вывода консоли / запасной выход |
Примечание об интерактивных запросах
OpenKore задаёт некоторые вопросы через stdin — создание персонажа, выбор персонажа, повторный ввод пароля. Это блокирующие чтения внутри его главного цикла, поэтому пока один из них ожидает ответа, цикл остановлен, и управляющий сокет не может отвечать. Поэтому MCP-сервер контролирует как stdin дочернего процесса, так и сокет; ro_prompt показывает ожидающий вопрос, а ro_answer отвечает на него. Если какой-либо инструмент вышел по таймауту, сначала проверьте ro_prompt.
Статус
Проверено сквозным тестированием на живом сервере (scripts/smoke.mjs):
автоматическое создание аккаунта, вход в игру, создание и выбор персонажа
ro_stateсообщает карту, позицию, HP/SP, уровень, зени и ближайших действующих лицro_walkперемещает персонажа и подтверждает прибытиенедостижимые пункты назначения отклоняются за ~30 мс с указанием причины, а не после полного таймаута — OpenKore сообщает о них только в консоли, поэтому опрос прибытия выполняется в гонке с этим сообщением
полный диалог с NPC с контентом, написанным на TypeScript (
scripts/npc-test.mjs): чтение диалога, разбор пунктов меню, выбор ветки и чтение ответа
Пока не опробовано: ro_attack.
Две асинхронные ловушки, о которых стоит знать
Списки действующих лиц заполняются после входа на карту. ro_state, полученный сразу после входа в игру, правомерно сообщает об отсутствии ближайших NPC; опрашивайте, пока они не появятся.
Последнее сообщение диалога приходит в момент его закрытия. Скрипты обычно отвечают и закрывают диалог за один раз, поэтому воспринимайте npc_talk_done как «пометить закрытым», а не как «отбросить буфер» — иначе конец разговора, обычно именно та часть, которую проверяет тест, окажется именно той частью, которая будет потеряна.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to automate Windows desktop applications through window manipulation, image recognition, OCR, keyboard/mouse simulation, and memory operations via the MCP protocol.MIT
- AlicenseAqualityBmaintenanceEnables agents to interact with a running Roblox game client, execute Lua code, inspect scripts, spy on remotes, and more.21143MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to interact with a running Roblox game client to execute Lua code, inspect scripts, spy on remotes, and more.143216MIT
- AlicenseAqualityBmaintenanceEnables AI agents to execute Lua code, inspect scripts, spy on remotes, and interact with a running Roblox game client through an MCP interface.8221431MIT
Related MCP Connectors
Eyes and hands on real Windows PCs — observe, click, type via Glasswarp API.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Danil0v3s/rathena-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server