{"id":47739200,"url":"https://github.com/diviatrix/openkore-mcp","last_synced_at":"2026-04-09T05:00:59.898Z","repository":{"id":348675743,"uuid":"1199299323","full_name":"diviatrix/openkore-mcp","owner":"diviatrix","description":"Proof of concept project about LLM usage inside Ragnarok Online via sse MCP integrated to OpenKore","archived":false,"fork":false,"pushed_at":"2026-04-02T10:27:42.000Z","size":3169,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-05T01:10:02.140Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diviatrix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-02T08:08:47.000Z","updated_at":"2026-04-05T00:18:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/diviatrix/openkore-mcp","commit_stats":null,"previous_names":["diviatrix/openkore-mcp"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/diviatrix/openkore-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diviatrix%2Fopenkore-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diviatrix%2Fopenkore-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diviatrix%2Fopenkore-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diviatrix%2Fopenkore-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diviatrix","download_url":"https://codeload.github.com/diviatrix/openkore-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diviatrix%2Fopenkore-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31456664,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-02T23:24:35.575Z","updated_at":"2026-04-06T02:00:44.109Z","avatar_url":"https://github.com/diviatrix.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenKore MCP Bridge\nBasically it is LLM way to control Ragnarok Online player via OpenKore bot using MCP.\n\nMCP (Model Context Protocol) SSE server built directly into the OpenKore plugin — no external dependencies\n\n[![img](doc/media/demo.gif)](http://www.youtube.com/watch?v=h1rifMwjxFo)\n\n## Features\n\n- **MCP SSE Transport** (protocol version 2024-11-05) over HTTP\n- **253 tools** from a typical OpenKore installation:\n  - 207 command tools (all console commands)\n  - 2 chat templates (auto-response words)\n  - 44 response templates (canned messages)\n- Pure Perl — uses only core OpenKore modules + `JSON` + `IO::Socket::INET`\n- Non-blocking I/O integrated into `mainLoop_pre` hook\n- Multiple concurrent SSE clients supported\n- CORS enabled\n\n## Architecture\n\n```\nMCP Client (Qwen, Claude, etc.)\n    ↕ HTTP/SSE (localhost:5556)\nMCPBridge.pl (OpenKore plugin)\n    → Commands::run()\n    → OpenKore internals\n```\n\nNo middleware. The plugin IS the server.\n\n## Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | `/sse` | SSE event stream (MCP transport) |\n| POST | `/message?sessionId=N` | JSON-RPC requests from client |\n| OPTIONS | `*` | CORS preflight |\n\n## MCP Methods\n\n| Method | Description |\n|--------|-------------|\n| `initialize` | Handshake — returns protocol version, capabilities, server info |\n| `tools/list` | List all available tools (supports cursor pagination) |\n| `tools/call` | Execute a tool by name |\n| `ping` | Health check |\n\n## Installation\n_(I did everything on debian, please report issues on win and others)_\n\n1. (optional) Ensure the `JSON` Perl module is installed:\n   ```bash\n   perl -MJSON -e 1\n   ```\n   If it fails, install it: `cpan JSON` or `apt install libjson-perl`\n\n2. Copy the plugin directory:\n   ```bash\n   cp -r plugins/MCPBridge /path/to/your/openkore/plugins/\n   ```\n\n3. Add to `control/config.txt`:\n   ```\n   loadPlugins_list MCPBridge\n   ```\n\n4. Start OpenKore. The server starts automatically on `http://127.0.0.1:5556`, you will see in ok console - `[MCPBridge] MCP SSE on http://127.0.0.1:5556/sse`\n\n## Configuration\n\nIn `.qwen/mcp.json` (or any MCP client config):\n```json\n{\n  \"mcpServers\": {\n    \"openkore\": {\n      \"url\": \"http://127.0.0.1:5556/sse\"\n    }\n  }\n}\n```\n\nor \n\n```\n{\n  \"mcp\": {\n    \"openkore\": {\n      \"type\": \"remote\",\n      \"url\": \"http://localhost:5556/sse\",\n      \"enabled\": true\n    }\n  }\n}\n```\n\n## Usage\nWork mode is simple, LLM work in cycle of `wait_pm` tool, it has optional timeout param in seconds.\nAfter pm recieved LLM recognize it as prompt, and do stuff, then repeat.\n\n1. Configure the MCP client as shown above\n2. Start your AI agent.\n3. Prompt him [RAGNAROK PLAYER](doc/RAGNAROK_PLAYER.md) role definition and ask to start cycle\n4. The agent will wait for PM commands and execute OpenKore tools to respond\n\n## Testing with curl\n\n```bash\n# Connect SSE (blocks, streams events)\ncurl -N http://127.0.0.1:5556/sse\n\n# In another terminal, send initialize request\ncurl -X POST 'http://127.0.0.1:5556/message?sessionId=1' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"test\",\"version\":\"1.0\"}}}'\n```\n\n## Tool Types\n\n### Command Tools\nEvery OpenKore console command is available as a tool (e.g., `move`, `stats`, `a`, `s`).\nBesides that, only custom tool is `wait_pm`, read about it in Usage section.\n\n```json\n{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"move\",\n    \"arguments\": { \"x\": \"100\", \"y\": \"200\" }\n  }\n}\n```\n\n### Chat Templates (`chat_*`)\nAuto-response words from `chat_resp.txt`.\n\n### Response Templates (`resp_*`)\nCanned responses from `responses.txt` (e.g., `resp_authS`).\n\n## Troubleshooting\n\n- Check OpenKore log for `[MCPBridge]` messages\n- Port 5556 must be free: `ss -tlnp | grep 5556`\n- Ensure `JSON` Perl module is installed: `perl -MJSON -e 1`\n\n## Files\n- `MCPBridge.pl` — Main plugin (MCP SSE server)\n- `README.md` — This documentation\n\n[License](doc/license.txt)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiviatrix%2Fopenkore-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiviatrix%2Fopenkore-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiviatrix%2Fopenkore-mcp/lists"}