Skip to main content
Glama

lcu-mcp

M8ven Score npm version License: MIT Node CI

An MCP server that exposes a running League of Legends client to any MCP host — the LCU REST API, live WAMP events & recording, client DOM and CDP console, and OpenAPI schema introspection over stdio.

Ask your assistant what queue you are in, watch champ select unfold event by event, inspect the client's DOM, or drive the client itself — without writing a line of glue code.

Contents

Related MCP server: League of Legends MCP Server

How it works

Two independent subsystems run inside one Node process:

  • LcuClient reads the client's lockfile to discover the port and password, then talks REST over HTTPS with Riot's root CA pinned, and holds a WebSocket tap on OnJsonApiEvent that feeds an in-process ring buffer.

  • CdpClient attaches to the client's Chrome DevTools Protocol endpoint (exposed by Pengu Loader) for DOM queries and JavaScript evaluation.

Both connect lazily and survive client restarts — the lockfile port changes on every launch, so the directory is watched rather than the file. Events are polled rather than pushed, because MCP has no server-to-client push.

Requirements

Node.js

>= 24 (ESM, no build step)

League of Legends

Running. The lockfile at C:\Riot Games\League of Legends\lockfile supplies the port and password.

Pengu Loader

Optional — required only for lol_dom_query and lol_eval. Everything else works without it.

Windows only in practice: the default lockfile path and the Pengu integration are Windows-specific.

Installation

Via npx (Recommended, zero install)

Run directly with npx:

npx -y lcu-mcp

From source

git clone https://github.com/Triggered0/lcu-mcp.git
cd lcu-mcp
npm install

Runtime dependencies are exactly three: @modelcontextprotocol/sdk, zod, and ws.

Registering with an MCP host

Claude Code

# Recommended: via npx
claude mcp add lcu --scope user -- npx -y lcu-mcp

# Or from a local clone:
claude mcp add lcu --scope user -- node C:\path\to\lcu-mcp\src\index.js

Any host that reads .mcp.json

{
  "mcpServers": {
    "lcu": {
      "command": "npx",
      "args": ["-y", "lcu-mcp"]
    }
  }
}

Or from a local repository clone:

{
  "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 is optional; without it the server looks for config/allowlist.json relative to its working directory, and falls back to built-in defaults if that file does not exist.

Quick start

Start the League client, then ask your assistant in plain language. A few things that work with no further setup:

Ask

What runs

"Is the LCU connection healthy?"

lol_status

"Who am I logged in as?"

lol_get("/lol-summoner/v1/current-summoner")

"What am I doing in the client right now?"

lol_get("/lol-gameflow/v1/gameflow-phase")

"Which champion is id 157?"

lol_static(kind="champions", ids=[157])

"Watch champ select and tell me what happens."

lol_events_start(["/lol-champ-select/"]), then lol_events_poll

"What does the lobby endpoint accept?"

lol_schema("/lol-lobby/v2/lobby")

"Accept the ready check."

lol_request("POST", "/lol-matchmaking/v1/ready-check/accept") — needs a write allowlist entry

"Screenshot the client."

lol_cdp_screenshot — needs Pengu Loader

"What is my ranked winrate and recent roles?"

lol_analytics_player

"Summarize my last 5 matches concisely."

lol_analytics_match_history(count=5)

"Analyze damage and objectives in my last game."

lol_analytics_match_detail

"What is our team damage mix in champ select?"

lol_analytics_champ_select_scout

"Set my summoner spells to Flash and Ignite."

lol_workflow_spells_set(spell1="flash", spell2="ignite")

"Swap champion with ARAM bench."

lol_workflow_champ_select_bench(champion="AramBenchChamp")

"How much essence do my loot shards yield?"

lol_analytics_loot_summary

Nothing here needs a Riot API key or an internet connection: every call goes to 127.0.0.1.

Tools

Tool

Purpose

lol_status

Per-subsystem health, resolved LCU port, configured CDP port, whether allowEval is on

lol_get(path)

GET any LCU path

lol_request(method, path, body?)

Any verb, subject to the write allowlist

lol_endpoints(filter?)

List the curated endpoint table

lol_static(kind, ids?, query?, fields?, limit?, offset?, refresh?)

Resolve champion/item/perk/spell/map/queue ids to names from the client's local game data

lol_events_start(filters?)

Open the WebSocket tap and begin buffering

lol_events_poll(since?, limit?, filter?)

Drain the ring buffer

lol_events_stop()

Close the tap

lol_dom_query(selector, all?, props?)

Query the client DOM

lol_eval(expression, awaitPromise?)

Evaluate JavaScript in the page

lol_wamp_record_start(uris?, restart?)

Record LCU WAMP traffic on an independent socket

lol_wamp_record_dump(uri?, since?, until?, kinds?, limit?, cursor?)

Dump the recorded timeline and per-URI stats

lol_wamp_record_stop()

Close the recorder socket

lol_cdp_console_start()

Begin buffering client console output

lol_cdp_console_tail(since?, until?, cursor?, limit?, level?, targetId?, text?)

Read buffered console entries

lol_cdp_console_stop()

Stop and discard the console buffer

lol_cdp_network_start()

Begin buffering the HTTP requests the client UI makes

lol_cdp_network_tail(since?, until?, cursor?, limit?, urlContains?, method?, status?, minStatus?, type?, failedOnly?, targetId?)

Read buffered requests

lol_cdp_network_body(requestId)

Fetch one response body from the live renderer

lol_cdp_network_summary(since?, until?, urlContains?, method?)

Aggregate requests by method and url

lol_cdp_network_stop()

Stop and discard the request buffer

lol_logs_tail(target?, lines?, session?, level?, search?)

Tail the most recent lines of a client, UX, or game log

lol_logs_watch_start(target?)

Begin streaming newly appended log lines into a ring buffer

lol_logs_watch_poll(cursor?, limit?, level?, search?)

Poll newly streamed log entries

lol_logs_watch_stop()

Stop and discard the log watcher buffer

lol_logs_sessions(target?, limit?)

List active and historical log files on disk

lol_game_all(format?)

Fetch full real-time live game state from in-match game engine (summary or raw)

lol_game_stats()

Check match status, game clock, mode, and map terrain from the live game engine

lol_game_player(name?)

Fetch real-time stats, abilities, items, and runes for the active or named player

lol_game_events(afterId?)

Retrieve in-game events (kills, objectives, aces) with incremental cursor support

lol_restart_ux(waitForReady?, timeoutSeconds?)

Safely restart client CEF renderers with readiness polling

lol_launch_client(executablePath?, pollIntervalMs?, timeoutSeconds?)

Launch Riot Client / League of Legends client and wait for LCU readiness

lol_cdp_targets()

List all active CDP debugging targets (pages, popups, workers)

lol_cdp_screenshot(targetId?, format?, quality?, savePath?)

Capture client screenshot via CDP (returns MCP image + disk save)

lol_cdp_performance()

CEF performance metrics, JS heap memory usage, DOM node counts, and leak warnings

lol_cdp_dom_tree(includeOverlaysOnly?, maxDepth?)

Inspect UI modal hierarchy, viewport routes, and click-blocking transparent overlays

lol_cdp_storage(storageType?, filter?, limit?, parseJson?)

Inspect localStorage/sessionStorage keys and feature flags with credential redaction

lol_cdp_network_bottlenecks(thresholdMs?, limit?, includeInitiators?)

Identify slow requests, P50/P90/P99 endpoint latencies, and failed assets

lol_forensics_anomaly_detect(windowSeconds?, severityFilter?)

Scan across all streams for crash signatures, HTTP error clusters, and console bursts

lol_forensics_export_har(limit?, savePath?)

Export captured HTTP network traffic to standard HAR 1.2 archive with redaction

lol_schema(path?, method?, model?, refresh?)

Query internal LCU OpenAPI/Swagger v2 schemas and models

lol_forensics_correlate(since?, until?, limit?, sources?, uriPrefix?, levels?, networkFailedOnly?, logLevel?, format?)

Correlate telemetry across all 5 streams (WAMP, CDP console, CDP network, disk logs, live game) on a shared time axis

lol_forensics_bundle(since?, until?, limit?, sources?, includeLogTail?, format?)

Generate an end-to-end diagnostic snapshot combining system status, active timeline streams, and disk log fallbacks

lol_workflow_matchmaking_accept()

Accept matchmaking ready check if active and unaccepted

lol_workflow_champ_select(champion, type?, completed?)

Pick, hover, or ban champion by name or numeric ID in active champion select

lol_workflow_champ_select_bench(champion)

Swap champion with available ARAM bench champion by name or ID

lol_workflow_spells_set(spell1, spell2?)

Set summoner spells (Flash, Ignite, Smite, Teleport, etc.) by name or ID in champion select

lol_workflow_runes_set(primaryStyleId, subStyleId, selectedPerkIds, name?, replace?)

Configure, update, and activate a rune/perk page

lol_workflow_lobby(queueId, startMatchmaking?)

Create game lobby for a queue (e.g. 420 Ranked Solo, 450 ARAM) and optionally start matchmaking

lol_workflow_lobby_invite(toSummonerPuuids)

Invite players to current lobby party by summoner PUUIDs

lol_workflow_play_again()

Recreate game lobby from post-game End of Game screen

lol_workflow_honor(target, honorCategory?)

Vote for teammate on post-game honor ballot ("COOL", "SHOTCALLER", "HEART")

lol_analytics_player(summonerName?, puuid?)

Aggregate player identity, ranked tiers, recent winrates, and role breakdown

lol_analytics_match_history(summonerName?, puuid?, count?)

Token-efficient compact match history rows

lol_analytics_match_detail(gameId?)

Deep post-game breakdown (objectives, damage share, gold, KDA, team stats)

lol_analytics_champ_select_scout()

Champ select composition scout (ally/enemy roles, champions, AP/AD damage mix)

lol_analytics_live_combat()

Real-time live in-game combat telemetry, lane differentials, objective clock

lol_analytics_loot_summary()

Calculate total Blue and Orange Essence yields from champion and skin shards

lol_workflow_loot_disenchant(lootId, count?)

Disenchant champion or skin shards for essence

lol_chat_send(message, conversationId?)

Send chat message into active champion select, lobby, or chat

lol_chat_status(availability?, statusMessage?)

Update summoner presence status message and availability

lol_status first. When anything else fails it tells you which half is down — a closed client looks nothing like a missing Pengu install.

Ids come back raw. Champ select, the gameflow, and match history all speak in numbers — championId: 157, perk: 8008, queueId: 420. lol_static resolves them to Yasuo, Lethal Tempo, and Ranked Solo/Duo from documents the client already serves locally, so no Data Dragon, no API key, and no call leaves 127.0.0.1. It projects to {id, name} and pages at 50 entries by default — items alone is 868 entries and 667 KB raw — so widen it deliberately with fields, limit, and offset.

Events are polled. lol_events_poll returns a cursor; pass it back as since next time. A non-zero dropped means the ring buffer wrapped and that many events were lost after your cursor. Entries with truncated: true had their data clipped at 4 KB — re-fetch the full body with lol_get on the entry's uri.

The client only emits when state changes. Sitting idle on the home screen it can stay silent indefinitely; navigating the UI or entering a lobby produces bursts. An empty poll usually means nothing happened, not that the tap is broken — check running and lol_status to tell the two apart.

Diagnosing a missing event. lol_wamp_record_* runs on its own WAMP socket outside the client renderer, so it proves what the LCU actually emitted and when. Read it together with lol_cdp_console_tail and a lol_eval probe to separate three cases: the LCU never emitted, it emitted but the page never received, or the page received and mishandled. Start both recorders before the thing you want to observe — they only hold what arrived after they started.

Three views, one story. lol_wamp_record_* shows what the LCU pushed, lol_cdp_console_* shows what the page said, and lol_cdp_network_* shows what the page asked for. Each entry names the code that issued the request, so "why did the client call this" has an answer rather than a guess. A 404 arrives as an ordinary response, not a transport failure — reach for minStatus: 400 when you want everything that went wrong, and failedOnly only for connections that never completed. Response bodies are fetched on demand with lol_cdp_network_body, not buffered.

Disk logs for historical and game-engine forensics. lol_logs_tail and lol_logs_sessions inspect LeagueClient.log, LeagueClientUx.log, and GameLogs (r3dlog.txt) directly on disk without requiring an active WebSocket or Pengu debugger. For live monitoring across client actions, lol_logs_watch_start streams newly appended lines from EOF into a dedicated ring buffer. All lines undergo ingest-time credential scrubbing and Riot auth token redaction.

In-match game engine telemetry (lol_game_*). When League enters a live match (loading screen, Summoner's Rift, ARAM, Practice Tool, or TFT), the game engine hosts an internal HTTPS server on 127.0.0.1:2999/liveclientdata. lol_game_all provides a complete, token-efficient projection of match clock, team comparisons, scores, items, and vital stats (or full raw JSON via format: 'raw'). lol_game_events tracks combat and objective kills incrementally using afterId. If no match is currently running, tools report a clear indication rather than connection failures.

Unified multi-stream forensics & diagnostic snapshot (lol_forensics_*). Complex client bugs often span multiple architectural layers — for example, a champion select lock-in failure might involve an LCU REST 400 error, a frontend exception in CEF, an unfulfilled WAMP gameflow state change, and a diagnostic log entry in LeagueClient.log.

  • lol_forensics_correlate merges events chronologically onto a unified time axis from all 5 telemetry streams:

    • wamp: LCU WebSocket events emitted by backend microservices.

    • cdp: Frontend console logs, warnings, errors, and unhandled page exceptions.

    • network: CEF HTTP requests and responses, status codes, round-trip durations, and network dropouts.

    • logs: Live disk log lines streamed from LeagueClient.log or LeagueClientUx.log.

    • game: In-match combat, objective, and gameflow events from the live game engine.

    Supported parameters:

    • sources: Restrict correlation to specific streams (wamp, cdp, network, logs, game).

    • since & until: Timestamp filtering bounds in epoch ms or relative clock ts.

    • limit: Maximum total events returned across streams (default 100, max 1000).

    • uriPrefix: Filter WAMP events by URI prefix (e.g. /lol-champ-select/).

    • levels: Filter CDP console entries by level (['error', 'warning', 'info', 'log', 'debug']).

    • networkFailedOnly: Filter CDP network requests to only failed or aborted connections.

    • logLevel: Filter live disk log entries by log level (e.g. ERROR, WARN, INFO).

    • format: Output format: 'narrative' (default chronological human/LLM-readable log), 'events' (interleaved JSON array), or 'summary' (aggregated event and error metrics).

  • lol_forensics_bundle is a one-stop diagnostic snapshot tool for triaging client issues, generating bug reports, or feeding a comprehensive post-mortem to an LLM:

    • Inspects real-time system status across LCU REST, CEF remote debugging, live game engine, and all 4 background stream watchers.

    • Compiles telemetry metrics and error tallies.

    • Generates the chronological multi-stream timeline narrative.

    • Automatically falls back to reading the last 50 lines of LeagueClient.log from disk when the live log watcher is unstarted or empty (includeLogTail: true), guaranteeing diagnostic context even when recorders were not pre-armed.

    • Sanitizes all lockfile passwords, Riot authentication tokens, and session credentials using deep secret redaction.

    • Supported parameters: since, until, limit (default 200, max 2000), sources (stream filtering), includeLogTail (fallback to disk log tail, default true), and format ('markdown' for a ready-to-paste triage report or 'json' for structured tooling).

  • lol_forensics_anomaly_detect: Scans across all active background streams (wamp, cdp, network, logs) for crash signatures, HTTP 5xx error bursts, and frontend exception spikes, returning an overall health verdict (HEALTHY, DEGRADED, CRITICAL), root-cause hypotheses, and anomaly timestamps. Supports windowSeconds and severityFilter (CRITICAL, DEGRADED, ALL).

  • lol_forensics_export_har: Exports captured HTTP/HTTPS network traffic from the active network tailer into a standard HAR 1.2 archive. Automatically redacts sensitive authorization headers, bearer tokens, and session cookies. Can return the HAR JSON structure directly or save it to disk via savePath.

Deep CEF diagnostics & UI inspection. When diagnosing client frontend lag, memory leaks, unclickable buttons, or client UI state:

  • lol_cdp_performance: Queries CEF DevTools performance metrics. Normalizes JS heap memory (jsHeapUsedMb, jsHeapTotalMb), utilization ratios, DOM node counts, and style recalculation counts, raising warnings when memory pressure thresholds are breached (>250MB heap or >15,000 DOM nodes).

  • lol_cdp_network_bottlenecks: Analyzes buffered network traffic to rank slowest HTTP calls, calculate P50, P90, and P99 latencies per normalized endpoint pattern (e.g. /lol-champ-select/v1/session), group failed asset loads (image 404s, failed script plugins), and correlate initiator script stack traces.

  • lol_cdp_dom_tree: Analyzes the client's live DOM modal stack, visible viewports/plugins (rcp-fe-lol-*), and identifies invisible/transparent full-screen backdrop overlays (opacity: 0 with active pointer events) that frequently cause "frozen UI" states or unclickable buttons.

  • lol_cdp_storage: Inspects client localStorage and sessionStorage in the CEF context. Features case-insensitive substring key/value filtering, structured JSON parsing, and automatic multi-tier redaction of Riot auth tokens, session passwords, and sensitive cookies.

Workflow macro automation (lol_workflow_*). High-level client automation needs multi-step orchestration across REST endpoints, active session discovery, and static data catalogs. Instead of 4–8 separate round-trip tool calls with manual state inspection, each macro inspects its preconditions and then issues the one mutation that follows from them. Rollback is limited to what a call created itself — lol_workflow_lobby closes a lobby it opened if the matchmaking search then fails — and otherwise a macro that fails part-way leaves the client where it got to. Either way the error names the failing call and the state the client is left in.

Macros mutate the client, so every write they send goes through the write allowlist, exactly like lol_request. The shipped config/allowlist.json permits all of them; delete a line to disable the corresponding macro, and the refusal will name the line that would re-enable it.

  • lol_workflow_matchmaking_accept: One-call match acceptance. Verifies that a matchmaking ready check is actively in progress ('InProgress') before posting acceptance. Idempotent if already accepted (playerResponse: 'Accepted'); returns state without throwing when no check is in progress. A closed client is reported as an error, not as "no ready check".

  • lol_workflow_champ_select: Pick, hover, or ban champions in active champion select. Resolves champions by human-friendly name (e.g. "Aatrox", "Yasuo") or numeric ID via local static game data, identifies the local player's active action cell, and executes a hover (completed: false) or lock-in (completed: true, default). An exact name wins; a partial name that matches more than one champion is refused with the candidates listed, because a lock-in cannot be undone. Safely detects if champion select is inactive or if no eligible action is currently pending for the player.

  • lol_workflow_champ_select_bench: Swap active champion with an available champion on the ARAM bench by name or ID. Safely resolves bench champions, checks session state, and swaps without obsolete reroll mechanics.

  • lol_workflow_spells_set: Set summoner spells in active champion select by name (e.g. "flash", "ignite", "smite", "teleport") or numeric ID. Updates spell1 and optionally spell2 simultaneously.

  • lol_workflow_runes_set: Set, replace, and activate rune pages. With replace: true (default) it reuses an editable page whose name matches name and overwrites it; otherwise it creates a new editable page. It never overwrites a page the user named something else. Accepts primary and secondary style IDs along with an array of perk IDs, ensuring the resulting page is immediately activated.

  • lol_workflow_lobby: Create game lobbies and optionally trigger queue search. Sets up custom or matchmade lobbies by queue ID (e.g. 420 for Ranked Solo/Duo, 440 for Ranked Flex, 450 for ARAM). A no-op if the client is already in the requested queue; if it is in a lobby on a different queue, that lobby is replaced. Optionally dispatches matchmaking search (startMatchmaking: true) within the same operation. If that search fails and the call had created the lobby from nothing, the lobby is closed again; if it had replaced an existing lobby, the new one is kept, because the old party cannot be restored and no lobby at all is the worse outcome.

  • lol_workflow_lobby_invite: Dispatch invitations to summoner PUUIDs to join the current party lobby.

  • lol_workflow_play_again: Recreate previous game lobby from the End of Game or post-match screen with party settings preserved.

  • lol_workflow_honor: Submit an honor vote for an eligible teammate on the post-game honor ballot by name or summonerId with badge category ("COOL", "SHOTCALLER", "HEART").

Player & Match Analytics (lol_analytics_*). Read-only, token-efficient performance scouting and post-match telemetry:

  • lol_analytics_player: Aggregates summoner identity, ranked tiers and LP (Solo/Duo, Flex, Arena), win rates, and recent match role tendencies in a single compact JSON summary.

  • lol_analytics_match_history: Returns compact, token-efficient match rows (champion name, outcome, KDA, CS, duration, queue, timestamp) without bloating host LLM context windows.

  • lol_analytics_match_detail: Deep post-game breakdown analyzing baron/dragon/herald/tower objectives, individual damage shares, gold earned, and combat metrics for any historical match.

  • lol_analytics_champ_select_scout: Evaluates active champion select draft composition, assessing allied and enemy champion picks, assigned roles, bans, and team magic vs. physical (AP vs. AD) damage distribution.

  • lol_analytics_live_combat: Connects to the in-match game engine (127.0.0.1:2999) to calculate real-time combat telemetry: current gold and CS differentials vs lane opponents, team gold leads, KDA pacing, and live match clock.

Loot Economy & Crafting (lol_analytics_loot_summary, lol_workflow_loot_disenchant).

  • lol_analytics_loot_summary: Scans player inventory and tallies Blue Essence yield from champion shards and Orange Essence yield from skin, ward, and emote shards.

  • lol_workflow_loot_disenchant: Disenchants a specified number of shards for a given loot ID via the client crafting recipe endpoint. Subject to write allowlist.

In-Client Chat & Status (lol_chat_*).

  • lol_chat_send: Dispatches chat messages directly into active champion select, lobby, or custom conversation channels without requiring manual conversation discovery.

  • lol_chat_status: Updates player chat availability (chat, away, dnd, mobile) and custom status message strings visible to friends.

Filters are URI prefixes applied at ingest. The unfiltered firehose fills the buffer quickly, so pass something like ["/lol-champ-select/", "/lol-gameflow/"] unless you genuinely want everything.

Configuration

config/allowlist.json:

{
  "allowEval": true,
  "cdpPort": 8888,
  "eventBufferSize": 1000,
  "writeAllowlist": [
    "POST /lol-matchmaking/v1/ready-check/accept",
    "PATCH /lol-champ-select/v1/session/actions/*"
  ]
}

The shipped file also carries the remaining lines the lol_workflow_* macros need — POST /lol-lobby/v2/lobby, POST /lol-lobby/v2/lobby/matchmaking/search, POST /lol-perks/v1/pages and PUT /lol-perks/v1/pages/* — plus DELETE /lol-lobby/v2/lobby, which lol_workflow_lobby uses only to close a lobby it just opened. Drop that line and the macro still works; it simply reports the lobby it could not clean up.

Key

Default

Meaning

allowEval

true

Whether lol_eval may run JavaScript in the page

cdpPort

8888

Pengu Loader's remote debugging port

eventBufferSize

1000

Ring buffer capacity; oldest entries are evicted first

writeAllowlist

[]

Which mutating requests lol_request and the lol_workflow_* macros may send

wampRecordBufferSize

20000

Recorder timeline entry count

wampRecordMaxBytes

67108864

Recorder byte budget; evicts on whichever fills first

wampRecordPayloadCap

512

Per-payload truncation for the recorder

wampRecordFullPayloadUris

["/lol-gameflow/v1/gameflow-phase"]

URI prefixes exempt from the payload cap

wampRecordFile

null

Optional NDJSON path the timeline is appended to

cdpConsoleBufferSize

5000

Console tailer entry count

cdpNetworkBufferSize

5000

Network tailer entry count; about 50 minutes at the client's measured request rate

logWatchBufferSize

5000

Disk log watcher ring buffer capacity

logsDir

null

Optional custom logs directory override (defaults to auto-detected Logs/)

liveGamePort

2999

Live Client Data API port hosted by the League of Legends game engine

Allowlist matching rules:

  • An entry is METHOD path. The method is compared case-insensitively, the path case-sensitively.

  • GET and HEAD are always allowed and need no entry.

  • * matches a single path segment without crossing /: /a/b/* matches /a/b/c (e.g. PATCH /lol-champ-select/v1/session/actions/*), and infix /a/*/c matches /a/b/c (e.g. POST /lol-loot/v1/recipes/*/craft and POST /lol-chat/v1/conversations/*/messages), but does not match across multiple / delimiters.

  • A refused call returns the exact config line that would permit it, and the request is never sent.

Enabling DOM access

lol_dom_query and lol_eval need the client's CEF remote debugging port, which Riot's build only opens through Pengu Loader — an externally added --remote-debugging-port flag is ignored.

Pengu's config is plain key=value text, one pair per line — not JSON, not INI. In C:\Program Files\Pengu Loader\config, set:

RemoteDebuggingPort=8888

Then restart the client UX so CEF picks the port up:

POST /riotclient/kill-and-restart-ux

This leaves a live game untouched. Until it happens, both tools fail with these exact instructions rather than a bare ECONNREFUSED.

Security

  • TLS verification stays on. The LCU's self-signed certificate is validated against Riot's root CA, vendored at certs/riotgames.pem. The server never sets rejectUnauthorized: false.

  • The password never leaves the process. It is held only to build the Authorization header — no tool returns it, nothing logs it, and error text is scrubbed of it before it reaches the host. CDP target URLs embed it too, so they are redacted before any tool returns them.

  • lol_eval bypasses the write allowlist by construction. The client page can fetch any LCU endpoint from its own origin, so evaluated JavaScript can do anything the client can. This is accepted, not fixed: it is gated by the allowEval flag, whose state lol_status reports.

Treat the write allowlist as a guardrail against mistakes, not as a security boundary — while allowEval is true it can be bypassed. Set allowEval to false for a real boundary. lol_dom_query keeps working, because it injects the selector as data rather than as code.

Development

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 stdio

npm run smoke prints one line per stage and exits 1 if any stage fails. It is never run in CI. The event stage waits for real delivery and reports three outcomes: PASS when events arrived, SKIP when the tap connected but an idle client sent nothing, and FAIL when the tap could not connect.

bin/lcu-mcp.js      # npx entry point
certs/              # Riot's root CA, pinned for TLS verification
config/             # default allowlist.json
scripts/            # lint.mjs (syntax gate) and smoke.mjs (live check)
src/
  index.js          # stdio transport, context wiring, tool registration
  config.js         # config loading and validation
  allowlist.js      # pure write-allowlist matching
  redact.js         # strip passwords from URLs and strings
  backoff.js        # shared reconnect schedule
  clock.js          # injectable time source, so tests never sleep
  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
    recorder.js     # independent WAMP socket for forensic recording
    ndjson.js       # append recorded frames to disk
    timeline.js     # query, filter, and page a recorded timeline
    schema.js       # fetch and dereference the OpenAPI document
    static.js       # lazy per-kind cache over the local game data documents
  cdp/
    discover.js     # probe the debugging port, pick and redact the target
    client.js       # attach, evaluate, DOM query
    console.js      # buffered console tailer on its own socket
    network.js      # buffered HTTP request tailer on its own socket
  logs/
    parser.js       # parse log lines and redact credentials/tokens
    sessions.js     # locate League log folders and active/past sessions
    reader.js       # backward chunk reader from EOF
    watcher.js      # live tailing and timeline buffering
  game/
    client.js       # HTTPS client to in-match engine on port 2999
    summary.js      # token-efficient projection of allgamedata
  forensics/
    correlate.js    # merge all 5 telemetry streams onto a unified time axis
    bundle.js       # one-stop diagnostic snapshot across all subsystems
  workflow/
    matchmaking.js  # ready check accept and status inspection
    champ_select.js # champion resolution, action detection, lock-in/hover
    runes.js        # rune page mutation, creation, and activation
    lobby.js        # lobby creation and queue search dispatch
  tools/            # one module per tool group
tests/              # one test file per source module

Contributing

Pull requests are welcome. The house rules are short: write the test first, keep the runtime dependency list at three, and never let a password reach a buffer, a log, or a tool return. npm run lint && npm test must be clean before you open the PR — see CONTRIBUTING.md for the full workflow.

Found a security issue? Please do not open a public issue — use private vulnerability reporting instead, as described in SECURITY.md.

Troubleshooting

Symptom

Cause

League client is not running: no lockfile at ...

The client is closed, or installed somewhere other than the default path.

Every CDP tool fails with a Pengu hint

Pengu Loader is not active, or RemoteDebuggingPort is unset. Follow Enabling DOM access.

no "page" target

CDP is reachable but the UX is still starting. Retry once the client is visible.

lol_events_poll returns nothing

Usually an idle client, not a fault. Navigate the UI and poll again; check running in the response.

A write is refused

The verb and path are not on the allowlist. The error message contains the exact line to add.

TLS errors on every REST call

The vendored CA is wrong or stale. Fix the PEM — never disable verification.

Privacy

lcu-mcp runs locally, talks only to 127.0.0.1, and collects nothing. What it reads from the client flows to the MCP host you connected — see PRIVACY.md.

Disclaimer

lcu-mcp is not endorsed by Riot Games and does not reflect the views or opinions of Riot Games or anyone officially involved in producing or managing Riot Games properties. Riot Games and all associated properties are trademarks or registered trademarks of Riot Games, Inc.

This project uses the client's own local API. You are responsible for how you use it; automating gameplay may violate Riot's Terms of Service.

License

MIT © Triggered

Available Tools

61 tools
lol_analytics_champ_select_scoutScout champion select composition and damage mixA
Read-onlyIdempotent

Scouts active allied team draft in champion select, evaluating physical vs magic damage distribution and detecting composition gaps (e.g. missing frontline, full AD/AP vulnerability). Use this tool during champion select draft to advise on optimal pick choices or role balance before locking in. For locking in, hovering, or banning champions, use lol_workflow_champ_select instead. For setting runes or summoner spells, use lol_workflow_runes_set or lol_workflow_spells_set. Behavior: Safe and read-only; returns cleanly with inChampSelect: false if champion select is inactive. Returns allied draft breakdown and composition warnings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is partly covered. The description adds useful behavioral context beyond them: it returns cleanly with inChampSelect: false when no draft is active, so the agent knows a null-ish result is normal rather than an error. It stops short of describing rate limits or latency, keeping it at 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core capability, then routes to siblings, then states behavior and returns. Every sentence earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema, and coverage of the safety profile already in annotations, the description supplies the remaining essentials: the analysis performed, the inactive-draft edge case, and the shape of the return (draft breakdown plus composition warnings). Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description appropriately focuses on behavior and output rather than inventing parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (scouts) and resource (active allied team draft in champion select) plus the concrete analysis it performs: physical vs magic damage distribution and composition gaps. An agent can distinguish it from sibling workflow tools without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes usage to the champion select draft phase and names the alternatives for adjacent actions: lol_workflow_champ_select for locking/hovering/banning and lol_workflow_runes_set / lol_workflow_spells_set for runes and spells. When-to-use and when-not-to-use are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_analytics_live_combatAnalyze live combat state and lane differentialsA
Read-onlyIdempotent

Extracts real-time combat status, lane gold/level comparisons, match clock, and team score differentials from the in-match Live Game Engine on port 2999. Use this tool during active live games to assess map state, score leads, or lane advantages. For raw live game data or item builds, use lol_game_all or lol_game_player instead. For post-game analysis, use lol_analytics_match_detail. Behavior: Safe and read-only; connects directly to local game client without external network calls. Returns inGame: false if no match is currently running.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, but the description adds real behavioral context beyond them: the data source (local Live Game Engine on port 2999), the absence of external network calls, and the edge-case return of inGame: false when no match is running. It stops short of rate limits or failure modes, but the added source and no-match semantics are genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with what is extracted, then usage, then alternatives, then behavior. Every sentence carries distinct information with no filler, though the routing and behavior clauses could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool with no output schema, the description covers source, usage, alternatives, safety, and the no-match edge case. It could go further in sketching the returned shape, but it is complete enough to call correctly and interpret the inGame: false case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to document and the baseline is 4. The description correctly avoids inventing parameters and instead describes the data categories the call returns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Extracts') and enumerates the exact resource: real-time combat status, lane gold/level comparisons, match clock, and team score differentials. It names the source ('Live Game Engine on port 2999') and distinguishes itself from siblings lol_game_all, lol_game_player, and lol_analytics_match_detail, so an agent can select it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the usage context explicitly ('during active live games to assess map state, score leads, or lane advantages') and routes to named alternatives with the conditions that select them: raw data/item builds go to lol_game_all or lol_game_player, post-game analysis goes to lol_analytics_match_detail. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_analytics_loot_summaryAnalyze loot inventory and essence valuesA
Read-onlyIdempotent

Calculates total potential Blue Essence (from champion shards) and Orange Essence (from skin shards) along with shard breakdown in player inventory. Use this tool when evaluating available crafting materials, essence totals, or preparing to disenchant duplicate shards. For executing disenchant recipes, use lol_workflow_loot_disenchant. For general store and catalog purchases, use lol_request. Behavior: Safe and read-only; queries local player loot inventory without modifying items. Returns essence summaries and shard lists.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and idempotentHint=true, so the safety profile is covered; the description partly repeats this ('Safe and read-only ... without modifying items') but adds the local-inventory scope and, with no output schema, tells the agent it returns essence summaries and shard lists. Useful, though the safety restatement is redundant against the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then usage, alternatives, behavior, and returns in labelled sentences. Mostly tight, but the 'Safe and read-only ... without modifying items' clause spends words re-stating annotation hints, which slightly dilutes it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no input parameters and no output schema, the description must carry the return story itself, and it does ('Returns essence summaries and shard lists'), while also covering purpose, routing alternatives, and behavioral posture. Nothing an agent needs to invoke it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly says nothing about inputs, matching the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Calculates total potential Blue Essence (from champion shards) and Orange Essence (from skin shards) along with shard breakdown in player inventory.' It names the disenchant and generic-request siblings as distinct tools, so an agent can separate it from adjacent loot tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('evaluating available crafting materials, essence totals, or preparing to disenchant duplicate shards') and names two alternatives with their selecting conditions: lol_workflow_loot_disenchant for executing recipes and lol_request for store/catalog purchases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_analytics_match_detailDeep post-match breakdown and objective analyticsA
Read-onlyIdempotent

Calculates advanced post-game metrics including player damage share %, gold efficiency, kill participation (KP %), vision score, and team objective counts (dragons, barons, towers). Use this tool when analyzing the decisive factors, individual carrying performance, or throws of a specific completed match. For viewing multiple recent matches in brief, use lol_analytics_match_history instead. For live in-progress matches, use lol_analytics_live_combat. Behavior: Safe and read-only; automatically defaults to the most recent match if gameId is omitted. Returns structured objective and player breakdowns.

ParametersJSON Schema
NameRequiredDescriptionDefault
gameIdNoGame ID to analyze. When omitted, automatically inspects the most recently completed match.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only, idempotent profile, so the description's marginal contribution is the auto-default to the most recent match when gameId is omitted and the shape of the return ('structured objective and player breakdowns'). That is genuinely useful context beyond the annotations, though it stops short of noting cost/latency or data-availability edge cases (e.g., what happens with an invalid gameId).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the payload of computed metrics, then routing, then behavior – a sensible order. The closing 'Returns structured objective and player breakdowns' slightly restates the opening enumeration, which keeps it from a perfect score, but the text is otherwise dense and waste-free.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param analytics tool with no output schema, the description covers what is computed, when to reach for it, the sibling alternatives, the default behavior, and the general return shape. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single gameId parameter, and the schema itself already documents the most-recent-match fallback, so the description's restatement adds nothing new. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Calculates advanced post-game metrics') with a concrete enumerated resource (damage share %, gold efficiency, KP %, vision score, objective counts). An agent can distinguish it from lol_analytics_match_history and lol_analytics_live_combat purely from the opening sentence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the when-to-use case ('analyzing the decisive factors, individual carrying performance, or throws of a specific completed match') and names both alternatives with the condition that selects them (match_history for brief multi-match views, live_combat for in-progress matches). This is textbook routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_analytics_match_historyFetch compact recent match history listA
Read-onlyIdempotent

Retrieves a token-efficient, compact list of recent match history games for a summoner with resolved champion names, KDA, win/loss, duration, and queue IDs. Use this tool when you need an overview of recent games without filling the context window with raw JSON data. For high-level ranked stats and winrates, use lol_analytics_player instead. For a deep analytical dive into a single game's damage and objectives, use lol_analytics_match_detail. Behavior: Safe and read-only; queries local client match history and static champion data. Returns an array of concise match objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of matches to retrieve (1 to 20, default 10).
puuidNoTarget player PUUID. When omitted, fetches current summoner history.
queueIdNoOptional queue filter ID (e.g. 420 for Ranked Solo, 450 for ARAM).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description still adds value by disclosing the data sources ('local client match history and static champion data') and the return shape ('array of concise match objects'), though it omits pagination or freshness details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all front-loaded with the core purpose first, then alternatives, then behavior. Slightly longer than strictly necessary but every sentence carries routing or behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the returned fields (champion names, KDA, win/loss, duration, queue IDs) and the container type, and it covers sourcing and read-only behavior — enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, puuid, and queueId are already fully documented with defaults and examples. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieves a token-efficient, compact list of recent match history games for a summoner') and enumerates the returned fields, letting an agent distinguish it from siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the when ('need an overview of recent games without filling the context window') and routes to alternatives by condition: lol_analytics_player for ranked stats/winrates, lol_analytics_match_detail for single-game deep dives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_analytics_playerAnalyze summoner ranked and match history performanceA
Read-onlyIdempotent

Evaluates comprehensive summoner profile analytics including ranked tiers, LP, winrate %, average KDA, CS per minute, and primary champion pool. Use this tool when assessing a player's skill level, ranked progression, or preferred champions before or after matches. For viewing individual recent matches in a compact list, use lol_analytics_match_history instead. For in-depth post-match breakdown, use lol_analytics_match_detail. Behavior: Safe and read-only; queries local client cache and REST endpoints without modifying game state. Returns structured performance metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
puuidNoTarget player PUUID. When omitted, evaluates currently logged-in summoner.
matchCountNoNumber of recent matches to evaluate (1 to 20, default 10).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds useful context by stating that it queries local client cache and REST endpoints and returns structured performance metrics, though it does not detail pagination or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the tool's purpose, followed immediately by usage guidance and alternative routing. Every sentence contributes either purpose, routing, or behavioral context, with no wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although no output schema exists, the description lists the concrete metrics returned and gives sufficient usage and behavioral context. With annotations covering safety and schema covering parameters, an agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (puuid and matchCount) are fully documented in the input schema. The description adds no parameter-specific syntax, defaults, or constraints beyond what the schema already provides, making baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

State a specific verb (Evaluates) and resource (summoner profile analytics) and names the exact metrics returned: ranked tiers, LP, winrate, average KDA, CS per minute, and primary champion pool. It distinguishes itself from lol_analytics_match_history and lol_analytics_match_detail explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases (assessing skill level, ranked progression, preferred champions before or after matches) and names two alternatives with the conditions that select them. An agent can route correctly without opening sibling schemas.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_console_startStart tailing the client consoleA
Idempotent

Attach to the League Client renderer via Chrome DevTools Protocol (CDP) and begin streaming console logs, warnings, and uncaught exceptions into an in-memory buffer. Use this tool before executing UI actions or testing plugins to capture runtime frontend diagnostics. To retrieve buffered entries, call lol_cdp_console_tail. To stop capturing and release memory, call lol_cdp_console_stop. For client log files on disk, use lol_logs_tail instead. Behavior: Non-destructive; automatically survives renderer page reloads with continuity. Prerequisite: Active CDP connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: logs are buffered in memory, capture survives renderer page reloads with continuity, and an active CDP connection is required. It also clarifies that stopping releases memory, which aligns with the non-destructive annotation. The annotations already cover safety and idempotency, so this is strong supplemental context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then layers usage, alternatives, behavior, and prerequisite in clearly separated sentences. Every sentence adds useful decision-making information without repetition. The length is appropriate for a tool with several sibling alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description explains what is captured, where it goes, how to retrieve it, and how to stop it. It also covers the prerequisite and reload-survival behavior, which are important for correct invocation. Nothing essential is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no input parameters, so there are no parameter semantics to document. This matches the baseline score of 4 for a zero-parameter tool, with no schema gap to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: attach to the League Client renderer via CDP and start streaming console logs, warnings, and uncaught exceptions. It distinguishes itself from siblings by naming retrieval, stopping, and disk-log alternatives. An agent can identify this as the console-capture start tool without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says exactly when to use the tool: before executing UI actions or testing plugins to capture frontend diagnostics. It also routes to alternatives for retrieving data (lol_cdp_console_tail), stopping capture (lol_cdp_console_stop), and reading disk logs (lol_logs_tail). This provides explicit when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_console_stopStop tailing the client consoleA
DestructiveIdempotent

Detach from the League Client renderer and terminate the console log buffering session. Use this tool when console log capture is complete to release memory and close the CDP socket. For stopping network request capture, use lol_cdp_network_stop instead. Behavior: Discards any remaining unread entries from the in-memory buffer. Idempotent; safe to call when already stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds the critical consequence that remaining unread entries in the in-memory buffer are discarded. It also explains that stopping releases memory and closes the CDP socket, which is meaningful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four compact sentences, front-loaded with purpose, then usage, alternative, and behavioral consequence. Every sentence adds actionable information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, zero parameters, and rich annotations, the description supplies what an agent needs: when to call it, what gets discarded, and the sibling alternative. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description does not need to document any inputs, and there is no schema coverage gap to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: detach from the League Client renderer and terminate the console log buffering session. It explicitly distinguishes itself from the sibling lol_cdp_network_stop, so an agent can tell what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit timing for use: when console log capture is complete, to release memory and close the CDP socket. It also names the correct alternative for stopping network request capture, lol_cdp_network_stop instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_console_tailRead buffered client console outputA
Read-onlyIdempotent

Retrieve buffered console logs, warnings, and runtime JavaScript exceptions recorded since the tailer was started or past a given cursor. Use this tool to inspect frontend errors, check component mounting logs, or debug UI scripts. Prerequisite: Must call lol_cdp_console_start first; fails if tailer is not running. For HTTP request traffic, use lol_cdp_network_tail instead. Behavior: Sequential integer cursors ensure gap-free incremental reading without skipping entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoCase-insensitive substring filter matching log message text
levelNoFilter by console severity level, e.g. "error", "warning", "info", or "log"
limitNoMaximum number of entries to return (1-2000, default: 100)
sinceNoLower timestamp bound in epoch milliseconds; excludes older entries
untilNoUpper timestamp bound in epoch milliseconds; excludes newer entries
cursorNoSequence cursor from a previous tail call for incremental polling
targetIdNoFilter entries to a specific CDP renderer target ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world. Beyond that, the description discloses the failure mode (errors when tailer isn't running), the prerequisite chain, and gap-free cursor polling semantics - behavioral context not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by use cases, prerequisite, alternative, and cursor behavior - each sentence earns its place with no filler. Slightly dense but well ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param read tool with no output schema, the description covers what is returned (logs, warnings, exceptions), the prerequisite, and incremental polling semantics. Return-shape specifics (fields per entry) remain implicit, but annotations carry the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 7 parameters including cursor. The description only adds the conceptual framing of cursors as sequential gap-free markers, without syntax or format detail beyond what the schema provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (retrieve buffered console logs, warnings, JS exceptions) with scope boundaries (since tailer started or past a cursor). It explicitly carves out the sibling lol_cdp_network_tail for HTTP traffic, so an agent can distinguish them without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names concrete use cases (inspect frontend errors, check mounting logs, debug UI scripts), states a hard prerequisite (must call lol_cdp_console_start first; fails if tailer not running), and routes HTTP traffic to an alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_dom_treeAnalyze UI modal stack, invisible backdrops, and viewport hierarchyA
Read-onlyIdempotent

Inspects the League client Chromium Embedded Framework (CEF) DOM hierarchy, active modal stack, invisible blocking backdrops, and current viewport plugin route. Identifies open dialogs (.modal-container, lol-uikit-dialog-frame, [class*="modal"]), unclosed transparent overlays blocking user clicks (frozen UI bug), active rcp-fe-lol-* plugins, and the focused element. Use this tool to diagnose unclickable UI buttons, stuck modals, or verify client screen state. Prerequisite: Requires Chrome DevTools Protocol (CDP) enabled via Pengu Loader; check lol_status if connection fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxDepthNoMaximum depth of DOM hierarchy tree traversal (default: 5)
includeOverlaysOnlyNoIf true, returns only active modals, invisible backdrops, and viewport info, omitting the general DOM hierarchy tree (default: false)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds meaningful context beyond that: the CDP-via-Pengu-Loader prerequisite and the fallback to lol_status on connection failure, which an agent needs before invoking. No return-shape or cost details, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what is inspected, then what is identified, then usage and prerequisite, with no filler sentences. Dense but every clause maps to a real behavior; slightly long selector list is the only mild drag.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema the description must carry the return content, and it does by enumerating what gets reported (dialogs, blocking overlays, active plugins, focused element). Prerequisite and failure handling are covered; it stops short of describing the shape of the DOM tree output or size limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both maxDepth and includeOverlaysOnly are fully documented in the schema; the baseline is 3. The description hints at the overlays-only mode ('returns only active modals, invisible backdrops and viewport info') but does not add depth or format semantics beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (inspects) and resource (CEF DOM hierarchy, modal stack, overlays, viewport route), and enumerates the exact signals it looks for (.modal-container, lol-uikit-dialog-frame, transparent overlays, rcp-fe-lol-* plugins, focused element). An agent can distinguish it from lol_dom_query or lol_eval from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear trigger conditions ('diagnose unclickable UI buttons, stuck modals, or verify client screen state') plus a prerequisite and a recovery path ('check lol_status if connection fails'). It does not name an explicit alternative such as lol_dom_query, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_network_bodyRead one response bodyA
Read-onlyIdempotent

Fetch the raw response body payload for a specific captured network request ID from the live renderer. Use this tool after lol_cdp_network_tail to examine the raw payload or JSON response of an interesting request. For high-level request metadata or status codes without bodies, lol_cdp_network_tail suffices. Behavior: Reaches live renderer cache. Prerequisite: Request must have been captured in the current renderer session; fails if evicted or client reloaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdYesUnique request identifier returned in a lol_cdp_network_tail entry

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds genuine context beyond them: it reaches the live renderer cache, requires the request to have been captured in the current session, and fails if the entry was evicted or the client reloaded. It does not mention payload size limits or binary/truncation handling, which matter for a body-fetching tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, front-loaded with purpose and routing guidance before the behavioral caveats. Structurally clean with no filler, though the 'Behavior:'/'Prerequisite:' labels add slight verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only one parameter, the description briefly characterizes the return as a raw response body payload and covers session-lifetime constraints. It stops short of describing what an agent gets for large/binary bodies or whether the payload is truncated, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single requestId parameter is already documented as 'Unique request identifier returned in a lol_cdp_network_tail entry.' The description restates this indirectly but adds no syntax, format, or lookup guidance beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fetch the raw response body for a specific captured request ID from the live renderer. It explicitly contrasts with the sibling lol_cdp_network_tail, so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing advice ('use this tool after lol_cdp_network_tail') plus a clear when-not condition ('for high-level request metadata or status codes without bodies, lol_cdp_network_tail suffices'). The alternative and the condition that selects it are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_network_bottlenecksAnalyze network latency bottlenecks and failed asset loadsA
Read-onlyIdempotent

Analyzes captured HTTP network requests to identify latency bottlenecks, slow endpoint patterns, and failed asset loads. Calculates P50, P90, and P99 latencies per normalized endpoint, extracts slowest requests exceeding a threshold duration with initiator stack traces, and groups HTTP 4xx/5xx or transport errors. Use this tool to diagnose frontend lag, sluggish LCU REST endpoints, or broken plugin scripts and missing icons. Prerequisite: Network recording must be active; call lol_cdp_network_start first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of slowest requests to return (default: 20)
thresholdMsNoMinimum duration in milliseconds for a request to be considered slow (default: 200)
includeInitiatorsNoWhether to include script initiator stack traces (default: true)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds meaningful behavior beyond that: the prerequisite that recording must be active, the computed statistics, and the initiator-trace extraction. It doesn't describe the response shape or how endpoints are normalized, but adds real context over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then outputs, then use cases, then prerequisite. Every sentence carries information, though the dense enumeration of computed statistics is on the longer side for a three-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates what the tool produces (percentile latencies, slowest requests, error groups) and states the prerequisite. It is nearly complete for calling correctly; only the exact return structure and endpoint-normalization rules are left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters (limit, thresholdMs, includeInitiators) fully documented in the schema. The description only loosely gestures at the threshold concept via 'exceeding a threshold duration', adding little beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (analyzes) and resource (captured HTTP network requests) and enumerates concrete outputs: P50/P90/P99 latencies per normalized endpoint, slowest requests with initiator stacks, and grouped 4xx/5xx/transport errors. This differentiates it from the plain sibling lol_cdp_network_summary without needing to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage scenarios (diagnose frontend lag, sluggish LCU REST endpoints, broken plugin scripts, missing icons) and an explicit prerequisite: network recording must be active, call lol_cdp_network_start first. It stops short of naming a specific alternative or stating when-not-to-use it, so it's clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_network_startStart recording client HTTP requestsA
Idempotent

Attach to the League Client renderer via Chrome DevTools Protocol (CDP) and begin capturing outgoing and incoming HTTP/HTTPS network requests into an in-memory buffer. Use this tool to monitor REST traffic, measure endpoint latency, or debug failed API calls made by the client UI. To inspect captured requests, call lol_cdp_network_tail or lol_cdp_network_summary. To read response payload bodies, use lol_cdp_network_body with a request ID. For WebSocket events, use lol_events_* or lol_wamp_record_* instead. Behavior: Captures request metadata, headers, status codes, and timing. Prerequisite: Active CDP connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true), so the bar is lower, and the description still adds useful context: what is captured (metadata, headers, status codes, timing) and the prerequisite of an active CDP connection. It doesn't say what happens to a previously captured buffer on re-invocation, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then layers usage, routing, behavior, and prerequisite in clearly ordered sentences. It is on the longer side and the 'Behavior'/'Prerequisite' labels are slightly verbose, but no sentence is wasted given the routing value it provides.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool with annotations present, the description covers purpose, capture scope, prerequisite, and follow-up tools. The one omission is how recording terminates (lol_cdp_network_stop exists as a sibling but is not referenced), leaving the lifecycle slightly incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters and empty input schema, so per the rubric the baseline is 4. There is no parameter surface for the description to clarify or obscure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (attach via CDP and begin capturing outgoing/incoming HTTP/HTTPS requests) plus the storage destination (in-memory buffer). It is clearly distinguishable from siblings like lol_cdp_network_tail, summary, or body, which are named as downstream consumers rather than competitors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (monitor REST traffic, measure endpoint latency, debug failed API calls) and routes to alternatives for other needs: tail/summary for inspection, body for payloads, lol_events_*/lol_wamp_record_* for WebSocket events. This is explicit when-to-use plus when-not-to-use coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_network_stopStop recording client HTTP requestsA
DestructiveIdempotent

Detach from the League Client renderer and terminate the network traffic recording session. Use this tool when network analysis is complete to release memory and close the CDP monitoring session. Behavior: Discards in-memory network buffers. Idempotent; safe to call when already stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavior beyond the annotations by naming what is lost ('Discards in-memory network buffers') and confirming safety when already stopped. The idempotency claim duplicates idempotentHint and destructiveHint already signals mutation, but the buffer-discard detail is genuinely useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the action front-loaded, followed by when-to-use and behavior. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema and annotations covering the safety profile, the description gives the agent enough to call it correctly. The one missing piece is a warning that captured data must be retrieved (via tail/body/export) before calling this, since buffers are discarded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to clarify beyond what the empty schema shows. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'terminate the network traffic recording session' and 'Detach from the League Client renderer'. This is clearly distinguishable from the sibling start/tail/body tools in the cdp_network family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gates use on completion: 'Use this tool when network analysis is complete to release memory and close the CDP monitoring session.' No exclusions or sibling alternatives are named, so it stops short of a 5 — notably it never tells the agent to export or tail captured data before stopping, even though the buffers are discarded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_network_summarySummarise buffered client HTTP requestsA
Read-onlyIdempotent

Aggregate and summarize captured HTTP requests by method and endpoint URL pattern with status breakdown, total byte volume, and median duration. Use this tool to analyze high-volume client polling traffic, discover top endpoints, or spot systemic failure rates over time without reading raw request logs. For individual request inspection with timestamps, use lol_cdp_network_tail instead. Behavior: Safe and read-only; summarizes in-memory buffer without consuming or altering stream cursors.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoLower timestamp bound in epoch milliseconds; excludes older requests
untilNoUpper timestamp bound in epoch milliseconds; excludes newer requests
methodNoHTTP method filter matching verbs case-insensitively, e.g. "GET" or "POST"
urlContainsNoCase-insensitive substring filter matching request URLs

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds non-obvious value beyond them: it summarizes an in-memory buffer and does not consume or alter stream cursors, which matters given the sibling stream/polling tools. It stops short of describing buffer limits or how long data is retained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then usage/routing, then behavior. Every sentence carries distinct load and none repeats the structured fields verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating what the summary returns (status breakdown, total byte volume, median duration). Combined with the read-only/non-consuming behavior note and explicit sibling routing, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents since/until/method/urlContains in detail. The description mentions the filtering concepts in prose but adds no syntax, format, or default behavior beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Aggregate and summarize captured HTTP requests') plus the exact aggregation dimensions (method, endpoint URL pattern, status breakdown, bytes, median duration). It also distinguishes itself from lol_cdp_network_tail by scope, so an agent can separate the two without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the use cases (high-volume polling traffic, top endpoints, systemic failure rates) and names the alternative tool (lol_cdp_network_tail) with the condition that selects it (individual request inspection with timestamps). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_network_tailRead buffered client HTTP requestsA
Read-onlyIdempotent

Retrieve captured HTTP network requests from the in-memory buffer, filtered by status, URL pattern, or HTTP method. Use this tool to inspect recent client network calls and identify 4xx/5xx errors or hung requests. Prerequisite: Must call lol_cdp_network_start first; fails if network recording is not running. To fetch full response bodies, pass returned request IDs to lol_cdp_network_body. For aggregated traffic statistics, use lol_cdp_network_summary instead. Behavior: Returns completed requests and active in-flight requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoCDP resource type filter, e.g. "Fetch", "XHR", "Document", or "Script"
limitNoMaximum entries to return (1-2000, default: 100)
sinceNoLower timestamp bound in epoch milliseconds; excludes older requests
untilNoUpper timestamp bound in epoch milliseconds; excludes newer requests
cursorNoSequence cursor from a previous tail call for incremental reading
methodNoHTTP method filter matching verbs case-insensitively, e.g. "GET" or "POST"
statusNoExact HTTP response status code to match, e.g. 404 or 500
targetIdNoFilter requests to a specific CDP renderer target ID
minStatusNoMinimum HTTP status code threshold; pass 400 to find all client and server errors
failedOnlyNoIf true, filters strictly for low-level transport/network failures (excludes HTTP 4xx/5xx)
urlContainsNoCase-insensitive substring filter matching request URLs, e.g. "/lol-champ-select/"

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safe-read profile, but the description adds real behavioral context: the precondition that recording must be running, and that returns include both completed and active in-flight requests. This goes beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then purpose, prerequisite, and alternatives in a logical order. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description responsibly states what is returned (completed plus in-flight requests), covers the prerequisite that gates successful invocation, and routes to sibling tools for bodies and aggregate stats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all 11 parameters are already documented, including filters like status, urlContains, minStatus, and cursor. The description only restates the filter dimensions (status, URL pattern, method) without adding syntax or semantics beyond the schema, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (captured HTTP network requests from the in-memory buffer) with the filtering scope. It distinguishes itself from siblings by naming lol_cdp_network_body for bodies and lol_cdp_network_summary for stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('inspect recent client network calls and identify 4xx/5xx errors or hung requests'), a hard prerequisite (must call lol_cdp_network_start first, fails otherwise), and two named alternatives for adjacent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_performanceProfile CEF performance and memory metricsA
Read-onlyIdempotent

Inspect Chromium Embedded Framework (CEF) performance and memory metrics for the League client frontend. Gathers JS heap size, DOM node count, layout count, recalc style count, task and script duration, and flags memory pressure warnings. Use this tool to detect memory leaks, detached DOM nodes, or renderer lag in frontend plugins. Prerequisite: Requires Chrome DevTools Protocol (CDP) enabled via Pengu Loader; check lol_status if connection fails. (Note: Pengu Loader is required for CDP tools; standard LCU REST, events, and workflows work without it).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world, so safety is covered. The description adds meaningful context beyond that: the privacy/requirements caveat that CDP tools need Pengu Loader while standard LCU REST/events/workflows do not, plus the diagnostic/non-mutating nature of the call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose then metrics then use cases then prerequisite. Every sentence carries information, though the parenthetical Pengu Loader note is somewhat parenthetical weight that could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the return-value burden and does so by enumerating the gathered metrics and warning flags. It also covers prerequisites and troubleshooting, leaving little an agent needs before calling it; only the exact output shape is unstated, which is acceptable here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description appropriately adds no parameter guidance because none exist, and it front-loads what the (parameterless) call returns instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (inspect CEF performance/memory metrics for the League client frontend) and enumerates the exact metrics returned (JS heap size, DOM node count, layout/recalc counts, task/script duration, memory pressure flags). It is clearly distinguishable from siblings like lol_cdp_network_summary or lol_cdp_dom_tree.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use cases (detect memory leaks, detached DOM nodes, renderer lag in frontend plugins) and a prerequisite plus failure fallback (CDP via Pengu Loader; check lol_status if connection fails). It does not explicitly name a preferred sibling alternative when CDP is unavailable beyond the status check, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_screenshotCapture screenshot of the League ClientA
Destructive

Capture a visual screenshot image of the active League Client window or a specific renderer target using Chrome DevTools Protocol (CDP). When to use: When visual rendering, modal layout, or graphic verification is needed. When NOT to use: Do not use for automated state checks or element queries (use lol_dom_query) or API data inspection (use lol_get). Behavior: Safe read of visual pixels from the renderer; writes to local filesystem only when savePath is explicitly supplied. Prerequisite: League client must be running with remote debugging enabled via Pengu Loader; check lol_status if disconnected. (Note: Required for CDP tools only). Returns dual-payload MCP content with a base64 image data block plus structured JSON metadata (format, dimensions, byte length, savedTo path).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoImage encoding format: "png" (lossless), "jpeg" (compressed), or "webp"png
qualityNoImage compression quality from 0 to 100; only applicable when format is "jpeg" or "webp"
savePathNoOptional absolute filesystem path (e.g. "C:/temp/screenshot.png") to save the screenshot on disk
targetIdNoSpecific CDP target ID to screenshot (defaults to active main client page; query lol_cdp_targets for options)

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=true and idempotentHint=false; the description discloses that filesystem side effects occur only when savePath is supplied, which aligns with that profile, plus the remote-debugging prerequisite. However, calling the operation a 'Safe read' sits in mild tension with readOnlyHint=false/destructiveHint=true and the description never states that screenshots are non-idempotent or that client state is unaffected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then cleanly sectioned into When to use / When NOT to use / Behavior / Prerequisite / Returns. The 'Required for CDP tools only' parenthetical is slightly awkwardly placed and lengthens the prerequisite sentence without adding much.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the dual-payload return (base64 image block plus JSON metadata with format, dimensions, byte length, savedTo). Prerequisites, alternatives and write conditions are all covered; only the read-only vs destructive framing is left slightly ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so format, quality, savePath and targetId are already fully documented in the schema. The description restates savePath's write condition and points to lol_cdp_targets for targetId selection, which is useful routing, but adds no syntax or format detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Capture a visual screenshot image of the active League Client window or a specific renderer target') and explicitly distinguishes itself from the two nearest siblings by naming them (lol_dom_query, lol_get). An agent can select this tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit 'When to use' (visual rendering / modal layout / graphic verification) and a 'When NOT to use' that routes to the correct alternatives (lol_dom_query for state checks, lol_get for API data). Prerequisite conditions and the lol_status fallback are also named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_storageInspect client localStorage, sessionStorage, and feature flagsA
Read-onlyIdempotent

Inspects the League client Chromium Embedded Framework (CEF) localStorage and sessionStorage entries. Extracts active client-side settings, feature flags, cached configurations, and theme preferences. Supports case-insensitive substring filtering on keys and values, JSON auto-parsing, and automatic redaction of auth tokens, passwords, and sensitive cookies. Prerequisite: Requires Chrome DevTools Protocol (CDP) enabled via Pengu Loader; check lol_status if connection fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return per storage type
filterNoCase-insensitive substring filter for key or value
parseJsonNoAttempt to parse JSON-encoded strings into structured objects
storageTypeNoStorage mechanism to queryall

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare it read-only, idempotent, and non-destructive, and the description adds substantial behavior beyond them: automatic redaction of auth tokens/passwords/sensitive cookies, JSON auto-parsing, and the CDP-via-Pengu-Loader prerequisite. These are exactly the operational and sensitivity details an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with what it inspects, then behavior, then the prerequisite. Each sentence carries information; density is high but nothing is redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so return shape is not documented; the description covers sensitive-data redaction and prerequisites well but does not describe the response structure for local/session storage results. Given the read-only annotations and complete param coverage, remaining gaps are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description restates the filtering (case-insensitive substring across keys and values) and JSON parsing semantics coherently in prose, aiding invocation. It does not add syntax or format detail beyond the schema, and storageType is only implied by the title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Inspects) and resource (CEF localStorage/sessionStorage entries) and elaborates the concrete content types it extracts (settings, feature flags, cached configs, themes). An agent can distinguish it from generic data tools like lol_get or lol_eval because the resource and scope are explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear prerequisite (CDP must be enabled via Pengu Loader) and names a concrete fallback action (check lol_status if the connection fails), which is real when-to-use guidance. It does not, however, contrast the tool against close siblings like lol_dom_query or lol_eval, so it stops short of explicit alternative selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_cdp_targetsList CDP debugging targetsA
Read-onlyIdempotent

Discover and list all active Chrome DevTools Protocol (CDP) debugging targets (pages, modals, worker contexts) exposed by the League Client. Use this tool to inspect available renderer contexts and discover target IDs before capturing targeted screenshots with lol_cdp_screenshot or tailing console and network. Behavior: Safe and read-only. Prerequisite: League client must be running with remote debugging enabled via Pengu Loader. (Note: Pengu Loader is required for CDP tools; standard LCU REST, events, and workflows work without it).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the 'Safe and read-only' line is largely redundant. The real added value is the prerequisite disclosure: the League client must be running with remote debugging enabled via Pengu Loader, plus the note that other LCU REST/event/workflow tools work without it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then behavior and prerequisite. Every sentence carries information, though 'Safe and read-only' duplicates annotation data and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description conveys what is returned (the list of targets and their IDs) and the gating prerequisite. No parameter docs are needed. Minor gaps remain around pagination/format of the target list, but nothing blocks correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly presents this as a no-argument discovery tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Discover and list all active CDP debugging targets') and enumerates the target kinds (pages, modals, worker contexts) exposed by the League Client. It also differentiates from siblings by naming the downstream tools (lol_cdp_screenshot, console/network tailing) it feeds.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it: to inspect renderer contexts and discover target IDs before targeted screenshots or console/network tailing. It does not state when not to use it (e.g., for untargeted CDP operations), but the downstream routing is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_chat_sendSend message into in-game or lobby chatA
Destructive

Sends a text chat message into the active champion select, lobby, or custom game conversation, or into a specific conversation ID. Use this tool to communicate team plans, role preferences, or greetings during lobby or draft phases. For updating your summoner availability status or custom status message, use lol_chat_status instead. Behavior: Sends a chat message to client conversations; automatically resolves active team/lobby chat if conversationId is omitted. Needs "POST /lol-chat/v1/conversations/*/messages" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesText message content to send (up to 500 characters).
conversationIdNoTarget conversation ID. When omitted, automatically resolves active lobby or champion select chat.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/destructive/open-world profile, so the bar is lower. The description adds genuinely useful context beyond them: auto-resolution of the active team/lobby chat when conversationId is omitted, and the required write-allowlist endpoint ('POST /lol-chat/v1/conversations/*/messages'). It does not address the destructiveHint flag (e.g., that the message is public and cannot be recalled), leaving one gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, followed by usage, alternative, behavior, and auth in a logical order. Slightly redundant: 'Sends a text chat message...' and the later 'Behavior: Sends a chat message to client conversations' repeat the same premise, costing a bit of tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter action tool with no output schema, the description covers everything needed: what it does, when to use it, the sibling alternative, default-resolution behavior, and the authorization requirement. An agent has sufficient information to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both message and conversationId thoroughly. The description's note that conversationId omission auto-resolves the active chat largely restates the schema's own wording; it adds no further format, length, or edge-case detail. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (sends) and resource (text chat message) plus the exact scope it targets: champion select, lobby, custom game conversation, or a specific conversation ID. It explicitly distinguishes itself from the sibling lol_chat_status, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (communicating team plans, role preferences, or greetings during lobby or draft phases) and names the alternative (lol_chat_status) with the condition that selects it (availability/custom status updates). Both the positive trigger and the exclusion are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_chat_statusUpdate summoner presence and status messageA
DestructiveIdempotent

Updates the local player's chat availability ("chat", "away", "dnd", "mobile") and custom status headline text visible to friends. Use this tool when setting do-not-disturb, stepping away from the client, or broadcasting a custom status message. For sending chat messages to conversations, use lol_chat_send instead. Behavior: Mutates friend presence state; idempotent when setting the same presence status. Needs "PUT /lol-chat/v1/me" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
availabilityNoAvailability status ("chat", "away", "dnd", "mobile").
statusMessageNoCustom status text message displayed to friends (up to 100 characters).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, destructive, open-world. The description adds genuinely new behavioral context: it mutates friend presence state, is idempotent when re-setting the same status, and requires 'PUT /lol-chat/v1/me' on the write allowlist. It stops short of explaining what is destroyed or whether a missing allowlist entry causes an error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and usage are front-loaded in the first two sentences, with the behavioral/allowlist note kept terse at the end. The enum repeat ('chat', 'away', 'dnd', 'mobile') is mildly redundant with the schema but the rest earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no output schema and full schema coverage, the description covers purpose, usage, sibling routing, and the write-allowlist prerequisite — nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the schema. The description echoes the availability enum and the status-message concept but adds no syntax, defaults, or edge-case semantics beyond that, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (updates) and resource (local player's chat availability and status message), and enumerates the accepted availability values, so the agent knows exactly what the tool acts on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (setting do-not-disturb, stepping away, broadcasting a custom status) and names the alternative for a different need: 'For sending chat messages to conversations, use lol_chat_send instead.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_dom_queryQuery the League client DOMA
Read-onlyIdempotent

Query HTML elements in the active League client Chromium Embedded Framework (CEF) UI DOM using CSS selectors. Use this tool as the primary safe method to inspect live UI elements, verify modal state, or find element identifiers. Do not use lol_eval when a CSS selector query suffices. For arbitrary JavaScript execution or state mutation in the UI page, use lol_eval instead. For capturing visual UI state as an image, use lol_cdp_screenshot instead. Prerequisite: Requires Chrome DevTools Protocol (CDP) enabled via Pengu Loader; check lol_status if connection fails. Note: Pengu Loader is required for CDP tools, but standard LCU REST, WAMP, and game tools work without it.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoIf true, returns an array of all matching elements; if false (default), returns only the first matching element
propsNoArray of additional DOM element properties or attributes to extract, e.g. ["disabled", "href", "textContent"]
selectorYesCSS selector matching target elements, e.g. ".lol-uikit-flat-button" or "#rcp-fe-viewport"

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint. The description adds meaningful behavioral context beyond annotations: the CDP/Pengu Loader dependency, the troubleshooting step (check lol_status if connection fails), and the note that other tool categories work without Pengu Loader. It does not detail return format or rate limits, but the setup and safety context are valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage guidance, then alternatives and prerequisites. It is slightly long due to the final note about Pengu Loader and non-CDP tools, which is ecosystem context that is helpful but not strictly about invoking this tool. Overall, most sentences earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a CDP-based query tool with rich annotations and full schema coverage, the description is complete: it covers purpose, routing to alternatives, prerequisites, failure recovery, and the broader Pengu Loader requirement. No output schema exists, and return details are not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (selector, all, props) are fully documented in the schema. The description adds no parameter-specific meaning beyond what the schema provides; its only mention of selectors is a restatement of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb (Query) and resource (HTML elements in the active League client CEF UI DOM) with the mechanism (CSS selectors). It distinguishes itself from siblings by explicitly naming lol_eval and lol_cdp_screenshot as alternatives for different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use (primary safe method to inspect live UI elements, verify modal state, find element identifiers), when-not-to-use (Do not use lol_eval when a CSS selector query suffices), and alternatives for adjacent tasks (lol_eval for arbitrary JS/state mutation, lol_cdp_screenshot for visual state). It also includes a prerequisite check via lol_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_endpointsList curated LCU endpointsA
Read-onlyIdempotent

Search the curated catalog of League Client Update (LCU) REST API endpoints commonly used for automation and monitoring. Returns matching endpoint paths, HTTP verbs, functional groups, and summary descriptions. Use this tool to quickly discover available endpoints by keyword (e.g. "champ-select", "lobby", "summoner"). For full OpenAPI/Swagger schema definitions, parameter types, or data models, use lol_schema instead. Prerequisite: Works offline without requiring an active League client connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoCase-insensitive substring filter matching verb, path, group, or description, e.g. "champ-select" or "ready-check"

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds genuine context beyond them: it enumerates what is returned (paths, HTTP verbs, functional groups, summaries) and notes it requires no live client connection. It omits result limits/pagination, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each load-bearing: purpose, return shape + usage, then the sibling redirect and prerequisite. Front-loaded with the core action and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description compensates by naming the returned fields (paths, verbs, groups, summaries). Combined with explicit sibling routing and the offline note, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'filter' param is fully documented there, including matching semantics. The description's keyword examples restate what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and resource (curated catalog of LCU REST API endpoints), and explicitly distinguishes itself from the lol_schema sibling. An agent can tell what this returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use ('quickly discover available endpoints by keyword') with concrete examples, an explicit when-not-to-use routing to lol_schema for schemas/parameter types/data models, and a prerequisite note that it works offline. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_evalEvaluate JavaScript in the client pageA
Destructive

Execute an arbitrary JavaScript expression within the League client Chromium Embedded Framework (CEF) renderer context and return the evaluated result. CRITICAL: Do NOT use lol_eval for LCU REST API calls (e.g. fetch('/lol-...')) or client state queries. For safe LCU REST queries, ALWAYS use lol_get or lol_request. For automated game actions (lobby, matchmaking, champ-select, runes), ALWAYS use lol_workflow_* tools. For safe DOM structure inspection, prefer lol_dom_query. Use lol_eval ONLY for advanced CEF runtime debugging, custom in-page UI automation, or reading internal renderer properties not exposed via REST. Behavior: Destructive and unsandboxed; bypasses the write allowlist by construction. Security: Gated by allowEval config flag (check lol_status); calls are refused if allowEval is false. Prerequisite: Requires active CDP connection enabled via Pengu Loader (required for CDP tools; not needed for REST/workflow tools).

ParametersJSON Schema
NameRequiredDescriptionDefault
expressionYesA single valid JavaScript expression to evaluate (not a statement list), e.g. "window.location.href" or "document.title"
awaitPromiseNoWhether to await resolution if the evaluated expression returns a Promise (default: false)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/openWorld/non-idempotent, but the description adds critical context beyond them: unsandboxed, bypasses the write allowlist by construction, gated by the allowEval config flag (directing the agent to check lol_status), and requires an active CDP connection via Pengu Loader. This is exactly the behavioral disclosure an agent needs before calling a dangerous tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then uses CRITICAL/Behavior/Security/Prerequisite labels to structure the warnings efficiently. It is long, but nearly every sentence carries distinct, decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param tool with full schema coverage, rich annotations, and no output schema, the description covers purpose, alternatives, destructive/unsandboxed nature, the config gate, and the CDP prerequisite. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both `expression` and `awaitPromise` documented in the schema, so baseline is 3. The description implies single-expression evaluation and return of a result but adds no syntax or format detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: execute an arbitrary JavaScript expression in the CEF renderer context and return the result. It explicitly distinguishes itself from siblings by naming what it is NOT for (LCU REST calls, DOM inspection, REST state queries).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use/when-not with named alternatives: lol_get/lol_request for REST, lol_workflow_* for game actions, lol_dom_query for DOM, and reserves lol_eval for CEF runtime debugging and custom in-page automation. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_events_pollDrain buffered LCU eventsA
Read-onlyIdempotent

Drain buffered League Client WebSocket events recorded since a given sequence cursor, returning events and the new cursor. Use this tool to incrementally consume live client events after calling lol_events_start. For recording full WAMP traffic frames, use lol_wamp_record_dump instead. If an event payload indicates truncated: true, use lol_get on the entry URI to fetch the full resource. Behavior: Safe and read-only. A non-zero dropped count indicates buffer overflow between polls.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of event entries to return (1-500, default: 100)
sinceNoMonotonic sequence cursor from the previous poll call; omit or set to 0 to read from start of buffer
filterNoOptional case-insensitive URI prefix substring applied as a post-filter at poll time

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/destructive=false, and the description adds real context on top: truncated-payload fallback via lol_get, and the meaning of a non-zero dropped count as buffer overflow between polls. That's behavioral insight the structured fields do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and return, followed by usage routing, fallback behavior, and safety note. Every sentence carries distinct, non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains the return (events and the new cursor), the dropped-count signal, and the truncation follow-up path. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters; the description reinforces the 'since' cursor as a cursor from the previous poll and ties limit/filter semantics into the poll flow. It adds meaningful framing beyond the schema, though it doesn't detail filter syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-and-resource ('Drain buffered League Client WebSocket events') plus return semantics (events + new cursor). It distinguishes itself from lol_events_start and lol_wamp_record_dump, so an agent can identify it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it 'to incrementally consume live client events after calling lol_events_start' and names the alternative for full frames (lol_wamp_record_dump). When-to-use, sequencing, and alternatives are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_events_startStart buffering LCU eventsA
Idempotent

Open the League Client WebSocket event tap and buffer live OnJsonApiEvent Create/Update/Delete notifications in memory. Use this tool to monitor real-time client state changes (such as champ select progress, gameflow phase, or lobby party updates). To poll buffered events, call lol_events_poll. To record raw WAMP frames with socket lifecycle diagnostics, use lol_wamp_record_start instead. For static game assets, use lol_static instead. Behavior: Ring buffer evicts oldest events after buffer limit is reached. Calling while running updates URI filters and preserves already buffered events. Prerequisite: League client must be running.

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNoArray of URI prefix filters applied at ingest (e.g. ["/lol-champ-select/", "/lol-gameflow/"]); omit for unfiltered firehose

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true), and the description adds substantial behavioral context beyond them: in-memory ring-buffer eviction, the fact that calling while running updates URI filters and preserves buffered events, and the client-running prerequisite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with its core purpose, then proceeds through usage, alternatives, behavior, and prerequisite in a dense but well-structured way. Every sentence provides routing or behavioral value, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter start-buffering tool with no output schema, the description covers what the tool opens, what it buffers, how to consume the buffer, competing alternatives, ring-buffer limits, update behavior, and the client prerequisite. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the filter parameter's syntax and default behavior are already documented. The description still adds meaning beyond the schema by clarifying that calling while running updates URI filters without discarding already buffered events, which is a useful lifecycle detail for that parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: opening the League Client WebSocket event tap and buffering live OnJsonApiEvent Create/Update/Delete notifications. It explicitly distinguishes this tool from lol_events_poll, lol_wamp_record_start, and lol_static, so an agent can route correctly without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use guidance for monitoring real-time client state changes and names concrete examples such as champ select, gameflow, and lobby updates. It also routes agents to alternatives for polling, raw WAMP recording, and static assets, and states the prerequisite that the League client must be running.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_events_stopStop buffering LCU eventsA
Idempotent

Close the League Client WebSocket event tap and stop buffering live events. Use this tool to pause or end event collection and conserve memory. Buffered events remain readable via lol_events_poll after stopping. For stopping WAMP recording, use lol_wamp_record_stop instead. Behavior: Idempotent; safe to call when already stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the 'Idempotent; safe to call when already stopped' line largely repeats structured data. However, the description adds genuinely non-annotated behavior: buffered events remain readable via lol_events_poll after stopping, which tells the agent nothing is lost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action, then usage, then the alternative, then the behavior note. Slightly padded by restating the idempotency annotation, but otherwise every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A zero-parameter, non-destructive stop tool with no output schema needs only to say what it stops, when to use it, and what happens to buffered data — all of which are covered. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is no parameter semantics to document and the schema is complete by construction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Close the League Client WebSocket event tap and stop buffering live events'), and explicitly distinguishes itself from the sibling lol_wamp_record_stop. An agent can tell exactly what this does without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the use condition ('pause or end event collection and conserve memory') and routes the agent to the correct sibling for the adjacent task ('For stopping WAMP recording, use lol_wamp_record_stop instead'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_forensics_anomaly_detectDetect cross-stream telemetry anomalies and client crash signaturesA
Read-onlyIdempotent

Scans across active LCU WAMP event recordings, CDP console logs, network requests, and client disk logs to detect anomalies and crash patterns. Identifies frontend exception bursts, LCU HTTP server error clusters (500/503), WebSocket disconnects, and fatal crashes with root-cause hypotheses. Behavior: Safe and read-only. Does not interrupt background loggers or active streams.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowSecondsNoAnalysis window in seconds to inspect across all streams (1-3600, default: 60)
severityFilterNoFilter returned anomalies by severity level: "CRITICAL", "DEGRADED", or "ALL"

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and non-destructive, so the safety bar is low; the description nonetheless adds genuinely new context that the operation 'does not interrupt background loggers or active streams' and works across concurrently recording streams. It stops short of describing cost, latency, or result volume for a cross-stream scan.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the scan scope and results. The trailing 'Behavior: Safe and read-only' slightly duplicates the readOnlyHint annotation, which is the only redundancy, but the side-effect clause in the same sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully characterizes the kinds of anomalies returned, and the two optional parameters are fully specified in the schema. The remaining gap is the precondition that WAMP/CDP/disk loggers must already be recording for a cross-stream scan to yield anything, which is only hinted at by 'active'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters carry ranges, defaults, and enum values in the schema itself, so the description owes little here. It adds no extra meaning about how windowSeconds interacts across streams or how severityFilter maps to the listed anomaly classes, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Scans', 'detects') and enumerates the exact resource scope (LCU WAMP recordings, CDP console logs, network requests, client disk logs) plus the concrete findings returned (exception bursts, 500/503 clusters, WebSocket disconnects, fatal crashes). It never names or contrasts a sibling such as lol_forensics_correlate or lol_logs_tail, so the boundary against neighbors must be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the scanning/detection framing, and the mention of 'active' streams hints that recordings must be in progress, but there is no explicit when-to-use, when-not-to-use, or alternative tool guidance relative to lol_forensics_correlate or lol_logs_tail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_forensics_bundleGenerate comprehensive diagnostics bundle across all LCU telemetry streamsA
Read-onlyIdempotent

Generate an all-in-one diagnostic bundle combining system connectivity status, correlated telemetry timelines, and recent disk log tails. Use this tool as a single-call comprehensive health check or bug report export when diagnosing complex client issues. For interactive querying of specific streams, use lol_forensics_correlate or subsystem-specific tools. Behavior: Safe and read-only. Returns Markdown report by default, or structured JSON when specified.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum total events to include in the combined timeline (1-2000, default: 200)
sinceNoLower timestamp bound in epoch milliseconds or clock timestamp
untilNoUpper timestamp bound in epoch milliseconds or clock timestamp
formatNoBundle output format: "markdown" for formatted text report, or "json" for structured objectmarkdown
sourcesNoArray of telemetry stream sources to include in the bundle: "wamp", "cdp", "network", "logs", "game"
includeLogTailNoWhether to append recent disk log tail if active log watcher has no fresh entries (default: true)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

'Safe and read-only' restates the annotations (readOnlyHint/destructiveHint), so that sentence earns little. However the description adds genuine behavioral value beyond annotations by disclosing the return contract ('Markdown report by default, or structured JSON when specified'), which matters because there is no output schema, and by explaining the includeLogTail fallback intent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by usage routing and return-format detail, with little waste. The 'Safe and read-only' clause is redundant against the annotations and is the one sentence that does not fully earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a composite read-only aggregator with no output schema and six optional parameters, the description covers what it produces, when to prefer it, the alternative for narrower queries, and the output format contract. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema; the description implies the format, sources, and log-tail concepts but adds no syntax or defaults beyond them. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb 'Generate' and a concrete composite resource ('all-in-one diagnostic bundle') plus the three components it combines (connectivity status, correlated telemetry timelines, disk log tails). An agent can distinguish this aggregate tool from the many single-stream siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('single-call comprehensive health check or bug report export when diagnosing complex client issues') and an explicit when-not with the named alternative ('For interactive querying of specific streams, use lol_forensics_correlate or subsystem-specific tools'). Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_forensics_correlateCorrelate LCU WAMP and CDP console timelinesA
Read-onlyIdempotent

Correlate events across LCU WAMP, Chrome DevTools Protocol console logs, network requests, disk logs, and live game telemetry into a unified chronological timeline. Use this tool during incident triage to identify whether client state changes triggered frontend UI errors or network failures. For a complete system report with status snapshots, use lol_forensics_bundle instead. For raw console logs alone, use lol_cdp_console_tail. Behavior: Safe and read-only. Gracefully combines active in-memory streams without interrupting background loggers.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum total events to return across all streams (1-1000, default: 100)
sinceNoLower timestamp bound in epoch milliseconds or clock timestamp
untilNoUpper timestamp bound in epoch milliseconds or clock timestamp
formatNoOutput format: "narrative" (Markdown), "events" (JSON array), or "summary"narrative
levelsNoFilter CDP console log entries by severity levels: "error", "warning", "info", "log", "debug"
sourcesNoArray of telemetry stream sources to include: "wamp", "cdp", "network", "logs", "game"
logLevelNoFilter disk log entries by log level string
uriPrefixNoFilter WAMP events by URI prefix (e.g. "/lol-gameflow/")
networkFailedOnlyNoIf true, restricts CDP network requests strictly to transport/protocol failures

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description nonetheless adds non-obvious operational context: it combines active in-memory streams 'without interrupting background loggers,' which reassures the agent it won't perturb live capture. It stops short of describing result size limits or how streams are interleaved on timestamp ties.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, no filler: capability first, use case second, sibling routing third, behavioral guarantee last. Every sentence earns its place and the most important routing information is front-loaded before the alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter aggregation tool with no output schema, the description covers what it merges, when to use it, and its safety/interruption profile. The one gap is that it doesn't indicate the volume or shape of results (e.g., bounded by limit, possibly narrative Markdown), leaving the agent to infer output characteristics from the format parameter alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 9 parameters, so the schema already documents limit, since/until, format, levels, sources, logLevel, uriPrefix, and networkFailedOnly. The description's list of telemetry streams loosely maps to the `sources` enum, which is marginally helpful, but it adds no filter syntax or format-selection guidance beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Correlate') and enumerates the exact resources merged (LCU WAMP, CDP console logs, network requests, disk logs, live game telemetry) with the output shape (unified chronological timeline). An agent can distinguish this from every sibling without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the use case ('during incident triage to identify whether client state changes triggered frontend UI errors or network failures') and routes to two named alternatives with their selecting conditions: lol_forensics_bundle for a full report and lol_cdp_console_tail for raw console logs alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_forensics_export_harExport client HTTP network traffic to standard HAR (HTTP Archive) formatB
Read-onlyIdempotent

Exports captured HTTP/HTTPS network traffic from the active network tailer into a standard HAR 1.2 archive. Automatically redacts sensitive authorization headers (Basic/Bearer auth, Riot auth tokens), session cookies, and credentials. If savePath is specified, writes the formatted HAR file directly to disk; otherwise returns the full HAR JSON structure. Prerequisite: Network recording must be active; call lol_cdp_network_start first to begin capturing requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of network entries to include in HAR
savePathNoOptional absolute path to write .har file to disk. If omitted, returns the HAR JSON structure.

TDQS

B3.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly states that, when savePath is supplied, the tool 'writes the formatted HAR file directly to disk' — a filesystem mutation (and potential overwrite of an existing file) that directly conflicts with the annotations readOnlyHint=true and destructiveHint=false. The description does add genuinely useful non-annotation context (automatic redaction of Basic/Bearer/Riot tokens, cookies and credentials), but the explicit write behavior contradicts the declared safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, purpose front-loaded, no filler; each sentence carries information (scope, redaction, conditional I/O, prerequisite). Minor redundancy: the savePath branching restates the schema's own savePath description almost verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description correctly compensates by saying what is returned (full HAR JSON structure) and what is stripped (auth headers, cookies, credentials), and it flags the prerequisite capture state. It never explains the 'limit' parameter or entry-count implications, and the write-to-disk claim conflicts with the provided annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents both parameters, including savePath's conditional behavior in nearly the same words ('If omitted, returns the HAR JSON structure'). The description therefore adds no semantics beyond the schema for either parameter, and the 'limit' cap of 5000 entries is never mentioned. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Exports captured HTTP/HTTPS network traffic') and names the exact output artifact ('standard HAR 1.2 archive'), which is far more precise than the title alone. It anchors the source ('active network tailer') so it cannot be confused with lol_cdp_network_tail, but it never explicitly contrasts itself with the other forensics exporters (lol_forensics_bundle, lol_forensics_correlate), so full sibling differentiation is absent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an explicit precondition and the tool to call first ('Network recording must be active; call lol_cdp_network_start first'), and it explains the two modes of use (disk write when savePath is given, JSON return otherwise). It stops short of naming when NOT to use it or how it relates to the other forensics export siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_game_allLive game all dataA
Read-onlyIdempotent

Fetch complete real-time in-match game state (scores, player inventories, game time, objectives, events) from the live League game engine. Use this tool during an active match to get full game telemetry. For specific player details, use lol_game_player. For game clock and map only, use lol_game_stats. For in-game kill/objective events, use lol_game_events. For client/lobby data outside matches, use lol_get. Behavior: Prerequisite: Match must be currently running (Live Client Data API on port 2999). Safe and read-only. Returns compact summary by default to conserve tokens; pass "raw" for full ~100KB payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: "summary" for compact LLM-friendly overview, or "raw" for full ~100KB payloadsummary

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, open-world, non-destructive behavior, and the description adds operational context beyond them: the Live Client Data API on port 2999 must be active, and the default output is a compact summary to conserve tokens, with 'raw' returning a ~100KB payload. This tells the agent about prerequisites and response-size tradeoffs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then gives just enough routing guidance and behavioral context. The sibling alternatives and prerequisite are succinctly framed, and no sentence is wasted for a tool whose selection depends on match state and data scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with rich annotations and a fully described single parameter but no output schema, the description covers selection context, prerequisites, and the summary-vs-raw output tradeoff. It does not detail the summary payload's exact structure, but it gives enough to choose the tool and format correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single format parameter is documented in the schema, so the baseline is 3. The description adds some decision-relevant meaning beyond the schema by explaining that the default summary conserves tokens and that 'raw' yields the full ~100KB payload, though it largely reinforces the schema's summary/raw definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Fetch complete real-time in-match game state' from the live League game engine, and enumerates the data it includes (scores, inventories, time, objectives, events). It also distinguishes itself from siblings by naming lol_game_player, lol_game_stats, lol_game_events, and lol_get for narrower needs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('during an active match to get full game telemetry') and names four alternative tools for specific needs (player details, clock/map only, events, client/lobby data). The prerequisite is also stated: the match must be currently running.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_game_eventsLive game eventsA
Read-onlyIdempotent

Retrieve in-game events (champion kills, dragon/baron objectives, turret destructions, aces) from the live game engine. Use this tool to track recent in-match actions or feed an event timeline. For full match state including player inventories, use lol_game_all instead. Behavior: Safe and read-only. Supports incremental cursor via afterId. Prerequisite: Active match running on port 2999.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterIdNoEvent ID cursor from a previous call to fetch only events that occurred after this ID

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is largely covered. The description adds real value by stating the prerequisite (active match on port 2999) and the incremental cursor behavior via afterId, which the annotations do not convey. A 4 reflects that it adds behavior beyond annotations without fully covering failure modes (e.g., what happens if no match is running).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each carrying distinct information: purpose, usage, alternative, behavior, prerequisite. It is front-loaded with the core purpose. Slightly long but no sentence is filler, so it earns its size.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-parameter tool whose annotations already cover safety, the description supplies the missing runtime prerequisite and cursor semantics. No output schema exists, but the description implies a list of events without detailing shape; that omission keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is one optional parameter with a clear schema description. The description mentions 'Supports incremental cursor via afterId', which reinforces the schema but adds no syntax, format, or edge-case detail beyond it. Baseline 3 is appropriate when the schema already documents the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Retrieve') and resource ('in-game events'), and enumerates the event types (kills, objectives, turrets, aces). It distinguishes from the sibling lol_game_all, which is named as the broader alternative. It does not, however, differentiate from other lol_game_* siblings like lol_game_stats or lol_game_player as clearly as a 5 would require.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('track recent in-match actions or feed an event timeline') and names an alternative ('For full match state including player inventories, use lol_game_all instead'). It does not state when NOT to use it or contrast with lol_game_stats, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_game_playerLive game player dataA
Read-onlyIdempotent

Fetch real-time live match statistics, item inventory, abilities, and runes for the active local player or a named summoner. Use this tool to inspect a specific player's current gold, level, KDA, items, or rune setup during an active match. For all players in the match at once, use lol_game_all instead. Behavior: Safe and read-only. Prerequisite: Match must be currently in progress (port 2999).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSummoner name or Riot ID of target player in the current match; omit to fetch local active player

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description adds the non-obvious prerequisite that a match must be in progress (port 2999), which the schema does not convey. It stops short of describing the returned payload, so it is not fully complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose, then routing guidance, then the prerequisite. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-param read tool with no output schema, the description covers purpose, the sibling boundary, and the in-match prerequisite. It enumerates the returned stat categories but not the response shape, leaving a small gap that keeps it below 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema already explains the summoner-name/local-player default. The description restates the same optional-name semantics without adding format or syntax detail, matching the baseline for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('fetch') plus resource ('real-time live match statistics, item inventory, abilities, and runes') for a scoped subject (local player or named summoner). It is clearly distinguishable from lol_game_all because the description names the alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to use it ('to inspect a specific player's current gold, level, KDA, items, or rune setup during an active match') and when not to ('For all players in the match at once, use lol_game_all instead'). The alternative sibling is named with the selecting condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_game_statsLive game statsA
Read-onlyIdempotent

Fetch basic match status, game clock time, game mode, and map ID from the live League game engine. Use this tool to quickly verify whether a match is currently in progress, check elapsed game time, or identify the game mode. For full match telemetry including players and scores, use lol_game_all instead. Behavior: Safe and read-only. Prerequisite: Match must be currently running (port 2999).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the 'Safe and read-only' line adds little. However, the description goes beyond annotations with a real operational prerequisite ('Match must be currently running (port 2999)'), which tells the agent when the call will fail — valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the verb+resource, then usage, then the alternative sibling, then prerequisites. Every sentence carries distinct information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the returned fields (status, clock, mode, map ID) and the failure prerequisite, which is enough for correct invocation. It does not describe the error/empty response shape when no match is running, a minor remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter syntax to explain, and the description correctly spends no space on it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Fetch basic match status, game clock time, game mode, and map ID from the live League game engine') and enumerates exactly what is returned. It is clearly distinguished from the sibling lol_game_all, which is named as the broader alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names three concrete use cases (verify a match is in progress, check elapsed time, identify game mode) and routes the agent to lol_game_all when full telemetry is needed. Both the when-to-use and the when-to-use-something-else conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_getGET an LCU endpointA
Read-onlyIdempotent

Send a read-only HTTP GET request to any internal League Client Update (LCU) REST API endpoint and return { status, body }. This is the primary and recommended tool to inspect live client state (such as summoner profile, lobby members, or gameflow phase) instead of using lol_eval. For mutating actions (POST, PUT, PATCH, DELETE), use lol_request instead. To discover supported endpoint paths, use lol_endpoints or lol_schema. Prerequisite: League client must be running. Safe and idempotent; requires no write allowlist entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute LCU REST endpoint path starting with "/", e.g. "/lol-gameflow/v1/gameflow-phase" or "/lol-summoner/v1/current-summoner"

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is met; the description adds real value beyond them by stating the return shape { status, body }, the client-running prerequisite, and that no write allowlist entry is needed. It stops short of describing error behavior (e.g., what happens on a 404 or malformed path), which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences with zero filler: purpose/return first, then the positive alternative (lol_eval), then the mutating sibling, then path discovery and prerequisites. Front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description compensates by naming the return shape, and it covers the prerequisite and the sibling routing an agent needs. For a single-parameter GET wrapper with full annotation coverage, nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single path parameter is fully documented with a pattern and concrete examples in the schema. The description adds nothing about path syntax or format beyond 'any internal LCU REST API endpoint', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (GET), resource (LCU REST API endpoint), and scope (read-only, any internal endpoint), and explicitly names what it returns ({ status, body }). It distinguishes itself from the mutating sibling lol_request and from lol_eval, so an agent can pick it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: use this instead of lol_eval for inspecting live client state, use lol_request for POST/PUT/PATCH/DELETE, and use lol_endpoints/lol_schema to discover paths. It also names the prerequisite (client running) and the no-allowlist advantage. When, when-not, and alternatives are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_launch_clientLaunch the League of Legends clientA
Idempotent

Launch the League of Legends client via Riot Client Services or LeagueClient.exe and optionally wait until the LCU REST API becomes responsive. If the client is already running and responsive, returns immediately without spawning a duplicate process. Behavior: Safe and idempotent. Prerequisite: League of Legends must be installed on the system.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional custom path to RiotClientServices.exe or LeagueClient.exe
waitForReadyNoWhether to poll until the LCU REST API is fully responsive after launching (default: true)
timeoutSecondsNoMaximum seconds to wait for LCU readiness when waitForReady is true (2-120, default: 30)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare idempotent, non-destructive, and open-world behavior, so the description's 'Safe and idempotent' line is largely redundant. However, it adds useful operational context: avoiding duplicate processes, optionally polling for LCU readiness, and the installation prerequisite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and remains compact. The standalone 'Behavior: Safe and idempotent' sentence is somewhat redundant with the annotations and the preceding sentence, but the overall structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a launch tool with no output schema and rich annotations, the description provides the missing context an agent needs: launch mechanism, optional readiness polling, duplicate-process handling, and the installation prerequisite. Nothing essential for correct invocation appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all three parameters are already well documented in the schema. The description reinforces the optional wait behavior and executable choices, but adds no syntax, format, or constraints beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: launching the League of Legends client via named executables. It also distinguishes the tool from diagnostic and automation siblings by focusing on process launch and LCU readiness.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear prerequisite (League must be installed) and explains the already-running case, which effectively tells the agent when the tool is needed. It does not name alternative tools, but no sibling appears to offer the same launch capability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_logs_sessionsList log sessions on diskA
Read-onlyIdempotent

List historical and active League Client, UX, or Game log files on disk sorted by modification time, newest first. Use this tool to discover session identifiers or log filenames to pass into lol_logs_tail session parameter. For reading log content directly, use lol_logs_tail. Behavior: Safe and read-only. Scans standard Riot Games log directories on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of sessions to return (1-50, default: 10)
targetNoLog target subsystem: "client" (LCU logs), "ux" (CEF UI logs), or "game" (Game engine r3dlogs)client

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description restates 'Safe and read-only' but also adds genuinely new context: it scans standard Riot Games log directories on disk and returns results sorted newest-first. It does not detail failure modes (e.g., missing directories) or result shape, but the added environmental scope is meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what it lists and how results are sorted, followed by usage routing and a behavior note. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, zero-required discovery tool with no output schema, the description tells the agent what it returns (session identifiers/filenames), how it is ordered, and where it looks on disk. Only the concrete result fields are unspecified, which is minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already explains both the limit range and the target enum values with their meanings. The description only indirectly echoes the subsystem vocabulary ('Client, UX, or Game') and the session identifier hand-off, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List historical and active ... log files on disk') with scope (three subsystems) and ordering (by modification time, newest first). It also implicitly differentiates from lol_logs_tail by describing itself as the discovery step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (to discover session identifiers or filenames to pass into lol_logs_tail's session parameter) and names the alternative for the other intent ('For reading log content directly, use lol_logs_tail'). Both the use case and the exclusion are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_logs_tailRead recent log lines from diskA
Read-onlyIdempotent

Read the most recent log lines from the active or selected League Client, CEF UX, or Game engine disk log file. Use this tool to inspect historical or startup errors recorded on disk. For live streaming log monitoring, use lol_logs_watch_start and lol_logs_watch_poll instead. For in-memory renderer console messages, use lol_cdp_console_tail. Behavior: Safe and read-only. Automatically redacts passwords, auth tokens, and sensitive keys from log output.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoFilter lines by log level or ALL (default: ALL)ALL
linesNoNumber of lines to read backward from EOF (1-2000, default: 100)
searchNoCase-insensitive substring filter applied to raw log lines
targetNoLog target: "client" (LCU core), "ux" (CEF UI frontend), or "game" (r3dlog engine)client
sessionNoSession ID or log filename from lol_logs_sessions; omit for active session

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is covered structurally; the description reinforces this and adds a genuinely new trait: automatic redaction of passwords, tokens, and sensitive keys. It does not mention pagination or error behavior, but redaction disclosure is real added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose, usage routing, and behavior. The primary purpose is front-loaded and alternatives follow, with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a fully documented 5-param schema, the description covers what an agent needs: purpose, routing, and the redaction guarantee. It stops short of describing return shape or how line counts map to output, but that gap is minor for a read-only tail tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (level, lines, search, target, session) is already documented in the schema. The description adds only the notion of an 'active or selected' log file, which the schema's session description already implies, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource (read recent log lines) and scopes it to three concrete sources (League Client, CEF UX, Game engine disk log file). It clearly separates itself from siblings like lol_logs_watch_start/poll and lol_cdp_console_tail by naming them as different modes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('inspect historical or startup errors recorded on disk') and names two alternative tools with their distinguishing conditions (live streaming vs in-memory renderer console). An agent can route correctly without opening any schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_logs_watch_pollPoll buffered disk log entriesA
Read-onlyIdempotent

Poll newly buffered disk log entries captured by the active disk log watcher since a given cursor. Use this tool to consume real-time log lines while watching is active. Prerequisite: Requires lol_logs_watch_start to be running; returns empty if stopped. For reading historical lines from file EOF, use lol_logs_tail instead. Behavior: Safe and read-only. Supports cursor-based incremental polling without duplicates.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoFilter entries by log level: "ALWAYS", "OKAY", "INFO", "WARN", "ERROR", or "ALL"
limitNoMaximum entries to return (1-2000, default: 100)
cursorNoSequence cursor from a previous poll call for incremental reading
searchNoCase-insensitive substring filter applied to log entry text

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real value: the watch-start prerequisite, the empty-return condition when stopped, and duplicate-free cursor-based incremental polling. The only omission is any hint about ordering or return shape, which is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then prerequisite, alternative, and behavior in a compact structure. The "Behavior: Safe and read-only" clause partly restates annotations, a small redundancy, but overall it is tight and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with no output schema, it covers purpose, gating prerequisite, the alternative sibling, and polling semantics. It does not describe the shape of returned entries, but with no output schema that is a modest gap rather than a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning for the cursor parameter by explaining it as a sequence cursor enabling incremental, duplicate-free polling. The level/search/limit filters get no extra description beyond the schema, keeping this just above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (poll) and resource (newly buffered disk log entries from the active watcher) with explicit scope (since a given cursor). It is clearly distinguishable from the sibling lol_logs_tail, which the description names directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it (consuming real-time lines while watching is active), the prerequisite (lol_logs_watch_start must be running, empty if stopped), and the alternative for historical reads (lol_logs_tail). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_logs_watch_startStart live disk log watcherA
Idempotent

Start watching a League Client disk log file for newly appended lines, streaming entries into an in-memory ring buffer. Use this tool before reproducing an issue to capture new disk log entries as they are written. To poll new entries, call lol_logs_watch_poll. When finished, call lol_logs_watch_stop. For one-off historical reads from disk, use lol_logs_tail instead. Behavior: Non-destructive. Ring buffer evicts oldest lines on overflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoLog target subsystem to watch: "client" (LCU core), "ux" (CEF UI), or "game" (r3dlog engine)client

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (destructive=false, idempotent=true, openWorld=true), so the bar is lower, yet the description still adds that the watcher uses an in-memory ring buffer that evicts oldest lines on overflow. That eviction behavior is a genuine trait not visible in the structured data. It does not describe the returned handle/session, which is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then layers the workflow (start -> poll -> stop) and the alternative. Every sentence carries distinct information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a stateful watcher with no output schema, the description covers the lifecycle and buffer semantics well. It leaves open how a started watch is identified for subsequent poll/stop calls, a small gap but one the sibling tools likely clarify.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the sole 'target' parameter is fully documented with enum meanings in the schema. The description only refers generically to 'a log file' and adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (start watching) and resource (League Client disk log file) with the exact effect (newly appended lines streaming into an in-memory ring buffer). It explicitly distinguishes itself from the sibling stages lol_logs_watch_poll, lol_logs_watch_stop, and lol_logs_tail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('before reproducing an issue'), names the follow-up tools (poll, stop), and names the alternative for a different need (lol_logs_tail for one-off historical reads). The routing between siblings is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_logs_watch_stopStop live disk log watcherA
DestructiveIdempotent

Stop the active disk log watcher and release file handles and in-memory log buffer. Use this tool to end log watching and free memory when debugging is complete. Behavior: Idempotent; safe to call when already stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is covered; the description reinforces this with 'Idempotent; safe to call when already stopped' and clarifies exactly what is torn down (file handles, in-memory buffer). It adds real context about what is destroyed, though it slightly restates the idempotency annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the action and effect, then usage and behavioral note. No filler and no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter teardown tool with no output schema and rich annotations, the description covers purpose, usage timing, and teardown semantics. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('stop') and resource ('the active disk log watcher'), plus the concrete side effects (releasing file handles and the in-memory log buffer). This clearly distinguishes it from the sibling lol_logs_watch_start and lol_logs_watch_poll.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it: 'to end log watching and free memory when debugging is complete.' The complementary start/poll siblings make the alternative obvious, but the description never names them as it does for other tools in this family.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_requestCall an LCU endpoint with any verbA
Destructive

Send an HTTP request with any verb (GET, HEAD, POST, PUT, PATCH, DELETE) to an internal League Client Update (LCU) REST endpoint. Use this tool to perform client mutations or call endpoints not covered by dedicated workflow tools. Always prefer this tool over lol_eval for REST API interactions. For safe read-only queries, prefer lol_get. For common automated actions like champion selection or lobby creation, prefer lol_workflow_* tools. Behavior: GET and HEAD are always allowed. Mutating verbs require matching entries in the write allowlist; unauthorized requests are rejected before execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body payload; omit for verbs that take none (such as GET or DELETE)
pathYesAbsolute LCU REST endpoint path starting with "/", e.g. "/lol-gameflow/v1/gameflow-phase" or "/lol-summoner/v1/current-summoner"
methodYesHTTP verb to execute against the LCU endpoint

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the allowlist gate: GET/HEAD are always allowed, mutating verbs require matching allowlist entries, and unauthorized requests are rejected before execution. This is meaningful operational context not derivable from destructiveHint/openWorldHint. It stops short of describing the response shape or partial-failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool does, then alternatives, then behavior. Each sentence carries a distinct, decision-relevant fact and nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic escape-hatch tool with no output schema, the description covers purpose, alternatives, and the write-allowlist constraint. It would be stronger if it hinted at success/failure signalling or that responses are raw LCU JSON, but nothing critical to invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so method, path, and body are already documented in the schema, including the pattern for path and the note that body is omitted for GET/DELETE. The description adds no parameter detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (send an HTTP request with any verb) and resource (internal LCU REST endpoint), and enumerates the supported verbs. It is immediately distinguishable from lol_get, lol_eval, and the lol_workflow_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: prefer this over lol_eval for REST, prefer lol_get for safe reads, prefer lol_workflow_* for common automated actions, and use this for mutations or uncovered endpoints. When-to-use, when-not, and named alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_restart_uxRestart the League Client UXA
Destructive

Terminate and relaunch the League Client user interface frontend (Chromium Embedded Framework renderers) via Riot Client API. Use this tool to recover from a frozen client UI, apply Pengu Loader plugin changes, or reload corrupted UI states without closing the League game process. For gameflow or lobby navigation, use lol_workflow_* tools instead. Behavior: Destructive to current UI state (severs active CDP and WebSocket connections). When waitForReady is true, cleanly polls until LCU HTTP API and CDP page target are restored. Prerequisite: Riot Client and LCU process must be running.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitForReadyNoWhether to block and poll until both LCU REST API and CDP renderer target are fully responsive after restart
timeoutSecondsNoMaximum seconds to wait for UX and CDP readiness when waitForReady is true (2-60, default: 20)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: it discloses the destructive effect ('severs active CDP and WebSocket connections'), explains what waitForReady does (polling until LCU HTTP API and CDP page target are restored), and states the prerequisite that Riot Client and LCU must be running. This matches and enriches the destructiveHint/openWorldHint annotations rather than contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then use-cases, exclusions, behavior, and prerequisite in a tight sequence. Slightly dense (a long parenthetical and a 'Behavior:' clause), but each sentence carries distinct routing or behavioral value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema, the description covers the action, its side effects, the sibling alternative, the recovery semantics of waitForReady, and the required prerequisites. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (waitForReady, timeoutSeconds) are already fully documented in the schema, establishing a baseline of 3. The description restates waitForReady's polling behavior but adds no syntax or default information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Terminate and relaunch the League Client user interface frontend (Chromium Embedded Framework renderers)') with the mechanism (Riot Client API). It also explicitly distinguishes itself from lol_workflow_* siblings, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use cases (frozen client UI, apply Pengu Loader plugin changes, reload corrupted UI states) and names the alternative for a different goal ('For gameflow or lobby navigation, use lol_workflow_* tools instead'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_schemaQuery LCU OpenAPI/Swagger schemaA
Read-onlyIdempotent

Inspect internal LCU API endpoint signatures, parameters, request bodies, and data models using the League client's live OpenAPI/Swagger v2 specification. Use this tool to find the exact request schema, parameter types, or response models before invoking lol_request. For a lightweight list of common endpoints, use lol_endpoints instead. For static game assets (champions, items, runes), use lol_static instead. Prerequisite: League client must be running to fetch swagger doc; cached in memory after first load.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoLCU path or keyword to search (e.g. "/lol-lobby/v2/lobby" or "gameflow")
modelNoLook up a specific definition/model schema name (e.g. "LolLobbyLobbyDto")
methodNoFilter operations by HTTP method
refreshNoForce re-fetch the swagger schema from the League Client

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds genuinely useful behavior beyond that: the live League client must be running and results are cached in memory after first load. No return-shape detail, but the input/output expectations are otherwise clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then routing alternatives, then the prerequisite. No redundant sentences; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description names what you retrieve (signatures, parameters, request bodies, data models) and discloses the runtime prerequisite and caching behavior. An agent has enough to invoke it correctly; only the exact return format is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with per-parameter descriptions (path keyword, model name, method enum, refresh flag), so the schema carries the semantics. The description adds only the general purpose of lookups ('find the exact request schema, parameter types, or response models'), which does not go much beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Inspect) and resource (LCU API endpoint signatures, parameters, request bodies, data models) and ties it to the live OpenAPI/Swagger v2 spec. An agent can immediately distinguish it from lol_request, lol_endpoints, and lol_static without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use ('before invoking lol_request') and names two alternatives with their selecting conditions (lol_endpoints for a lightweight list, lol_static for game assets). Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_staticResolve static game data ids to namesA
Read-onlyIdempotent

Resolve numeric League of Legends game data IDs to human-readable names and metadata using locally served static client documents. Use this tool to translate raw championId, itemId, perkId, summonerSpellId, mapId, or queueId received from other tools or telemetry events into readable entities. For live client state, use lol_get instead. For OpenAPI endpoint models, use lol_schema instead. Prerequisite: League client must be running to fetch static bundles; results are cached.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoExact ids to resolve (e.g. [157] for a championId)
kindYesWhich static document to query
limitNoMaximum entries to return
queryNoCase-insensitive substring match against the entry name
fieldsNoExtra fields to include beyond the default {id, name}, e.g. ["roles"]
offsetNoEntries to skip, to page past a truncated result
refreshNoForce re-fetch of this document from the client

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is largely covered. The description adds genuine value beyond that: the client-running prerequisite and the caching behavior of results, which the annotations do not express. It stops short of describing the failure mode when the client is not running, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences: purpose front-loaded, then usage, then alternatives, then prerequisite. Every sentence carries distinct, non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter read tool with no output schema, the description covers purpose, routing, and the key operational constraint. It does not describe the return shape (default {id, name} plus optional fields) or pagination semantics for limit/offset, which the schema only partially implies, so a minor gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description goes further by mapping raw ID types (championId, itemId, perkId, summonerSpellId, mapId, queueId) to the kind of document being queried, which clarifies the semantic link between the ids and kind parameters beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolve) and resource (static game data IDs) and enumerates the exact ID kinds handled (championId, itemId, perkId, etc.), so an agent knows precisely what it produces. It also names the sibling tools it is not, making it distinguishable from lol_get and lol_schema without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (translating raw IDs from other tools or telemetry), names the alternatives for adjacent cases (lol_get for live client state, lol_schema for OpenAPI models), and states the prerequisite that the League client must be running. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_statusLeague client statusA
Read-onlyIdempotent

Inspect overall connectivity, health, and configuration status across all server subsystems (LCU REST/WebSocket, Chrome DevTools Protocol, event buffers, live game engine). Use this tool first when diagnosing connection failures, verifying lockfile detection, or checking effective allowlist rules and allowEval permissions. Behavior: Safe and read-only; requires no client write permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's 'Safe and read-only; requires no client write permissions' is largely redundant. It adds the subsystem coverage list but discloses nothing about cost, latency, or what a failed subsystem looks like in the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope statement and diagnostic guidance in two tight sentences. The trailing 'Behavior:' clause repeats annotation data rather than earning its place, a minor inefficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a diagnostic tool with no output schema and no parameters, the description should hint at what the status report contains (per-subsystem fields, error indicators). It names the subsystems inspected but leaves the agent guessing about the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate. No parameter-level guidance is needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (inspect) and enumerates the exact resources covered: LCU REST/WebSocket, CDP, event buffers, live game engine. This scope enumeration clearly distinguishes it from narrow siblings like lol_chat_status or lol_cdp_targets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete activation contexts ('use this tool first when diagnosing connection failures', 'verifying lockfile detection', 'checking allowlist rules and allowEval permissions'). Strong when-to-use guidance, though it names no alternative or when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_wamp_record_dumpDump the recorded WAMP timelineA
Read-onlyIdempotent

Retrieve recorded WAMP timeline entries, socket lifecycle events, and cumulative per-URI statistics from the recorder buffer. Use this tool to inspect recorded WebSocket frames and diagnose whether a quiet URI received no traffic or the socket disconnected. Prerequisite: lol_wamp_record_start must have been called. For general timeline correlation across multiple subsystems, use lol_forensics_correlate. Behavior: Returns timestamped entries, dropped frame count, and cumulative per-URI stats surviving eviction.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoFilter event entries by URI prefix; lifecycle events survive this filter
kindsNoFilter entries strictly to specified event kinds (e.g. ["event", "open", "close", "error", "reconnect"])
limitNoMaximum entries to return (1-2000, default: 100)
sinceNoLower timestamp bound in epoch milliseconds
untilNoUpper timestamp bound in epoch milliseconds
cursorNoSequence cursor from a previous dump call for incremental pagination

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, but the description adds substantial context beyond that: it discloses the returned data shape (timestamped entries, dropped frame count, cumulative stats surviving eviction), the prerequisite, and the diagnostic purpose. No behavioral traits are contradicted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by usage context, prerequisite, alternative, and behavior. Every sentence contributes useful information without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six optional parameters, full schema descriptions, a meaningful annotation set, and no output schema, the description supplies the necessary context: what it returns, when to use it, the prerequisite, and an alternative tool. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters are fully documented in the input schema with descriptions, enums, ranges, and pagination semantics. The description adds no parameter-specific syntax or meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Retrieve recorded WAMP timeline entries, socket lifecycle events, and cumulative per-URI statistics') and clearly distinguishes this from sibling tools by naming an explicit alternative for broader correlation. An agent can identify the tool's scope without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use the tool ('inspect recorded WebSocket frames and diagnose whether a quiet URI received no traffic or the socket disconnected'), gives the prerequisite ('lol_wamp_record_start must have been called'), and names an explicit alternative for a different use case ('For general timeline correlation across multiple subsystems, use lol_forensics_correlate').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_wamp_record_startStart recording LCU WAMP trafficA
Destructive

Open a dedicated secondary WAMP WebSocket connection to the League Client and record raw frames alongside socket lifecycle events into a chronological timeline. Use this tool for deep protocol diagnostics, debugging connection drops, or analyzing WAMP message flows. For lightweight high-level event polling, prefer lol_events_start instead. To dump recorded frames, call lol_wamp_record_dump. Behavior: Captures open, close (with exit codes), errors, reconnect gaps, and message frames. Starting while already recording throws an error unless restart is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
urisNoOptional array of specific URI paths to subscribe to (e.g. ["/lol-gameflow/v1/gameflow-phase"]); defaults to the full firehose
restartNoWhether to discard an active recording session and immediately begin a fresh timeline (default: false)

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a mutation (readOnlyHint=false, destructiveHint=true, idempotentHint=false), and the description adds real behavioral context beyond them: what is captured (open/close with exit codes, errors, reconnect gaps, frames) and the error condition for a double-start. It stops short of covering cost, auth, or connection lifetime, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then usage, then a labeled 'Behavior:' block — well organized and no filler. Slightly long due to the enumerated capture list, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent what is collected and where to retrieve it (lol_wamp_record_dump) and pairs with lol_wamp_record_stop as its lifecycle counterpart. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3. The description earns an extra point by explaining the restart semantics operationally ('throws an error unless restart is true'), which clarifies the consequence of the flag beyond the schema's phrasing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Open a dedicated secondary WAMP WebSocket connection... record raw frames') and states the scope precisely. It actively distinguishes itself from lol_events_start (lightweight polling) and points to lol_wamp_record_dump for retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use cases are given (deep protocol diagnostics, debugging connection drops, analyzing message flows) plus a named alternative for the lighter use case ('prefer lol_events_start instead') and the follow-up tool for dumping. This is textbook routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_wamp_record_stopStop recording LCU WAMP trafficA
Idempotent

Terminate the dedicated WAMP recorder WebSocket connection and halt traffic capture. Use this tool when WAMP diagnostic recording is finished. Recorded entries remain accessible via lol_wamp_record_dump. Behavior: Idempotent; safe to call when already stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, readOnlyHint=false and openWorldHint=true, so the safety profile is fully covered by structured data. The description's 'Idempotent; safe to call when already stopped' largely restates the annotation; the only genuinely additive behavioral fact is that captured entries persist and can be retrieved via the dump tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose first, then the usage trigger, then the retrieval path and safety note. No filler or restated tool name beyond the opening verb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter stop tool with rich annotations and no output schema, the description covers what it does, when to call it, that it is safe to repeat, and where the captured data lives afterward. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to disambiguate and the baseline of 4 applies. The description correctly does not invent parameter detail where none exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Terminate the dedicated WAMP recorder WebSocket connection and halt traffic capture.' This clearly distinguishes it from the sibling lol_wamp_record_start and lol_wamp_record_dump without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the trigger ('when WAMP diagnostic recording is finished') and routes the agent to the correct alternative for retrieving results ('Recorded entries remain accessible via lol_wamp_record_dump'). It also pre-empts the redundant-call question by noting it is safe to call when already stopped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_champ_selectPick, hover, or ban champion in champion selectA
Destructive

Resolves local player action in active champion select, chooses champion by name or ID, and hovers or locks in. Use this tool during draft or blind pick phases to hover or confirm champion selection or ban. Always prefer this dedicated workflow tool over manual REST calls or lol_eval. For adjusting rune/perk pages during champ select, use lol_workflow_runes_set instead. For general lobby management, use lol_workflow_lobby. A lock-in cannot be undone. Needs "PATCH /lol-champ-select/v1/session/actions/*" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoAction type: "pick" to select champion, or "ban" to ban championpick
championYesChampion name (e.g. "Aatrox", "Yasuo") or numeric champion ID (e.g. 266, 157)
completedNoWhether to immediately lock in (true) or only hover the choice (false)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and idempotent=false, but the description adds meaningful context beyond them: 'A lock-in cannot be undone' and the required write allowlist entry ('PATCH /lol-champ-select/v1/session/actions/*'). It doesn't cover failure modes or timing constraints in champ select, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then usage, then alternatives, then the safety/permission notes. Slightly dense with three sibling references and a raw endpoint path, but each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema, it covers the essentials: what it does, when to use it, what it irreversibly changes, and the permission prerequisite. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents type, champion, and completed. The description's 'by name or ID' and 'hovers or locks in' merely restate what the schema already says, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs and resource: 'Resolves local player action in active champion select, chooses champion by name or ID, and hovers or locks in.' It clearly distinguishes itself from the sibling bench tool and other workflow tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('during draft or blind pick phases to hover or confirm champion selection or ban') and names alternatives for adjacent needs (lol_workflow_runes_set for rune pages, lol_workflow_lobby for lobby management), plus a directive to prefer it over manual REST/lol_eval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_champ_select_benchSwap champion with ARAM benchA
Destructive

Swaps your active champion with an available champion on the ARAM bench by name or numeric champion ID. Use this tool during ARAM champion select when a preferred champion becomes available on the shared team bench. For regular draft pick, hover, or ban actions, use lol_workflow_champ_select instead. For setting summoner spells, use lol_workflow_spells_set. Behavior: Mutates active player champion assignment; fails cleanly if target champion is not on the bench or champ select is inactive. Needs "POST /lol-champ-select/v1/session/bench/swap/*" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
championYesChampion name (e.g. "Ahri", "Yasuo") or numeric ID on the bench.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the failure mode (fails cleanly if the champion is not on the bench or champ select is inactive) and the required write-allowlist endpoint. Combined with the destructive/non-idempotent hints, an agent knows the mutation semantics, its safety profile, and the prerequisite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence, followed by usage scope, alternatives, and behavior. Every sentence carries distinct load with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation with no output schema, the description covers purpose, triggers, alternatives, failure conditions, and the required endpoint. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents the single 'champion' parameter and its name-or-numeric-ID type. The description restates the same identifier forms but adds no new syntax, formatting, or constraint details (e.g. casing, bench position), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (swaps) and resource (active champion with an ARAM bench champion), plus the accepted identifier forms. It explicitly distinguishes itself from the sibling lol_workflow_champ_select, so an agent can tell them apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes usage to ARAM champion select when a preferred champion appears on the shared bench, and routes to named alternatives: lol_workflow_champ_select for draft/hover/ban and lol_workflow_spells_set for spells. When-to-use and when-to-use-something-else are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_honorSubmit teammate honor voteA
Destructive

Submits a post-game honor vote for an eligible allied teammate by summoner name, gameName, or summonerId with a selected honor category ("COOL", "SHOTCALLER", or "HEART"). Use this tool when voting on the post-match honor ballot before returning to the lobby. For recreating the previous game lobby, use lol_workflow_play_again. For inspecting post-game match statistics, use lol_analytics_match_detail. Behavior: Submits an irreversible honor vote; fails cleanly if no honor ballot is active or target is not found on ballot. Needs "POST /lol-honor/v1/honor" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesTarget teammate summoner name, gameName, or summonerId.
honorCategoryNoHonor badge category ("COOL", "SHOTCALLER", or "HEART", default "HEART").HEART

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive, non-idempotent write behavior, and the description adds valuable context beyond them: the vote is irreversible, it fails cleanly when no ballot is active or the target is not on the ballot, and it requires a specific write-allowlisted endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose, followed by usage/alternatives and behavioral caveats. Every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the description covers purpose, alternatives, failure modes, irreversibility, and the write-allowlist requirement. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters and the enum are already fully documented. The description repeats the same identifier and category information without adding syntax, format, or edge-case detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (submits) and resource (post-game honor vote for an eligible allied teammate), plus the accepted target identifiers and honor categories. It is clearly distinguishable from siblings like lol_workflow_play_again and lol_analytics_match_detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (while voting on the post-match honor ballot before returning to the lobby) and names two alternative tools with the conditions that select them. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_lobbyCreate game lobby and optionally start matchmakingA
Destructive

Creates a custom or matchmade lobby for a queue (e.g. 420 for Ranked Solo, 450 for ARAM) and optionally starts matchmaking queue search. Replaces the current lobby if it is on another queue. If the search fails after a lobby was created from nothing, that lobby is closed again. Use this tool to set up queues or queue up with a party. Always prefer this dedicated workflow tool over manual REST calls or lol_eval. For accepting the ready check when queue pops, use lol_workflow_matchmaking_accept instead. To look up queue IDs, query lol_static with kind "queues". Needs "POST /lol-lobby/v2/lobby" (and, for startMatchmaking, "POST /lol-lobby/v2/lobby/matchmaking/search" plus "DELETE /lol-lobby/v2/lobby" to undo) on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
queueIdYesTarget queue ID (e.g. 420 for Ranked Solo/Duo, 440 for Ranked Flex, 450 for ARAM, 400 for Normal Draft)
startMatchmakingNoWhether to immediately start searching for a match after lobby creation

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive and non-idempotent behavior, but the description adds crucial specifics: it replaces an existing lobby on another queue, rolls back a newly created lobby if search fails, and lists the required write-allowlist endpoints. This is rich behavioral context beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action, then adds only essential behavioral notes, usage routing, and prerequisite endpoints. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description covers purpose, side effects, rollback behavior, alternatives, and auth requirements. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description adds queue ID examples and clarifies that startMatchmaking means immediately searching, but this largely mirrors schema content. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (creates) and resource (custom or matchmade lobby) and defines scope via queue examples and optional matchmaking. It clearly distinguishes itself from siblings like lol_workflow_matchmaking_accept and lol_static.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (set up queues or queue up with a party), when to use alternatives (accept ready check with lol_workflow_matchmaking_accept; look up queue IDs with lol_static), and instructs to prefer this over manual REST calls or lol_eval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_lobby_inviteInvite summoners to active party lobbyA
Destructive

Dispatches invitations to one or more summoner PUUIDs to join the current game lobby party. Use this tool after creating a lobby when inviting friends or premade party members. For creating a lobby or starting matchmaking search, use lol_workflow_lobby instead. For accepting match ready checks, use lol_workflow_matchmaking_accept. Behavior: Mutates lobby invitation state; fails with diagnostic error if not currently in a lobby. Needs "POST /lol-lobby/v2/lobby/invitations" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
toSummonerPuuidsYesArray of summoner PUUID strings to invite to the lobby.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/destructive/non-idempotent/open-world profile, so the bar is lower. The description still adds real value beyond them: it discloses the failure mode ('fails with diagnostic error if not currently in a lobby') and an authorization prerequisite ('Needs POST /lol-lobby/v2/lobby/invitations on the write allowlist'). It does not describe what happens to already-invited players or rate limits, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then routing alternatives, then behavior, then the allowlist requirement. Every sentence carries distinct information, though the raw endpoint path in the trailing Behavior sentence is slightly implementation-flavored and the description runs to four sentences where three would suffice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation tool with no output schema, the description covers purpose, routing, failure conditions, and auth prerequisites. There is no output to explain and nothing an agent needs to call it correctly that is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is fully documented in the schema, so baseline 3 applies. The description adds no syntax, format, or multiplicity detail beyond what the schema already provides. No params-related gap, but no added meaning either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Dispatches invitations to one or more summoner PUUIDs to join the current game lobby party'), which is unambiguous. It distinguishes itself from the two most confusable siblings by name, so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the trigger condition ('after creating a lobby when inviting friends or premade party members') and names two alternatives with their respective conditions ('use lol_workflow_lobby' for creating/searching, 'lol_workflow_matchmaking_accept' for ready checks). This is a complete when/when-not map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_loot_disenchantDisenchant loot shards for essenceA
Destructive

Disenchants specified champion or skin shards by lootId to yield Blue or Orange Essence. Use this tool to convert unwanted or duplicate shards into crafting essence. For viewing total potential essence yields before disenchanting, use lol_analytics_loot_summary first. Behavior: Consumes inventory items; cannot be undone once crafted. Needs "POST /lol-loot/v1/recipes/*/craft" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of shards of this type to disenchant.
lootIdYesExact lootId of shard to disenchant (e.g. "CHAMPION_RENTAL_103").

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the mutation risk is partially covered. The description adds real value beyond them: it states inventory items are consumed, that the action cannot be undone, and the write-allowlist requirement for POST /lol-loot/v1/recipes/*/craft. It stops short of describing failure modes or per-call limits, but the irreversibility and permission context are well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool does, then usage routing, then a clearly labeled Behavior: line. Every sentence carries distinct information with no repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, the definition covers purpose, routing, irreversibility, and permission requirements. The only mild gap is how the call reports success/result counts, but the essence outcome is stated, so an agent has what it needs to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both lootId and count are already fully documented in the schema, including the example format. The description only restates 'by lootId' and adds nothing about count semantics or batching behavior, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Disenchants) + resource (champion or skin shards) + keying parameter (by lootId) + outcome (Blue or Orange Essence). Nothing in the sibling list does the same thing, and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('convert unwanted or duplicate shards into crafting essence') and an explicit alternative with a condition: use lol_analytics_loot_summary first to preview potential yields. That is a genuine routing rule, not just implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_matchmaking_acceptAccept matchmaking ready checkA
Idempotent

Checks matchmaking ready check status and accepts if match is found. Use this tool when automated match acceptance is needed during queue pop. Always prefer this dedicated workflow tool over manual REST calls or lol_eval. For creating a lobby or initiating matchmaking queue search, use lol_workflow_lobby instead. For champion selection, use lol_workflow_champ_select. Behavior: Safe and idempotent; no-op if no ready check is active. Needs "POST /lol-matchmaking/v1/ready-check/accept" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is partly covered. The description adds meaningful context beyond the annotations: it names the specific endpoint that must be write-allowlisted ('POST /lol-matchmaking/v1/ready-check/accept') and clarifies the no-op behavior when no ready check is active. It does not describe rate limits or return values, but the annotations carry the core behavioral burden here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then routes to alternatives. It is appropriately sized for a zero-parameter workflow tool. A minor point: the sentence about the write allowlist endpoint is useful but slightly operational; overall there is no significant waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that this is a zero-parameter, annotation-rich tool with no output schema, the description provides what an agent needs: purpose, usage conditions, alternatives, safety behavior, and a critical operational prerequisite (the allowlisted endpoint). It is nearly complete, though it could have mentioned whether it returns a confirmation or relies on side effects, but no output schema exists so that is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the baseline is 4. The description does not need to explain parameter syntax and correctly avoids inventing any. It does add context about the state dependency (no-op if no ready check is active), which is useful even though it is not a parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (accepts) and resource (matchmaking ready check), and distinguishes itself from siblings by naming lol_workflow_lobby and lol_workflow_champ_select as the correct tools for adjacent workflow steps. An agent can tell exactly what this tool does versus the other lol_workflow_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use it ('during queue pop', 'when automated match acceptance is needed') and when not to use it, naming two alternatives and the exact cases they cover. The directive to prefer this over manual REST calls or lol_eval removes ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_play_againRecreate game lobby from post-game screenA
Destructive

Triggers lobby recreation with the previous game queue and party settings from the End of Game or post-match screen. Use this tool after a match completes to quickly return to a queue lobby without manually reselecting game modes. For creating a brand-new lobby with a specific queue ID, use lol_workflow_lobby instead. For honoring teammates, use lol_workflow_honor. Behavior: Mutates client gameflow state; requires client to be in EndOfGame or PreEndOfGame phase. Needs "POST /lol-lobby/v2/play-again" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the concrete precondition ('requires client to be in EndOfGame or PreEndOfGame phase'), the nature of the mutation ('mutates client gameflow state'), and an operational requirement ('needs POST /lol-lobby/v2/play-again on the write allowlist'). This is consistent with destructiveHint=true and readOnlyHint=false and adds information the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and its source state, then routes to alternatives, then states preconditions and the allowlist requirement. Three sentences, each carrying distinct decision-relevant information with no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, no-output-schema mutation guarded by annotations, the description supplies everything an agent needs: what it does, when it is valid, what it mutates, the alternative tools, and the required write permission. No meaningful gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema baseline is 4. The description usefully clarifies that the queue and party settings are inherited implicitly rather than passed in, which explains the empty schema but adds no further per-parameter detail (none exists to add).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('triggers lobby recreation') plus the exact inputs it reuses ('previous game queue and party settings') and the screen it is invoked from. It explicitly distinguishes itself from siblings lol_workflow_lobby and lol_workflow_honor, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when ('use this tool after a match completes to quickly return to a queue lobby') and pairs it with two named alternatives plus the conditions that select them (brand-new lobby with a specific queue ID → lol_workflow_lobby; honoring teammates → lol_workflow_honor). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_runes_setSet or update active rune/perk pageA
DestructiveIdempotent

Creates or updates an editable rune page with specified primary/sub styles and perk IDs and sets it active. Reuses an existing page only when its name matches, so pages the user built by hand are left alone. Use this tool before or during champ select to configure runes for a specific champion build. Always prefer this dedicated workflow tool over manual REST calls or lol_eval. To look up numeric rune IDs from names or styles, query lol_static with kind "perks". Needs "POST /lol-perks/v1/pages" and "PUT /lol-perks/v1/pages/*" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the rune page; existing editable page with this name will be updatedAntigravity Runes
replaceNoIf true, updates existing page with matching name; if false, always creates a new page
subStyleIdYesSecondary rune path tree ID (e.g. 8000 Precision, 8100 Domination, 8200 Sorcery, 8300 Inspiration, 8400 Resolve)
primaryStyleIdYesPrimary rune path tree ID (e.g. 8000 Precision, 8100 Domination, 8200 Sorcery, 8300 Inspiration, 8400 Resolve)
selectedPerkIdsYesArray of 9 perk IDs (keystone + 3 primary perks + 2 secondary perks + 3 stat shards)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true; the description usefully scopes that destructiveness by explaining pages are reused only on name match and hand-built pages are left untouched, and it names the required write allowlist endpoints. It stops short of describing the response or what happens on the create path, but adds real value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences, each earning its place: purpose first, then reuse semantics, then use context, then alternatives, then the ID-lookup pointer and auth requirement. No filler or restated name/title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world write tool with no output schema, the description covers prerequisites (perk IDs via lol_static), permissions (the two allowlist endpoints), and scoping of the destructive behavior. It omits any statement of what is returned or a failure mode, which keeps it just short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including examples for path tree IDs and a breakdown of the 9-perk array, so the schema carries the load. The description only gestures at reuse-vs-create behavior ("reuses an existing page only when its name matches"), which is already implied by the `replace` and `name` parameters; it adds little beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (creates/updates) plus the resource (editable rune page), the payload it takes (primary/sub styles, perk IDs), and the side effect of setting the page active. It is clearly distinguishable from the many read/telemetry siblings like lol_static and lol_analytics_*.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it (before or during champ select for a champion build), gives a preference rule (use this dedicated workflow tool over manual REST calls or lol_eval), and routes the agent to lol_static with kind "perks" for the ID lookup prerequisite. When-to-use, alternatives, and a dependency are all spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lol_workflow_spells_setConfigure summoner spells in champion selectA
DestructiveIdempotent

Resolves summoner spell names (case-insensitive, e.g. "flash", "ignite", "smite", "teleport") or integer IDs and updates the player's spell selection in active champion select. Use this tool during champion select to equip appropriate summoner spells for your role. For configuring rune pages, use lol_workflow_runes_set instead. For picking or hovering champions, use lol_workflow_champ_select. Behavior: Mutates player spell slots; idempotent when setting the same spells. Requires champion select session to be active. Needs "PATCH /lol-champ-select/v1/session/my-selection" on the write allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
spell1YesPrimary summoner spell name (e.g. "flash", "ignite") or numeric ID.
spell2NoSecondary summoner spell name or numeric ID.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly false, destructive true, idempotent true, and openWorld, so the safety profile is provided. The description adds mutation scope (player spell slots), the idempotency condition, the prerequisite of an active champion select session, and the required write allowlist endpoint—context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and resource, then usage, alternatives, and operational requirements in compact, labeled sentences. Every sentence earns its place without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with annotation coverage and no output schema, the description supplies prerequisites, idempotency, mutation effect, and sibling alternatives. An agent has enough information to call it correctly and avoid related tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters. The description adds that spell names are case-insensitive and repeats examples of accepted names/IDs, which is a small but useful extension beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolves spell names/IDs and updates selection) and resource (summoner spells in champion select). It also explicitly names sibling tools for rune configuration and champion selection/hovering, so an agent can distinguish it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use during champion select to equip spells for your role, and routes rune configuration to lol_workflow_runes_set and champion picking/hovering to lol_workflow_champ_select. Conditions and alternatives are fully covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 55 tool updatesv0.6.0
    • Addedlol_analytics_champ_select_scout
    • Addedlol_analytics_live_combat
    • Addedlol_analytics_loot_summary
    • Addedlol_analytics_match_detail
    • Addedlol_analytics_match_history
    • Addedlol_analytics_player
    • Changedlol_cdp_console_tail7 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"seq cursor from a previous tail"New value: +"Sequence cursor from a previous tail call for incremental polling"
      • changedInput schema / properties / level / description
        Previous value: -"console severity, e.g. \"error\" or \"warning\""New value: +"Filter by console severity level, e.g. \"error\", \"warning\", \"info\", or \"log\""
      • changedInput schema / properties / limit / description
        Previous value: -"max entries, default 100"New value: +"Maximum number of entries to return (1-2000, default: 100)"
      • changedInput schema / properties / since / description
        Previous value: -"lower bound on ts, epoch milliseconds"New value: +"Lower timestamp bound in epoch milliseconds; excludes older entries"
      • changedInput schema / properties / targetId / description
        Previous value: -"restrict to one renderer incarnation"New value: +"Filter entries to a specific CDP renderer target ID"
      • changedInput schema / properties / text / description
        Previous value: -"case-insensitive substring of the message"New value: +"Case-insensitive substring filter matching log message text"
      • changedInput schema / properties / until / description
        Previous value: -"upper bound on ts, epoch milliseconds"New value: +"Upper timestamp bound in epoch milliseconds; excludes newer entries"
    • Addedlol_cdp_dom_tree
    • Addedlol_cdp_network_body
    • Addedlol_cdp_network_bottlenecks
    • Addedlol_cdp_network_start
    • Addedlol_cdp_network_stop
    • Addedlol_cdp_network_summary
    • Addedlol_cdp_network_tail
    • Addedlol_cdp_performance
    • Changedlol_cdp_screenshot4 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Image format"New value: +"Image encoding format: \"png\" (lossless), \"jpeg\" (compressed), or \"webp\""
      • changedInput schema / properties / quality / description
        Previous value: -"Compression quality for jpeg/webp"New value: +"Image compression quality from 0 to 100; only applicable when format is \"jpeg\" or \"webp\""
      • changedInput schema / properties / savePath / description
        Previous value: -"Optional file path to save screenshot on disk"New value: +"Optional absolute filesystem path (e.g. \"C:/temp/screenshot.png\") to save the screenshot on disk"
      • changedInput schema / properties / targetId / description
        Previous value: -"CDP target ID to screenshot (defaults to active main page)"New value: +"Specific CDP target ID to screenshot (defaults to active main client page; query lol_cdp_targets for options)"
    • Addedlol_cdp_storage
    • Addedlol_chat_send
    • Addedlol_chat_status
    • Changedlol_dom_query3 fields changed
      • changedInput schema / properties / all / description
        Previous value: -"true returns every match, false (default) the first"New value: +"If true, returns an array of all matching elements; if false (default), returns only the first matching element"
      • changedInput schema / properties / props / description
        Previous value: -"extra element properties or attributes to include, e.g. [\"disabled\", \"href\"]"New value: +"Array of additional DOM element properties or attributes to extract, e.g. [\"disabled\", \"href\", \"textContent\"]"
      • changedInput schema / properties / selector / description
        Previous value: -"CSS selector, e.g. \".lol-uikit-flat-button\""New value: +"CSS selector matching target elements, e.g. \".lol-uikit-flat-button\" or \"#rcp-fe-viewport\""
    • Changedlol_endpoints1 field changed
      • changedInput schema / properties / filter / description
        Previous value: -"e.g. \"champ-select\", \"ready-check\", \"summoner\""New value: +"Case-insensitive substring filter matching verb, path, group, or description, e.g. \"champ-select\" or \"ready-check\""
    • Changedlol_eval2 fields changed
      • changedInput schema / properties / awaitPromise / description
        Previous value: -"true to await a returned promise"New value: +"Whether to await resolution if the evaluated expression returns a Promise (default: false)"
      • changedInput schema / properties / expression / description
        Previous value: -"a JavaScript expression, not a statement list"New value: +"A single valid JavaScript expression to evaluate (not a statement list), e.g. \"window.location.href\" or \"document.title\""
    • Changedlol_events_poll3 fields changed
      • changedInput schema / properties / filter / description
        Previous value: -"extra URI prefix applied at poll time"New value: +"Optional case-insensitive URI prefix substring applied as a post-filter at poll time"
      • changedInput schema / properties / limit / description
        Previous value: -"max entries to return, default 100"New value: +"Maximum number of event entries to return (1-500, default: 100)"
      • changedInput schema / properties / since / description
        Previous value: -"cursor from the previous poll; omit to start at 0"New value: +"Monotonic sequence cursor from the previous poll call; omit or set to 0 to read from start of buffer"
    • Changedlol_events_start1 field changed
      • changedInput schema / properties / filters / description
        Previous value: -"URI prefixes, e.g. [\"/lol-champ-select/\", \"/lol-gameflow/\"]"New value: +"Array of URI prefix filters applied at ingest (e.g. [\"/lol-champ-select/\", \"/lol-gameflow/\"]); omit for unfiltered firehose"
    • Addedlol_forensics_anomaly_detect
    • Addedlol_forensics_bundle
    • Changedlol_forensics_correlate9 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Output format"New value: +"Output format: \"narrative\" (Markdown), \"events\" (JSON array), or \"summary\""
      • changedInput schema / properties / levels / description
        Previous value: -"Filter CDP console entries by level"New value: +"Filter CDP console log entries by severity levels: \"error\", \"warning\", \"info\", \"log\", \"debug\""
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum total events to return"New value: +"Maximum total events to return across all streams (1-1000, default: 100)"
      • addedInput schema / properties / logLevel
        Added value: +{
        +  "description": "Filter disk log entries by log level string",
        +  "type": "string"
        +}
      • addedInput schema / properties / networkFailedOnly
        Added value: +{
        +  "description": "If true, restricts CDP network requests strictly to transport/protocol failures",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / since / description
        Previous value: -"Lower timestamp bound in epoch ms or clock ts"New value: +"Lower timestamp bound in epoch milliseconds or clock timestamp"
      • addedInput schema / properties / sources
        Added value: +{
        +  "description": "Array of telemetry stream sources to include: \"wamp\", \"cdp\", \"network\", \"logs\", \"game\"",
        +  "items": {
        +    "enum": [
        +      "wamp",
        +      "cdp",
        +      "network",
        +      "logs",
        +      "game"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / until / description
        Previous value: -"Upper timestamp bound in epoch ms or clock ts"New value: +"Upper timestamp bound in epoch milliseconds or clock timestamp"
      • changedInput schema / properties / uriPrefix / description
        Previous value: -"Filter WAMP events by URI prefix (e.g. /lol-gameflow/)"New value: +"Filter WAMP events by URI prefix (e.g. \"/lol-gameflow/\")"
    • Addedlol_forensics_export_har
    • Addedlol_game_all
    • Addedlol_game_events
    • Addedlol_game_player
    • Addedlol_game_stats
    • Changedlol_get1 field changed
      • addedInput schema / properties / path / description
        Added value: +"Absolute LCU REST endpoint path starting with \"/\", e.g. \"/lol-gameflow/v1/gameflow-phase\" or \"/lol-summoner/v1/current-summoner\""
    • Addedlol_launch_client
    • Addedlol_logs_sessions
    • Addedlol_logs_tail
    • Addedlol_logs_watch_poll
    • Addedlol_logs_watch_start
    • Addedlol_logs_watch_stop
    • Changedlol_request3 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"JSON request body; omit for verbs that take none"New value: +"JSON request body payload; omit for verbs that take none (such as GET or DELETE)"
      • addedInput schema / properties / method / description
        Added value: +"HTTP verb to execute against the LCU endpoint"
      • addedInput schema / properties / path / description
        Added value: +"Absolute LCU REST endpoint path starting with \"/\", e.g. \"/lol-gameflow/v1/gameflow-phase\" or \"/lol-summoner/v1/current-summoner\""
    • Changedlol_restart_ux2 fields changed
      • changedInput schema / properties / timeoutSeconds / description
        Previous value: -"Maximum seconds to wait for UX readiness when waitForReady is true"New value: +"Maximum seconds to wait for UX and CDP readiness when waitForReady is true (2-60, default: 20)"
      • changedInput schema / properties / waitForReady / description
        Previous value: -"Wait until both LCU API and CDP target are fully responsive after restart"New value: +"Whether to block and poll until both LCU REST API and CDP renderer target are fully responsive after restart"
    • Changedlol_schema1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"LCU path or keyword to search (e.g. /lol-lobby/v2/lobby or \"gameflow\")"New value: +"LCU path or keyword to search (e.g. \"/lol-lobby/v2/lobby\" or \"gameflow\")"
    • Addedlol_static
    • Changedlol_wamp_record_dump6 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"seq cursor from a previous dump"New value: +"Sequence cursor from a previous dump call for incremental pagination"
      • changedInput schema / properties / kinds / description
        Previous value: -"restrict to these entry kinds"New value: +"Filter entries strictly to specified event kinds (e.g. [\"event\", \"open\", \"close\", \"error\", \"reconnect\"])"
      • changedInput schema / properties / limit / description
        Previous value: -"max entries, default 100"New value: +"Maximum entries to return (1-2000, default: 100)"
      • changedInput schema / properties / since / description
        Previous value: -"lower bound on ts, epoch milliseconds"New value: +"Lower timestamp bound in epoch milliseconds"
      • changedInput schema / properties / until / description
        Previous value: -"upper bound on ts, epoch milliseconds"New value: +"Upper timestamp bound in epoch milliseconds"
      • changedInput schema / properties / uri / description
        Previous value: -"URI prefix filter, applied to event entries only"New value: +"Filter event entries by URI prefix; lifecycle events survive this filter"
    • Changedlol_wamp_record_start2 fields changed
      • changedInput schema / properties / restart / description
        Previous value: -"discard a running recording and start a fresh one"New value: +"Whether to discard an active recording session and immediately begin a fresh timeline (default: false)"
      • changedInput schema / properties / uris / description
        Previous value: -"subscribe per URI instead of the firehose, e.g. [\"/lol-gameflow/v1/gameflow-phase\"]"New value: +"Optional array of specific URI paths to subscribe to (e.g. [\"/lol-gameflow/v1/gameflow-phase\"]); defaults to the full firehose"
    • Addedlol_workflow_champ_select
    • Addedlol_workflow_champ_select_bench
    • Addedlol_workflow_honor
    • Addedlol_workflow_lobby
    • Addedlol_workflow_lobby_invite
    • Addedlol_workflow_loot_disenchant
    • Addedlol_workflow_matchmaking_accept
    • Addedlol_workflow_play_again
    • Addedlol_workflow_runes_set
    • Addedlol_workflow_spells_set
  2. 11 tool updatesv0.2.0
    • Addedlol_cdp_console_start
    • Addedlol_cdp_console_stop
    • Addedlol_cdp_console_tail
    • Addedlol_cdp_screenshot
    • Addedlol_cdp_targets
    • Addedlol_forensics_correlate
    • Addedlol_restart_ux
    • Addedlol_schema
    • Addedlol_wamp_record_dump
    • Addedlol_wamp_record_start
    • Addedlol_wamp_record_stop
  3. 9 tool updatesv0.1.0
    • First observedlol_dom_query
    • First observedlol_endpoints
    • First observedlol_eval
    • First observedlol_events_poll
    • First observedlol_events_start
    • First observedlol_events_stop
    • First observedlol_get
    • First observedlol_request
    • First observedlol_status

TDQS

A3.7/5.0

Scored across 61 tools

Disambiguation3/5

Many tools have overlapping diagnostic or monitoring purposes (e.g., lol_events_start vs lol_wamp_record_start, lol_cdp_network_summary vs lol_cdp_network_bottlenecks, multiple game/analytics tools). Descriptions explicitly guide selection with cross-references, so boundaries are mostly clear, but the sheer number of similar alternatives creates realistic misselection risk.

Naming Consistency4/5

All tool names use a consistent lol_ prefix and snake_case, with predictable category markers (cdp, logs, wamp, workflow, analytics, forensics, game). The pattern is not strictly verb_noun throughout (e.g., lol_get, lol_status, lol_schema), but it remains highly readable and mostly uniform.

Tool Count1/5

61 tools is an extreme mismatch for a single MCP server, far exceeding the 25+ threshold that already indicates excessive breadth. While each tool may have a niche, the count forces agents to navigate an unwieldy surface with many related start/stop/poll variants.

Completeness4/5

The tool surface is very comprehensive, covering LCU REST, CDP, WAMP, disk logs, live game telemetry, forensics, and automation workflows. Only minor gaps exist (e.g., some CRUD operations rely on the generic lol_request), but agents have workarounds and no major domain area is unaddressed.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    An 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.
    12
    12
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Provides MCP tools to query Liquipedia esports data (matches, teams, players, tournaments, placements, standings) via the Liquipedia v3 API and MediaWiki action API.
    8
    142 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides Roblox game inspection and manipulation capabilities through MCP, including exploring the instance hierarchy, editing properties, decompiling scripts, and interacting with remote events.
    1
    -