# Guild Wars 1 Build Compiler (remote · gw1-mcp.graphmaxer.workers.dev)

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

- Trust score: 71/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `gw1-mcp.graphmaxer.workers.dev`: 71/100 (this document), [markdown](https://verifymcp.io/servers/graphmaxer-gw1-mcp/gw1-mcp.md), [page](https://verifymcp.io/servers/graphmaxer-gw1-mcp/gw1-mcp)

## Channel facts

- Endpoint: `https://gw1-mcp.graphmaxer.workers.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.9.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 84/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1552 tokens (~141/item across 11 items; 8 tools + 3 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

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

### Codex

```toml
[mcp_servers.graphmaxer-gw1-mcp]
url = "https://gw1-mcp.graphmaxer.workers.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "graphmaxer-gw1-mcp": {
      "type": "remote",
      "url": "https://gw1-mcp.graphmaxer.workers.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add graphmaxer-gw1-mcp --url https://gw1-mcp.graphmaxer.workers.dev/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  graphmaxer-gw1-mcp:
    url: "https://gw1-mcp.graphmaxer.workers.dev/mcp"
```

### Other

```json
{
  "mcpServers": {
    "graphmaxer-gw1-mcp": {
      "type": "http",
      "url": "https://gw1-mcp.graphmaxer.workers.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 70, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 69, +1)

- [functional improvement] Tool coverage: 90% → 100%

### 2026-07-29 (score 68, +1)

- [functional] Server version: 0.9.0 → 0.9.1

### 2026-07-28 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 66, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 66)

First indexed and scored.

## MCP tools (8)

### `get_skill` (~124 tokens)

Get a Guild Wars 1 skill

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.

Input parameters:

- `id` (integer): Template skill id
- `name` (string): Exact English skill name, e.g. "Mystic Regeneration"

Output parameters:

- `activation` (number)
- `adrenaline` (number)
- `attribute`
- `campaign`
- `description` (string)
- `elite` (boolean)
- `energy` (number)
- `id` (integer)
- `isPvpVersion` (boolean)
- `isRoleplay` (boolean): PvE-only skill: max 3 per player bar, none on heroes
- `name` (string)
- `overcast` (number)
- `profession`
- `recharge` (number)
- `sacrifice` (number)
- `type`: Skill type, e.g. Enchantment Spell
- `upkeep` (number)

### `search_skills` (~300 tokens)

Search Guild Wars 1 skills

Search the full GW1 skill database by profession, attribute, campaign, elite flag or name fragment (valid values are documented per parameter). Returns compact records; use get_skill for full details.

Input parameters:

- `attributeName` (string): Filter by attribute line, exact English name, e.g. "Blood Magic", "Swordsmanship", "Divine Favor".
- `campaignName` (string): Filter by campaign: Core, Prophecies, Factions, Nightfall, or Eye of the North.
- `elite` (boolean): If true, return only elite skills; if false, only non-elite; omit for both.
- `includePvpVersions` (boolean): Include separate '(PvP)' skill versions. Default false — most builds want the PvE version only.
- `limit` (integer): Maximum number of records to return (1–200, default 50). Narrow filters if you hit it.
- `nameContains` (string): Case-insensitive substring match on the skill name, e.g. "heal" matches every skill with 'heal' in its name.
- `offset` (integer): Number of records to skip, for paging through results beyond the limit.
- `professionName` (string): Filter by profession: Warrior, Ranger, Monk, Necromancer, Mesmer, Elementalist, Assassin, Ritualist, Paragon, Dervish, or None (common / PvE-only skills that belong to no profession).

Output parameters:

- `skills` (array): Compact records; use get_skill for full details
- `total` (integer): Total matches before limit/offset are applied

### `decode_template` (~93 tokens)

Decode a skill template code

Decode an in-game GW1 skill template code (e.g. "OwpiMypMBg1cxcBAMBdmtIKAA") into professions, attribute allocations and the 8 skills with their stats and descriptions. This decodes a SINGLE build code; for a multi-hero paw-ned2 team blob, use decode_pawned_team instead.

Input parameters:

- `code` (string, required): The template code string

Output parameters:

- `attributes` (array)
- `primary` (string): Primary profession name
- `raw`: The raw decoded template (ids, not names)
- `secondary`: Secondary profession name, null for none
- `skills` (array): The 8 bar slots in order

### `decode_pawned_team` (~114 tokens)

Decode a paw-ned2 team template

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.

Input parameters:

- `pwnd` (string, required): The full pwnd blob, starting with 'pwnd000'

Output parameters:

- `builds` (array): One entry per team slot, in blob order

### `encode_template` (~287 tokens)

Encode a build into a template code

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.

Input parameters:

- `attributes` (array, required): Attribute point allocations (template format caps this at 15 entries)
- `forHero` (boolean): Set true if this bar is for a hero (PvE-only skills are flagged)
- `forPvp` (boolean): Set true for a PvP character's bar. PvP versions of split skills are only valid when this is true, and a PvP bar is expected to use them.
- `primary` (string, required): Primary profession, e.g. "Dervish"
- `secondary` (string): Secondary profession, e.g. "Monk". Omit or "None" for none.
- `skills` (array, required): Exactly 8 skill names in bar order. Use null for an empty slot. Names must be exact English skill names.
- `unlockedSkillIds` (array): Optional: unlocked skill ids from a GWToolbox account export (/exportaccount). Skills outside this list are flagged as warnings.

Output parameters:

- `code` (string): Official in-game template code (present on success)
- `errors` (array): Present (non-empty) when resolution failed or the build is invalid
- `valid` (boolean): false when the build resolved but is illegal; absent on the other two shapes
- `warnings` (array): Advisories accompanying a successful code

### `validate_build` (~237 tokens)

Validate a build against GW1 rules

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.

Input parameters:

- `attributes` (array, required): Attribute point allocations (template format caps this at 15 entries)
- `forHero` (boolean): Set true if this bar is for a hero (PvE-only skills are flagged)
- `forPvp` (boolean): Set true for a PvP character's bar (PvP versions of split skills are only valid then).
- `primary` (string, required): Primary profession, e.g. "Dervish"
- `secondary` (string): Secondary profession, e.g. "Monk". Omit or "None" for none.
- `skills` (array, required): Exactly 8 skill names in bar order. Use null for an empty slot. Names must be exact English skill names.
- `unlockedSkillIds` (array): Optional: unlocked skill ids from a GWToolbox account export (/exportaccount). Skills outside this list are flagged as warnings.

Output parameters:

- `errors` (array): Blocking problems; empty when valid
- `valid` (boolean): Whether the build is legal in-game
- `warnings` (array): Non-blocking advisories

### `get_hero` (~114 tokens)

Get a Guild Wars 1 hero

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 not most PvE-only skills. Use this for one known hero; to browse or filter the roster, use list_heroes instead.

Input parameters:

- `id` (integer): GWCA HeroID value
- `name` (string): Hero name, e.g. "Master of Whispers"

Output parameters:

- `campaign`
- `campaignId` (integer)
- `id` (integer): GWCA HeroID
- `name` (string)
- `profession`
- `professionId` (integer)
- `unlock` (string): How the hero is recruited

### `list_heroes` (~125 tokens)

List Guild Wars 1 heroes

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.

Input parameters:

- `campaignName` (string): Filter by the campaign the hero is recruited in, exact English name: Prophecies, Factions, Nightfall or Eye of the North.
- `professionName` (string): Filter by the hero's profession, exact English name: Warrior, Ranger, Monk, Necromancer, Mesmer, Elementalist, Assassin, Ritualist, Paragon or Dervish.

Output parameters:

- `heroes` (array)
- `total` (integer)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/graphmaxer-gw1-mcp/gw1-mcp#diagnostics

## Score history

- 2026-08-03: 71
- 2026-08-02: 70
- 2026-08-01: 70
- 2026-07-31: 70
- 2026-07-30: 69
- 2026-07-29: 68
- 2026-07-28: 67
- 2026-07-27: 66
- 2026-07-26: 66

## Links

- Remote endpoint: https://gw1-mcp.graphmaxer.workers.dev/mcp
- Repository: https://github.com/Graphmaxer/gw1-mcp
- Changelog RSS feed: https://verifymcp.io/servers/graphmaxer-gw1-mcp/gw1-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/graphmaxer-gw1-mcp/gw1-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/graphmaxer-gw1-mcp/gw1-mcp
