lcu-mcp
lcu-mcp
Ein MCP-Server, der einen laufenden League-of-Legends-Client für jeden MCP-Host verfügbar macht – die LCU-REST-API, seinen Live-OnJsonApiEvent-Stream und das eigene DOM und den JavaScript-Kontext der Client-Oberfläche, als neun Tools über stdio.
Fragen Sie Ihren Assistenten, in welcher Warteschlange Sie sich befinden, beobachten Sie die Champion-Auswahl Ereignis für Ereignis, untersuchen Sie das DOM des Clients oder steuern Sie den Client selbst – ohne eine Zeile Klebecode zu schreiben.
Inhalt
Related MCP server: League of Legends MCP Server
So funktioniert's
Zwei unabhängige Subsysteme laufen in einem Node-Prozess:
LcuClientliest die Lockfile des Clients, um Port und Passwort zu ermitteln, spricht dann REST über HTTPS mit Riot's Root-CA (gepinnt) und hält einen WebSocket-Tap aufOnJsonApiEvent, der einen prozessinternen Ringpuffer speist.CdpClientverbindet sich mit dem Chrome-DevTools-Protocol-Endpunkt des Clients (bereitgestellt von Pengu Loader) für DOM-Abfragen und JavaScript-Auswertung.
Beide verbinden sich lazy und überstehen Client-Neustarts – der Lockfile-Port ändert sich bei jedem Start, daher wird das Verzeichnis überwacht und nicht die Datei. Ereignisse werden gepollt statt gepusht, weil MCP kein Server-zu-Client-Push hat.
Design-Entscheidungen und die live verifizierten Protokolldetails finden sich in docs/design.md.
Voraussetzungen
Node.js | >= 24 (ESM, kein Build-Schritt) |
League of Legends | Läuft. Die Lockfile unter |
Pengu Loader | Optional – nur für |
In der Praxis nur Windows: Der Standard-Lockfile-Pfad und die Pengu-Integration sind Windows-spezifisch.
Installation
git clone https://github.com/Triggered0/lcu-mcp.git
cd lcu-mcp
npm installDie Laufzeitabhängigkeiten sind genau drei: @modelcontextprotocol/sdk, zod und ws.
Registrierung bei einem MCP-Host
Claude Code
claude mcp add lcu --scope user -- node C:\path\to\lcu-mcp\src\index.jsJeder Host, der .mcp.json liest
{
"mcpServers": {
"lcu": {
"command": "node",
"args": ["C:\\path\\to\\lcu-mcp\\src\\index.js"],
"env": { "LCU_MCP_CONFIG": "C:\\path\\to\\lcu-mcp\\config\\allowlist.json" }
}
}
}LCU_MCP_CONFIG ist optional; ohne sie sucht der Server nach config/allowlist.json relativ zu seinem Arbeitsverzeichnis und fällt auf integrierte Standardwerte zurück, wenn diese Datei nicht existiert.
Tools
Tool | Zweck |
| Gesundheit pro Subsystem, aufgelöster LCU-Port, konfigurierter CDP-Port, ob |
| GET beliebiger LCU-Pfad |
| Beliebiges Verb, abhängig von der Schreib-Allowlist |
| Liste der kuratierten Endpunkt-Tabelle |
| WebSocket-Tap öffnen und Pufferung starten |
| Ringpuffer leeren |
| Tap schließen |
| Client-DOM abfragen |
| JavaScript in der Seite auswerten |
lol_status zuerst. Wenn etwas anderes fehlschlägt, sagt es Ihnen, welche Hälfte down ist – ein geschlossener Client sieht ganz anders aus als eine fehlende Pengu-Installation.
Ereignisse werden gepollt. lol_events_poll gibt einen cursor zurück; geben Sie ihn beim nächsten Mal als since zurück. Ein von Null verschiedenes dropped bedeutet, dass der Ringpuffer überlief und so viele Ereignisse nach Ihrem Cursor verloren gingen. Einträge mit truncated: true hatten ihre data auf 4 KB gekürzt – holen Sie den vollständigen Body mit lol_get über die uri des Eintrags erneut.
Der Client sendet nur bei Zustandsänderungen. Wenn er auf dem Startbildschirm untätig ist, kann er unbegrenzt still bleiben; das Navigieren in der UI oder das Betreten einer Lobby erzeugt Bursts. Eine leere Abfrage bedeutet normalerweise, dass nichts passiert ist, nicht dass der Tap defekt ist – prüfen Sie running und lol_status, um die beiden zu unterscheiden.
Filter sind URI-Präfixe, die beim Erfassen angewendet werden. Der ungefilterte Datenstrom füllt den Puffer schnell, also übergeben Sie etwas wie ["/lol-champ-select/", "/lol-gameflow/"], es sei denn, Sie wollen wirklich alles.
Konfiguration
config/allowlist.json:
{
"allowEval": true,
"cdpPort": 8888,
"eventBufferSize": 1000,
"writeAllowlist": [
"POST /lol-matchmaking/v1/ready-check/accept",
"PATCH /lol-champ-select/v1/session/actions/*"
]
}Schlüssel | Standard | Bedeutung |
|
| Ob |
|
| Remote-Debugging-Port von Pengu Loader |
|
| Ringpufferkapazität; älteste Einträge werden zuerst verworfen |
|
| Welche mutierenden Anfragen |
Regeln für den Allowlist-Abgleich:
Ein Eintrag ist
METHOD path. Die Methode wird case-insensitiv verglichen, der Pfad case-sensitiv.GETundHEADsind immer erlaubt und benötigen keinen Eintrag.*ist nur als abschließendes Pfadsegment sinnvoll:/a/b/*passt auf/a/b/c, aber nicht auf/a/b/c/dund nicht auf/a/b. Überall sonst ist es ein literales Zeichen.Ein abgelehnter Aufruf gibt die genaue Konfigurationszeile zurück, die ihn erlauben würde, und die Anfrage wird nie gesendet.
DOM-Zugriff aktivieren
lol_dom_query und lol_eval benötigen den CEF-Remote-Debugging-Port des Clients, den Riot's Build nur über Pengu Loader öffnet – ein extern hinzugefügtes --remote-debugging-port-Flag wird ignoriert.
Pengus Konfiguration ist einfacher key=value-Text, ein Paar pro Zeile – kein JSON, kein INI. In C:\Program Files\Pengu Loader\config setzen Sie:
RemoteDebuggingPort=8888Starten Sie dann die Client-UX neu, damit CEF den Port übernimmt:
POST /riotclient/kill-and-restart-uxDas lässt ein laufendes Spiel unberührt. Bis dahin schlagen beide Tools mit diesen genauen Anweisungen fehl, statt mit einem nackten ECONNREFUSED.
Sicherheit
TLS-Verifizierung bleibt aktiv. Das selbstsignierte Zertifikat der LCU wird gegen Riot's Root-CA validiert, die unter
certs/riotgames.pemmitgeliefert wird. Der Server setzt nierejectUnauthorized: false.Das Passwort verlässt nie den Prozess. Es wird nur gehalten, um den
Authorization-Header zu erstellen – kein Tool gibt es zurück, nichts protokolliert es, und Fehlertexte werden davon bereinigt, bevor sie den Host erreichen. CDP-Ziel-URLs enthalten es ebenfalls, daher werden sie geschwärzt, bevor ein Tool sie zurückgibt.lol_evalumgeht die Schreib-Allowlist konstruktionsbedingt. Die Client-Seite kann jeden LCU-Endpunkt von ihrer eigenen Origin ausfetchen, daher kann ausgewertetes JavaScript alles tun, was der Client kann. Das wird akzeptiert, nicht behoben: Es wird durch dasallowEval-Flag gesteuert, dessen Zustandlol_statusmeldet.
Behandeln Sie die Schreib-Allowlist als Schutz vor Fehlern, nicht als Sicherheitsgrenze – solange
allowEvaltrueist, kann sie umgangen werden. Setzen SieallowEvalauffalsefür eine echte Grenze.lol_dom_queryfunktioniert weiterhin, weil es den Selektor als Daten und nicht als Code injiziert.
Entwicklung
npm test # unit tests via node:test — no League client needed
npm run smoke # live end-to-end check against a running client
npm start # run the server on stdionpm run smoke gibt pro Stufe eine Zeile aus und beendet sich mit 1, wenn eine Stufe fehlschlägt. Es wird nie in CI ausgeführt. Die Ereignisstufe wartet auf echte Zustellung und meldet drei Ergebnisse: PASS, wenn Ereignisse eingetroffen sind, SKIP, wenn der Tap verbunden war, aber ein untätiger Client nichts sendete, und FAIL, wenn der Tap nicht verbunden werden konnte.
src/
index.js # stdio transport and tool registration
config.js # config loading and validation
allowlist.js # pure write-allowlist matching
redact.js # strip passwords from URLs and strings
lcu/
lockfile.js # parse, read, and watch the lockfile
client.js # REST with the pinned CA
buffer.js # ring buffer with cursor and drop accounting
ingest.js # pure ingest policy: prefix filters, truncation
events.js # WebSocket tap with backoff reconnect
cdp/
discover.js # probe the debugging port, pick and redact the target
client.js # attach, evaluate, DOM query
tools/ # one module per tool group
tests/ # one test file per source moduleFehlerbehebung
Symptom | Ursache |
| Der Client ist geschlossen oder an einem anderen Ort als dem Standardpfad installiert. |
Jedes CDP-Tool schlägt mit einem Pengu-Hinweis fehl | Pengu Loader ist nicht aktiv oder |
| CDP ist erreichbar, aber die UX startet noch. Versuchen Sie es erneut, sobald der Client sichtbar ist. |
| Normalerweise ein untätiger Client, kein Fehler. Navigieren Sie in der UI und fragen Sie erneut ab; prüfen Sie |
Ein Schreibvorgang wird abgelehnt | Das Verb und der Pfad stehen nicht auf der Allowlist. Die Fehlermeldung enthält die genaue Zeile, die hinzugefügt werden muss. |
TLS-Fehler bei jedem REST-Aufruf | Die mitgelieferte CA ist falsch oder veraltet. Korrigieren Sie die PEM – deaktivieren Sie niemals die Verifizierung. |
Haftungsausschluss
lcu-mcp wird nicht von Riot Games unterstützt und gibt nicht die Ansichten oder Meinungen von Riot Games oder von Personen wieder, die offiziell an der Produktion oder Verwaltung von Riot-Games-Eigentum beteiligt sind. Riot Games und alle zugehörigen Eigentumsrechte sind Marken oder eingetragene Marken von Riot Games, Inc.
Dieses Projekt verwendet die eigene lokale API des Clients. Sie sind für die Verwendung verantwortlich; die Automatisierung von Gameplay kann gegen die Nutzungsbedingungen von Riot verstoßen.
Lizenz
MIT © Triggered
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
- AlicenseCqualityDmaintenanceAn MCP (Model-Controller-Processor) server for accessing League of Legends client data. This server provides a collection of tools that communicate with the League of Legends Live Client Data API to retrieve in-game data.1212Apache 2.0
- AlicenseBqualityAmaintenanceMCP server exposing 30 tools for League of Legends player analysis, match review, and training-plan generation.3515MIT
- AlicenseAqualityAmaintenanceBridges MCP clients to Affinity by Canva's local MCP server, exposing tools for script execution, rendering, and SDK documentation.1564MIT
- AlicenseAqualityCmaintenanceProvides MCP tools to query Liquipedia esports data (matches, teams, players, tournaments, placements, standings) via the Liquipedia v3 API and MediaWiki action API.8MIT
Related MCP Connectors
Riot Games API MCP.
Access Kernel's cloud-based browsers and app actions via MCP (remote HTTP + OAuth).
Speedrun.com MCP — wraps the Speedrun.com API v1 (speedrun.com/api/v1)
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/Triggered0/lcu-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server