lcu-mcp
lcu-mcp
実行中のLeague of LegendsクライアントをあらゆるMCPホストに公開するMCPサーバーです。LCU REST API、そのライブOnJsonApiEventストリーム、クライアントUI自身のDOMとJavaScriptコンテキストを、stdio上の9つのツールとして公開します。
アシスタントに現在のキューを尋ねたり、チャンプセレクトの展開をイベントごとに追跡したり、クライアントのDOMを調べたり、クライアント自体を操作したりできます。グルーコードを一行も書く必要はありません。
目次
Related MCP server: League of Legends MCP Server
仕組み
1つのNodeプロセス内で、2つの独立したサブシステムが動作します。
LcuClientは、クライアントのロックファイルを読み取ってポートとパスワードを特定し、RiotのルートCAをピン留めしたHTTPSでREST通信を行い、OnJsonApiEventのWebSocketタップを保持して、プロセス内のリングバッファに供給します。CdpClientは、クライアントのChrome DevTools Protocolエンドポイント(Pengu Loaderによって公開)に接続し、DOMクエリとJavaScript評価を行います。
どちらも遅延接続で、クライアントの再起動にも耐えます。ロックファイルのポートは起動のたびに変わるため、ファイルではなくディレクトリを監視します。イベントはプッシュではなくポーリングされます。MCPにはサーバーからクライアントへのプッシュがないためです。
設計の根拠とライブ検証済みのプロトコル詳細は、docs/design.mdにあります。
要件
Node.js | >= 24(ESM、ビルドステップなし) |
League of Legends | 実行中。 |
Pengu Loader | 任意 — |
実際にはWindowsのみ:デフォルトのロックファイルパスとPengu統合はWindows固有です。
インストール
git clone https://github.com/Triggered0/lcu-mcp.git
cd lcu-mcp
npm install実行時依存関係は正確に3つ:@modelcontextprotocol/sdk、zod、ws。
MCPホストへの登録
Claude Code
claude mcp add lcu --scope user -- node C:\path\to\lcu-mcp\src\index.js.mcp.json を読み取る任意のホスト
{
"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 は任意です。これがない場合、サーバーは作業ディレクトリに対して config/allowlist.json を探し、そのファイルが存在しない場合は組み込みのデフォルトにフォールバックします。
ツール
Tool | Purpose |
| サブシステムごとの健全性、解決されたLCUポート、設定されたCDPポート、 |
| 任意のLCUパスへのGET |
| 任意の動詞。書き込み許可リストに従う |
| 厳選されたエンドポイントテーブルを一覧表示 |
| WebSocketタップを開き、バッファリングを開始 |
| リングバッファを排出 |
| タップを閉じる |
| クライアントDOMをクエリ |
| ページ内でJavaScriptを評価 |
最初に lol_status を確認してください。 他の何かが失敗したとき、どちらの半分がダウンしているかを教えてくれます。閉じたクライアントは、Penguのインストールがないのとはまったく異なります。
イベントはポーリングされます。 lol_events_poll は cursor を返します。次回はそれを since として渡します。非ゼロの dropped は、リングバッファがラップし、カーソル以降にその数のイベントが失われたことを意味します。truncated: true のエントリは、data が4 KBで切り詰められています。エントリの uri で lol_get を使用して完全なボディを再取得してください。
クライアントは状態が変化したときのみイベントを発行します。 ホーム画面でアイドル状態のときは、無期限に沈黙することがあります。UIをナビゲートしたりロビーに入ったりすると、バーストが発生します。空のポーリングは通常、何も起こらなかったことを意味し、タップが壊れているわけではありません。running と lol_status を確認して、2つを区別してください。
フィルタは取り込み時に適用されるURIプレフィックスです。 フィルタリングされていない全量ストリームはバッファをすぐに満たすため、本当にすべてが必要でない限り、["/lol-champ-select/", "/lol-gameflow/"] のようなものを渡してください。
設定
config/allowlist.json:
{
"allowEval": true,
"cdpPort": 8888,
"eventBufferSize": 1000,
"writeAllowlist": [
"POST /lol-matchmaking/v1/ready-check/accept",
"PATCH /lol-champ-select/v1/session/actions/*"
]
}Key | Default | Meaning |
|
|
|
|
| Pengu Loaderのリモートデバッグポート |
|
| リングバッファ容量。最も古いエントリから先に削除されます |
|
|
|
許可リストのマッチングルール:
エントリは
METHOD pathです。メソッドは大文字小文字を区別せず比較され、パスは大文字小文字を区別して比較されます。GETとHEADは常に許可され、エントリは不要です。*は末尾のパスセグメントとしてのみ意味を持ちます:/a/b/*は/a/b/cにマッチしますが、/a/b/c/dや/a/bにはマッチしません。他の場所ではリテラル文字です。拒否された呼び出しは、それを許可する正確な設定行を返し、リクエストは送信されません。
DOMアクセスの有効化
lol_dom_query と lol_eval には、クライアントのCEFリモートデバッグポートが必要です。RiotのビルドはPengu Loaderを通じてのみこれを開きます。外部から追加された --remote-debugging-port フラグは無視されます。
Penguの設定はプレーンな key=value テキストで、1行に1ペアです。JSONでもINIでもありません。C:\Program Files\Pengu Loader\config で、以下を設定します:
RemoteDebuggingPort=8888次に、クライアントUXを再起動して、CEFがポートを認識するようにします:
POST /riotclient/kill-and-restart-uxこれにより、進行中のライブゲームには影響しません。これが行われるまで、両方のツールは裸の ECONNREFUSED ではなく、これらの正確な指示とともに失敗します。
セキュリティ
TLS検証は有効のままです。 LCUの自己署名証明書は、
certs/riotgames.pemにベンダーされたRiotのルートCAに対して検証されます。サーバーは決してrejectUnauthorized: falseを設定しません。パスワードはプロセスから出ません。
Authorizationヘッダーを構築するためだけに保持され、どのツールもそれを返さず、ログにも記録されず、エラーテキストはホストに到達する前にパスワードが除去されます。CDPターゲットURLにもパスワードが埋め込まれているため、どのツールが返す前にそれらも編集されます。lol_evalは構造上、書き込み許可リストをバイパスします。 クライアントページは自身のオリジンから任意のLCUエンドポイントにfetchできるため、評価されたJavaScriptはクライアントができることをすべて実行できます。これは修正されるのではなく受け入れられています。allowEvalフラグによってゲートされ、その状態はlol_statusが報告します。
書き込み許可リストは、セキュリティ境界ではなく、ミスに対するガードレールとして扱ってください。
allowEvalがtrueの間はバイパス可能です。 実際の境界にはallowEvalをfalseに設定してください。lol_dom_queryは引き続き動作します。セレクタをコードではなくデータとして注入するためです。
開発
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 はステージごとに1行を出力し、いずれかのステージが失敗すると終了コード1で終了します。CIで実行されることはありません。イベントステージは実際の配信を待ち、3つの結果を報告します:イベントが到着した場合は PASS、タップが接続されたがアイドル状態のクライアントが何も送信しなかった場合は SKIP、タップが接続できなかった場合は FAIL。
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 moduleトラブルシューティング
症状 | 原因 |
| クライアントが閉じているか、デフォルトパス以外にインストールされています。 |
すべてのCDPツールがPenguのヒントとともに失敗する | Pengu Loaderがアクティブでないか、 |
| CDPには到達可能ですが、UXがまだ起動中です。クライアントが表示されたら再試行してください。 |
| 通常はアイドル状態のクライアントであり、障害ではありません。UIをナビゲートして再度ポーリングし、応答の |
書き込みが拒否される | 動詞とパスが許可リストにありません。エラーメッセージには追加すべき正確な行が含まれています。 |
すべてのREST呼び出しでTLSエラー | ベンダーされたCAが間違っているか古いです。PEMを修正してください。検証を無効にしないでください。 |
免責事項
lcu-mcpはRiot Gamesによって承認されておらず、Riot GamesまたはRiot Gamesのプロパティの制作・管理に公式に関与する人物の見解や意見を反映するものではありません。Riot Gamesおよび関連するすべてのプロパティは、Riot Games, Inc.の商標または登録商標です。
このプロジェクトはクライアント自身のローカルAPIを使用します。使用方法は自己責任です。ゲームプレイの自動化はRiotの利用規約に違反する可能性があります。
ライセンス
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