Warcraftlogs
Skill Postmodum37/warcraft-helper/.claude/skills/warcraftlogs
Claude Code skills for World of Warcraft raid analysis — WarcraftLogs API queries and mechanic-focused raid review
npx -y skills add Postmodum37/warcraft-helper --skill warcraftlogsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Query the WarcraftLogs API to answer World of Warcraft raiding and Mythic+ questions. Use this skill whenever the user mentions WarcraftLogs, WCL, raid parses, boss rankings, M+ scores, log analysis, combat logs, guild progression, DPS/HPS rankings, percentiles, or any WoW performance-related question. Also use when the user pastes a warcraftlogs.com URL, mentions a character name + server in a WoW context, asks about raid tier rankings, spec performance, or wants to compare players. Even casual questions like "how did I do last night" or "what's the best healer spec right now" should trigger this skill if there's any WoW context.
SKILL.md
6.9 KB, as published. Nobody here has run it
WarcraftLogs Skill
You have access to the WarcraftLogs v2 GraphQL API, which lets you pull real-time data about WoW raiding, Mythic+, character performance, combat log reports, and guild progression.
Current Content Defaults
When the user doesn't specify a raid, dungeon season, or expansion, always default to the current content:
- Expansion: Midnight (expansion ID 7)
- Current Raid: VS / DR / MQD (zone ID 46, difficulty 5 for Mythic, 4 for Heroic)
- Bosses: Imperator Averzian, Vorasius, Vaelgor & Ezzorak, Fallen-King Salhadaar, Lightblinded Vanguard, Crown of the Cosmos, Chimaerus the Undreamt God, Belo'ren Child of Al'ar, Midnight Falls
- Current M+ Season: Mythic+ Season 1 (zone ID 47)
- Current M+ Dungeons: Algeth'ar Academy, Magister's Terrace, Maisara Caverns, Nexus-Point Xenas, Pit of Saron, Seat of the Triumvirate, Skyreach, Windrunner Spire
If the user says "how are my parses" → query VS / DR / MQD Mythic by default. If the user says "my M+ score" → query Midnight M+ Season 1 by default. If the user mentions a specific older raid or season (e.g. Liberation of Undermine, TWW M+ Season 3), use that instead.
How It Works
- Figure out what the user is asking about
- Pick a query template from
references/queries.mdor construct a custom query usingreferences/schema.md - Execute via the bundled helper script:
<skill-path>/scripts/wcl.sh '<GRAPHQL_QUERY>'- Optional second argument for variables:
<skill-path>/scripts/wcl.sh '<QUERY>' '{"name": "value"}'
- Optional second argument for variables:
- Interpret the results and present them clearly
The script handles OAuth authentication automatically (including retry on expired tokens). Credentials are read from environment variables (WCL_CLIENT_ID, WCL_CLIENT_SECRET) or from a .env file at ${CLAUDE_SKILL_DIR}/.env.
Identifying What to Query
User gives a WarcraftLogs URL
Extract the report code from the URL: https://www.warcraftlogs.com/reports/ABC123 → code is ABC123.
Start with the report overview query (template #4) to get fights, then drill into specific fights with tables, deaths, or rankings.
User asks about a character
You need: character name, server slug (lowercase, hyphenated), and region (us, eu, kr, tw, cn).
If the user doesn't specify server/region, ask them. Common examples: "illidan"/"us", "tarren-mill"/"eu", "ragnaros"/"eu".
User asks about a guild
Same as character — need guild name, server slug, region.
User asks a meta question ("what's the best spec")
This requires aggregating data. WarcraftLogs doesn't have a direct "best spec" API endpoint. Instead:
- For raid: look at character zone rankings across multiple well-known players, or reference what you know about the current meta and use specific character lookups to validate.
- For M+: look at zone rankings with
metric: playerscorefor high-performing characters. - You can also suggest the user check the Archon tier lists on warcraftlogs.com, which aggregate this data at scale.
Reading the Results
Zone Rankings (zoneRankings)
Returns JSON with per-boss data. Key fields in the response:
bestAmount— highest DPS/HPS valuemedianPerformance— median percentile across killsrankPercent— best percentileallStars— overall ranking across all bossespoints,rank,regionRank,serverRank,possiblePoints
Present percentiles with color context:
- 99-100: gold parse (exceptional)
- 95-98: pink parse (excellent)
- 75-94: orange parse (great)
- 50-74: purple parse (good)
- 25-49: blue parse (average)
- 0-24: gray parse (below average)
Encounter Rankings (encounterRankings)
Returns JSON with individual kill details:
ranks[]— each kill withamount(DPS/HPS),duration,startTime,report { code, fightID },bracketDatabestAmount,medianPerformance,averagePerformancetotalKills
Report Tables
Returns JSON with entries[] or compositions[]. Each entry has:
name,id,total,activeTime,activeTimeReduced- For damage:
abilities[]with per-ability breakdowns - For deaths:
deathEvents[]with killing blow info
Guild Zone Rankings (zoneRanking)
Each sub-field (progress, speed, completeRaidSpeed) contains:
worldRank { number percentile color }— global rankregionRank { number }— region rankserverRank { number }— server rank
Query Efficiency
The API has a 3600 points/hour rate limit. Be mindful:
- Combine related data into single queries using GraphQL's structure
- Use aliases to compare multiple characters in one request (template #15)
- Fetch report overview first, then drill into specific fights rather than loading everything
- Check rate limit (template #14) if you're doing many queries
- Cache the token (the script already does this)
When doing a multi-step analysis (like "analyze this log"), plan your queries:
- First: report overview + master data (get fights and player IDs)
- Then: specific fight tables/rankings based on what's interesting
- Only fetch events if you need detailed timeline data (most expensive)
Presenting Results
- Format numbers: DPS as
X.XXkorX.XXM, durations asXm Xs - Show percentiles prominently — they're what players care about most
- Use tables for multi-boss comparisons
- When comparing characters, show side-by-side
- Timestamps from the API are Unix milliseconds — convert to readable dates
- For report analysis, summarize before diving into details: "This was a 3-hour raid session with 8/8 Normal kills and 5/8 Heroic, wiping 4 times on Sprocketmonger"
Reference Files
- Read
references/queries.mdfor ready-to-use query templates (covers ~80% of questions) - Read
references/schema.mdfor the full API schema when you need to construct custom queries - The schema reference includes current zone IDs, encounter IDs, difficulty values, metric names, and enum values
Handling Errors
nullcharacter/guild result: name or server is wrong. Ask the user to double-check.nullrankings: character may have no logs for that zone/difficulty, or rankings are hidden.- Token error: credentials may be missing. Check that
.envfile exists at${CLAUDE_SKILL_DIR}/.env. - Rate limit exceeded: tell the user to wait (check
pointsResetInfrom rate limit query). - Archived report: older reports may require a subscription for event/table data.