ro-mcp
ro-mcp
Ein MCP-Server, der eine echte Ragnarok-Online-Client-Sitzung gegen einen lokalen rAthena-Server steuert, sodass ein Agent sich anmelden, herumlaufen, mit NPCs sprechen und kämpfen kann – und so Serverinhalte Ende-zu-Ende testen kann, anstatt Logdateien zu lesen.
Der Client ist OpenKore, gesteuert über ein kleines Steuerungs-Plugin (openkore-plugin/mcpbridge.pl), das einen zeilenorientierten JSON-Socket bereitstellt.
Claude ⇄ MCP server (stdio)
⇄ JSON over TCP :24390
OpenKore + mcpbridge plugin
⇄ RO protocol (plaintext)
rAthena login:6900 char:6121 map:5121Warum OpenKore statt eines selbst gebauten Clients
OpenKore bietet eine exakte Übereinstimmung für die Paketversion, die dieser Server spricht – RagexeRE_2021_11_03 existiert in seinen Send- und Receive-Bäumen sowie einer passenden recvpackets-Tabelle – und es übernimmt bereits Wegfindung, Wiederverbindungen, Kartenwechsel und Inventar. Das neu zu implementieren war die Alternative; es wiederzuverwenden war nicht annähernd so gut.
Paketverschleierung ist hier kein Thema: rAthena löst PACKETVER > 20180307 zu null Verschleierungsschlüsseln auf, was die XOR-Operation zur Identität macht. Der Server bestätigt dies beim Start mit Packet Obfuscation: Enabled. Keys: 0x00000000, 0x00000000, 0x00000000.
Related MCP server: Roblox Executor MCP
Voraussetzungen
Anforderung | Notizen |
Perl 5.34+ | macOS-System-Perl ist in Ordnung |
GNU readline |
|
Xcode Command Line Tools | Perl-C-Header befinden sich im SDK auf modernem macOS |
Python 3 | nur um OpenKore's gebündeltes SCons auszuführen |
Node.js 18+ | der MCP-Server selbst |
Einrichtung
./setup.sh # clone OpenKore, patch, build XSTools, install config + pluginsetup.sh ist idempotent. Es erledigt vier Dinge, die der Standard-OpenKore-Build auf Apple Silicon nicht unbeaufsichtigt tun kann:
Weist SConstruct auf das
/opt/homebrew-readline-Präfix hin (es kennt nur das Intel-/usr/local-Präfix).Weist es auf Perls Header im macOS-SDK hin, da
Config.pmeinen nackten/System/Library-Pfad meldet, der sie nicht mehr enthält.Ersetzt
pythondurchpython3für das gebündelte SCons.Installiert unseren Server-Eintrag, Konfigurationsüberschreibungen und das
mcpbridge-Plugin – einschließlich des Hinzufügens vonmcpbridgezuloadPlugins_list, ohne das der Steuerungssocket nie geöffnet wird.
Serverseitige Voraussetzungen
Die rAthena-Instanz benötigt drei Einstellungen für unbeaufsichtigte Anmeldung:
Datei | Einstellung | Warum |
|
| lässt |
|
| die PIN-Eingabe blockiert OpenKore's Hauptschleife, was den Steuerungssocket zum Stillstand bringt |
|
| Charaktererstellung |
Das Bridge-Protokoll
Zeilengetrenntes JSON, in beide Richtungen, auf 127.0.0.1:24390 (nur Loopback – dies gewährt volle Kontrolle über eine Spielsitzung).
// 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 leitet an OpenKore's eigene Befehlsebene weiter, anstatt Bewegungs- oder NPC-Logik neu zu implementieren – OpenKore weiß bereits, wie man Pfade findet, wiederholt und sich erholt, und das hier zu duplizieren würde nur verrotten.
Verwendung
npm install && npm run build
node scripts/smoke.mjs # end-to-end check against a running serverRegistrieren Sie sich bei einem MCP-Client, indem Sie ihn auf dist/index.js verweisen:
{ "mcpServers": { "ro": { "command": "node", "args": ["/path/to/ro-mcp/dist/index.js"] } } }RO_MCP_KORE_DIR und RO_MCP_PORT überschreiben den OpenKore-Speicherort und den Bridge-Port.
Werkzeuge
Werkzeug | Zweck |
| Sitzung starten / beenden |
| Karte, Position, HP/SP, Level, Zeny, nahe NPCs und Monster |
| OpenKore's interaktive Fragen anzeigen und beantworten |
| Charaktererstellung und -auswahl |
| innerhalb einer Karte bewegen / zu einer anderen Karte reisen |
| mit einem NPC sprechen, dessen Dialogtext und Menüoptionen zurückgeben |
| ein Gespräch führen |
| ein nahes Monster angreifen |
| Konsolenausgabe lesen / Notausstieg |
Ein Hinweis zu Eingabeaufforderungen
OpenKore stellt einige Fragen auf stdin – Charaktererstellung, Charakterauswahl, Passwortwiederholung. Das sind blockierende Lesevorgänge in seiner Hauptschleife. Solange eine aussteht, ist die Schleife angehalten und der Steuerungssocket kann nicht antworten. Der MCP-Server besitzt daher sowohl das stdin des Kindprozesses als auch den Socket; ro_prompt zeigt eine ausstehende Frage an und ro_answer antwortet darauf. Wenn ein Tool jemals eine Zeitüberschreitung hat, prüfen Sie zuerst ro_prompt.
Status
Ende-zu-Ende gegen einen Live-Server verifiziert (scripts/smoke.mjs):
automatische Kontoerstellung, Anmeldung, Charaktererstellung und -auswahl
ro_statemeldet Karte, Position, HP/SP, Level, Zeny und nahe Akteurero_walkbewegt den Charakter und bestätigt die Ankunftunerreichbare Ziele werden in ~30ms mit dem Grund abgelehnt, anstatt das volle Timeout zu verbrauchen – OpenKore meldet diese nur auf der Konsole, daher wird die Ankunftsabfrage gegen diese Nachricht abgeglichen
ein vollständiges NPC-Gespräch gegen TypeScript-skriptete Inhalte (
scripts/npc-test.mjs): Dialog lesen, Menüoptionen parsen, einen Zweig wählen und die Antwort lesen
Noch nicht getestet: ro_attack.
Zwei asynchrone Fallstricke, die man kennen sollte
Akteurslisten werden nach dem Kartenwechsel befüllt. Ein ro_state direkt nach der Anmeldung meldet zu Recht keine nahen NPCs; fragen Sie ab, bis sie erscheinen.
Die letzte Nachricht eines Dialogs kommt an, wenn er geschlossen wird. Skripte antworten und schließen oft in einem Zug, behandeln Sie npc_talk_done also als „als geschlossen markieren“, niemals als „Puffer verwerfen“ – sonst ist das Ende eines Gesprächs, normalerweise der Teil, auf den geprüft wird, genau der Teil, der verloren geht.
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