Skip to content

Guild Wars 1 Build Compiler

by Graphmaxer · remote · no sign-in to list tools · v1.1.3 · published by GitHub user Graphmaxer

GW1 build compiler: skill data, template code encode/decode, validation, hero roster. Read-only.

Changes · 3

8 tools: 3 change things and 5 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http gw1 https://gw1-mcp.graphmaxer.workers.dev/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The input schema at properties.name.description contains "every other tool", wording about other tools or servers.

    Matched text

    inputSchema.properties.name.description: "...ling Signet); every other name field on every other tool is English-only."

    What this check looks for
  • The server marks "decode_template" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.code), which can change anything it can reach.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

8 tools

Changes things 3Claude Code: ask
  • decode_pawned_teamDecode a paw-ned2 team build blob (the 'pwnd0001...>...<' format shared on PvXwiki team pages and by the paw-ned2 tool) into its individual builds: player/hero label, description, …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Decode a paw-ned2 team build blob (the 'pwnd0001...>...<' format shared on PvXwiki team pages and by the paw-ned2 tool) into its individual builds: player/hero label, description, and each skill bar fully decoded. Whitespace and line wraps in the pasted blob are tolerated. For a single (non-team) build code, use decode_template instead.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • decode_templateDecode an in-game GW1 skill template code (e.g.1 finding

    Why it is in this group

    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "decode_template" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.code), which can change anything it can reach.

      What this check looks for
    Description, as the server wrote it
    Decode an in-game GW1 skill template code (e.g. "OwpiMypMBg1cxcBAMBdmtIKAA") into professions, attribute allocations and the 8 skills with their stats and descriptions. Whitespace and line wraps in the pasted code are tolerated. This decodes a SINGLE build code; for a multi-hero paw-ned2 team blob, use decode_pawned_team instead.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • encode_templateCompile a build (professions, attributes, 8 skills by exact English name) into an official in-game template code.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Compile a build (professions, attributes, 8 skills by exact English name) into an official in-game template code. The build is validated first; on rule violations the errors are returned instead of a code. Unknown skill names return closest-match suggestions. IMPORTANT: template codes MUST come from this tool — never write or guess a code by hand, hand-written codes are invalid in-game. If unsure, verify any code with decode_template.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
Only reads 5Claude Code: allow
  • get_heroLook up a GW1 hero by name or by id (GWCA HeroID, matching the AccountExport plugin output).No findings

    Why it is in this group

    • The name "get_hero" says "get": a word for reading.
    Description, as the server wrote it
    Look up a GW1 hero by name or by id (GWCA HeroID, matching the AccountExport plugin output). Returns profession, campaign and how the hero is unlocked. Remember: heroes can equip any skill unlocked at ACCOUNT level, but NO PvE-only skill at all — including Signet of Capture. validate_build with forHero=true reports each one as an error, not a warning. Use this for one known hero; to browse or filter the roster, use list_heroes instead.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_skillLook up a single GW1 skill by exact English name or by template skill id.1 finding

    Why it is in this group

    • The name "get_skill" says "get": a word for reading.

    Findings

    • Warn

      The input schema at properties.name.description contains "every other tool", wording about other tools or servers.

      Matched text

      inputSchema.properties.name.description: "...ling Signet); every other name field on every other tool is English-only."

      What this check looks for
    Description, as the server wrote it
    Look up a single GW1 skill by exact English name or by template skill id. Returns full stats (energy, activation, recharge, adrenaline, sacrifice), profession, attribute, campaign, elite flag and description. If the name is not found, returns the closest matches so you can correct spelling. Use this when you already know the exact skill; to discover skills by profession, attribute or name fragment, use search_skills instead.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_heroesList all GW1 heroes, optionally filtered by profession or campaign name.No findings

    Why it is in this group

    • The name "list_heroes" says "list": a word for reading.
    Description, as the server wrote it
    List all GW1 heroes, optionally filtered by profession or campaign name. Useful for team-building: shows which professions are coverable by heroes and how each hero is unlocked.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_skillsSearch the full GW1 skill database by profession, attribute, campaign, elite flag or name fragment (valid values are documented per parameter).No findings

    Why it is in this group

    • The name "search_skills" says "search": a word for reading.
    Description, as the server wrote it
    Search the full GW1 skill database by profession, attribute, campaign, elite flag or name fragment (valid values are documented per parameter). Returns compact records, at most `limit` of them alongside a `total` count of every match — a full page is not the whole result, page with offset. Use get_skill for full details.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • validate_buildCheck a build (professions, attributes, 8 skills by exact English name) against Guild Wars 1 rules: one elite max, profession/attribute ownership, primary attributes, duplicates, r…No findings

    Why it is in this group

    • The name "validate_build" says "validate": a word for reading.
    Description, as the server wrote it
    Check a build (professions, attributes, 8 skills by exact English name) against Guild Wars 1 rules: one elite max, profession/attribute ownership, primary attributes, duplicates, rank ranges. Returns { valid, errors, warnings } without encoding — use encode_template instead when you also want the template code, since it runs these same rules and refuses on any error.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http gw1 https://gw1-mcp.graphmaxer.workers.dev/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__gw1__get_skill",
      "mcp__gw1__search_skills",
      "mcp__gw1__validate_build",
      "mcp__gw1__get_hero",
      "mcp__gw1__list_heroes"
    ],
    "ask": [
      "mcp__gw1__decode_template",
      "mcp__gw1__decode_pawned_team",
      "mcp__gw1__encode_template"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as gw1. Review it before you use it.