ro-mcp
ro-mcp
ローカル rAthena サーバーに対して実際の Ragnarok Online クライアントセッションを操作する MCP サーバーです。エージェントはログイン、歩行、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 を難読化キー0個として解決するため、XOR は恒等演算になります。サーバーは起動時に Packet Obfuscation: Enabled. Keys: 0x00000000, 0x00000000, 0x00000000 と出力してこれを確認します。
Related MCP server: Roblox Executor MCP
必要条件
必要条件 | 備考 |
Perl 5.34+ | macOS 標準の Perl で十分です |
GNU readline |
|
Xcode Command Line Tools | 最近の macOS では Perl の C ヘッダーは SDK 内にあります |
Python 3 | 同梱の SCons を実行するためだけに必要です |
Node.js 18+ | MCP サーバー本体です |
セットアップ
./setup.sh # clone OpenKore, patch, build XSTools, install config + pluginsetup.sh は冪等です。標準の OpenKore ビルドが Apple Silicon 上で無人実行できない4つのことを行います。
SConstruct が
/opt/homebrewの readline プレフィックスを指すようにします(SConstruct は Intel 用の/usr/localしか認識しないため)。Perl のヘッダーが macOS SDK 内を指すようにします(
Config.pmは素の/System/Libraryパスを報告しますが、そこにはもうヘッダーが存在しないため)。同梱の SCons のために
pythonをpython3にシャムします。サーバーエントリ、設定オーバーライド、
mcpbridgeプラグインをインストールします。loadPlugins_listへのmcpbridgeの追加も含みます。これがないと制御ソケットは開きません。
サーバー側の前提条件
rAthena インスタンスには、無人ログインのために3つの設定が必要です。
ファイル | 設定 | 理由 |
|
|
|
|
| PIN プロンプトが OpenKore のメインループをブロックし、制御ソケットを停止させる |
|
| キャラクター作成 |
ブリッジプロトコル
改行区切りの JSON を、127.0.0.1:24390 上で双方向に送受信します(ループバックのみ — これによりゲームセッションを完全に制御できます)。
// 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 は移動や NPC ロジックを再実装するのではなく、OpenKore 自身のコマンドレイヤーに転送します。OpenKore はすでに経路探索、再試行、復旧の方法を知っており、ここでそれを複製しても、ただ腐っていくだけです。
使い方
npm install && npm run build
node scripts/smoke.mjs # end-to-end check against a running serverMCP クライアントに登録するには、dist/index.js を指定します:
{ "mcpServers": { "ro": { "command": "node", "args": ["/path/to/ro-mcp/dist/index.js"] } } }RO_MCP_KORE_DIR と RO_MCP_PORT は、OpenKore の場所とブリッジポートを上書きします。
ツール
ツール | 目的 |
| セッションの起動 / 停止 |
| マップ、位置、HP/SP、レベル、ゼニー、周辺の NPC とモンスター |
| OpenKore の対話型の質問を確認して回答する |
| キャラクターの作成と選択 |
| マップ内の移動 / 別のマップへの移動 |
| NPC と会話し、ダイアログテキストとメニューオプションを返す |
| 会話を進める |
| 近くのモンスターを攻撃する |
| コンソール出力の読み取り / 脱出ハッチ |
プロンプトに関する注意
OpenKore は stdin 上でいくつかの質問 — キャラクター作成、キャラクター選択、パスワード再入力 — を行います。これらはメインループ内のブロッキング読み取りであるため、いずれかが保留されている間はループが停止し、制御ソケットは応答できません。したがって、MCP サーバーはソケットに加えて子プロセスの stdin も所有します。ro_prompt は保留中の質問を表示し、ro_answer がそれに回答します。ツールがタイムアウトした場合は、まず ro_prompt を確認してください。
ステータス
実サーバーに対してエンドツーエンドで検証済み (scripts/smoke.mjs):
アカウントの自動作成、ログイン、キャラクターの作成と選択
ro_stateによるマップ、位置、HP/SP、レベル、ゼニー、周辺アクターの報告ro_walkによるキャラクターの移動と到着の確認到達不能な目的地は ~30ms で理由付きで拒否され、フルタイムアウトを 使い切らない — OpenKore はこれらをコンソールにしか報告しないため、 到着ポーリングはそのメッセージと競わせている
TypeScript でスクリプト化されたコンテンツに対する完全な NPC 会話 (
scripts/npc-test.mjs): ダイアログの読み取り、メニューオプションの解析、 ブランチの選択、返答の読み取り
未検証: ro_attack。
知っておくべき2つの非同期の落とし穴
アクターリストはマップ進入後に投入されます。 ログイン直後に取得した ro_state は、周辺に NPC がいないと正当に報告します。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