Skip to main content
Glama
crabsmadethis

crabsmadethis/d2r-horadric-tools

디아블로 II: 레저렉션용 호라드림 도구 (Horadric Tools)

Tests Python 3.11+ License: MIT Platform: Linux

Horadric Tools는 오프라인 디아블로 II: 레저렉션 모딩 및 세이브 파일 워크플로우를 위한 파이썬 툴킷입니다. YAML을 .d2s 캐릭터 파일로 변환하고, 선언적 패치를 통해 데이터 모드를 빌드하며, 게임 로드 전 세이브 파일을 검사합니다. 또한 Claude Code, Codex, Cursor 및 기타 에이전트 클라이언트를 위한 MCP 서버를 통해 동일한 도구들을 제공합니다.

이 프로젝트는 Linux / Steam Deck을 우선 지원하며, Windows 경로 탐지 기능이 포함되어 있으나 충분한 테스트는 거치지 않았습니다. 블리자드 게임 데이터, 개인 세이브 파일 또는 Battle.net 자동화 기능을 포함하지 않습니다.

주요 기능

  • YAML에서 오프라인 .d2s 캐릭터 생성.

  • 장비, 룬어, 부적, 능력치, 스킬, 용병 장비, 아이언 골렘 및 실험적인 템플릿 기반 바운드 데몬 인코딩.

  • 게임 내 로드 전 세이브 파일의 구조적 문제 검사.

  • 로컬 D2R 데이터를 추출하여 파이썬 조회 테이블 생성.

  • YAML 오버레이 및 JSON 문자열 패치를 통한 데이터 모드 빌드 및 배포.

  • 게임 데이터 조회, 세이브 검사, 캐릭터 생성 및 모드 파이프라인 자동화를 위한 23개의 MCP 도구 제공.

Related MCP server: LoreKeeper MCP

지원하지 않는 기능

  • 온라인 플레이 도구.

  • 트레이너, 봇, 맵핵 또는 메모리 에디터.

  • 추출된 D2R 데이터 번들.

  • 생성된 모든 세이브 파일이 검사 없이 로드 가능함을 보장하지 않음.

세이브 파일 작업의 핵심 규칙은 간단합니다: 스테이징 환경에서 빌드하거나 편집하고, 결과를 검사한 뒤, 검증을 통과한 경우에만 적용하십시오.

퀵스타트

git clone https://github.com/crabsmadethis/d2r-horadric-tools.git
cd d2r-horadric-tools
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

D2R 설치 경로에서 로컬 조회 데이터 생성:

d2r-mod extract

설치 경로가 자동으로 감지되지 않는 경우:

d2r-mod extract --game-dir "/path/to/Diablo II Resurrected"

포함된 예제 캐릭터 검증:

d2r-chargen validate ExamplePaladin

세이브 디렉토리가 설정되고 생성된 세이브를 작성할 준비가 되었을 때만 빌드:

d2r-chargen build ExamplePaladin --force
d2r-chargen scan ExamplePaladin

캐릭터 YAML

캐릭터 파일은 chars/*.yaml에 위치합니다. 간단한 캐릭터 정의 예시는 다음과 같습니다:

schema_version: 1
name: ExamplePaladin
class: paladin
level: 85
progression: hell_complete

stats:
  strength: 156
  dexterity: 125
  vitality: 250
  energy: 25

skills:
  Blessed Hammer: 20
  Concentration: 20
  Vigor: 20

equipment:
  - slot: helm
    unique: Harlequin Crest
  - slot: body
    runeword: Enigma
    base: utp
  - slot: weapon
    runeword: Heart of the Oak
    base: fla

inventory:
  charms:
    - magic_grand_charm:
        count: 8
        properties:
          skill_tab: [1, 15]
          life: 40

더 자세한 예시는 chars/ExamplePaladin.yaml을 참조하십시오.

지원되는 클래스 이름:

amazon, sorceress, necromancer, paladin, barbarian, druid, assassin, warlock

일반적인 장비 슬롯:

helm, body, weapon, shield, hands, belt, feet, neck, ring_right, ring_left,
weapon_switch, shield_switch

CLI 참조

d2r-chargen

d2r-chargen list
d2r-chargen validate <name> [--yaml-only]
d2r-chargen build <name> [--phase N] [--force]
d2r-chargen scan <name>
d2r-chargen import <name> [--force]
d2r-chargen diff <file1> <file2>

d2r-mod

d2r-mod extract [--game-dir PATH]
d2r-mod build [--no-regen]
d2r-mod deploy [--force] [--no-casc]
d2r-mod undeploy
d2r-mod diff [--summary]
d2r-mod inject [--from-dir PATH]
d2r-mod audit [--skills] [--items]
d2r-mod clean
d2r-mod update

데이터 모드 오버레이

오버레이는 D2R 데이터 테이블을 선언적으로 수정합니다. 오버레이 파일을 overlays/에 넣고 d2r-mod build를 실행하십시오.

target: data/global/excel/UniqueItems.txt
changes:
  - row: {index: "The Gnasher"}
    set:
      prop4: "dmg%"
      min4: "50"
      max4: "50"
    comment: "Buff The Gnasher with +50% Enhanced Damage"

overlays/ 디렉토리가 없으면 빌드는 바닐라 데이터로만 진행됩니다. 전체 예시는 examples/sample_overlay.yaml을 참조하십시오.

JSON 문자열 패치

D2R은 대부분의 아이템, 용병 및 UI 문자열을 data/local/lng/strings/ 아래의 JSON 파일에서 읽습니다. 문자열을 추가하거나 재정의하려면 patches/json_strings/에 YAML 사양을 넣으십시오:

description: "Rename a few potions"
target: item-names.json
entries:
  - key: "vps"
    value: "Wild Rice Cake"
  - key: "MyCustomItem"
    value: "Heart of the Mountain"

d2r-mod build 실행 후, 패치된 JSON 파일은 build/data/local/lng/strings/에 생성됩니다. D2R은 시작 시 문자열을 캐시하므로, 변경 사항을 확인하려면 게임을 완전히 종료한 후 다시 실행하십시오.

MCP 서버

Horadric Tools는 에이전트 클라이언트를 위한 MCP 서버를 제공합니다. 게임 데이터 조회, 세이브 검사, 캐릭터 생성 및 모드 파이프라인 명령을 타입이 지정된 도구로 노출합니다.

서버를 시작하기 전에 MCP SDK를 설치하십시오:

pip install mcp

다음 명령어로 실행:

python3 -m d2r_mcp

Claude Code:

claude mcp add d2r-tools --transport stdio --scope user -- python3 -m d2r_mcp

일반 MCP 설정:

{
  "mcpServers": {
    "d2r-tools": {
      "command": "python3",
      "args": ["-m", "d2r_mcp"],
      "env": {}
    }
  }
}

전체 도구 목록은 d2r_mcp/README.md를 참조하십시오.

안전 모델

세이브 파일 워크플로우는 의도적으로 보수적으로 설계되었습니다:

  1. 가능한 경우 기존의 유효한 .d2s 템플릿에서 시작합니다.

  2. 변경 사항을 임시 또는 스테이징 파일에 작성합니다.

  3. 크기와 체크섬을 다시 계산합니다.

  4. d2r-chargen scan <name>을 실행합니다.

  5. 스캐너에서 깨끗한 파일만 적용합니다.

스캐너의 하드 에러는 스캐너가 잘못되었다는 비트 수준의 증거가 없는 한 배포 차단 요소로 간주됩니다. 상세한 세이브 형식 정보는 docs/d2s_format.md에 있습니다.

저장소 맵

d2r_chargen/    YAML character builder, save writer, scanner, import/diff tools
d2r_mod/        Data extraction, overlays, CASC read/write, deploy pipeline
d2r_mcp/        MCP server and tool definitions
chars/          Example character YAML files
examples/       Overlay examples
docs/           Save-format notes and manual validation guidance
tools/          Standalone diagnostics and hygiene checks
plugin/         Optional Claude Code plugin commands and skills

플랫폼 지원

플랫폼

상태

Linux / Steam Deck (Proton)

지원, 테스트 완료

Windows

경로 탐지 포함, 추가 테스트 필요

macOS

D2R 플레이 미지원; 문서 및 코드 작업용으로만 유용

요구 사항

  • Python 3.11+

  • PyYAML

  • 데이터 추출을 위한 디아블로 II: 레저렉션

  • 에이전트 통합을 위한 MCP SDK (pip install mcp)

기여 방법

CONTRIBUTING.md부터 시작하십시오. PR을 열기 전에 다음을 실행하십시오:

python tools/public_hygiene_check.py
ruff check .
pytest tests/ -v --timeout=60 \
  -m "not integration and not slow and not e2e and not smoke" \
  --ignore=tests/fixtures/ \
  --ignore=tests/test_chargen.py \
  --ignore=tests/test_decoder.py \
  --ignore=tests/test_fixtures.py \
  --ignore=tests/test_importer.py

라이선스

MIT

Available Tools

23 tools
d2r_chargen_buildA

Build and deploy a character to the live saves directory.

Structurally enforces CLAUDE.md rules #3, #4, #10, #17: backs up the live save, builds to a temp file, runs the scanner on the temp, and only promotes the temp to the live save if the scanner passes. Live save is untouched on scanner failure.

Args: name: Character name (chars/.yaml must exist). phase: Deploy through phase (1-4). Default: full deploy (4). force: Skip the freshness gate (discards server progress). Avoid unless intentional.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
phaseNo
forceNo

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavioral traits: enforces CLAUDE.md rules, backs up live save, builds to temp, runs scanner, promotes only on success. It warns about the 'force' parameter discarding server progress and states that live save is untouched on failure.

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 concise: four sentences plus parameter bullets. It front-loads the main purpose, and every sentence adds value—no unnecessary words 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?

Given no output schema, the description covers the tool's behavior (deployment process, safety, parameters) well. It lacks explicit mention of the return value, but the outcome (successful promotion or not) is implied.

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

Parameters5/5

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

Schema coverage is 0%, so the description must explain parameters. It does so thoroughly: 'name' requires an existing file, 'phase' defaults to full deploy (4), 'force' skips freshness gate with a warning. This adds meaning beyond the schema titles.

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 clearly states the tool's purpose: 'Build and deploy a character to the live saves directory.' It uses specific verbs and resources, and distinguishes from sibling tools (e.g., import, list, validate) by focusing on deployment.

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?

The description provides context on when to use the tool (e.g., deploying a character to live saves) and explains the safety process (backup, temp build, scanner). However, it does not explicitly mention when not to use it or provide alternatives among sibling tools.

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

d2r_chargen_importA

Import a server-synced .d2s save into chars/.yaml.

Args: name: Character name (reads live save at /.d2s). force: Overwrite an existing chars/.yaml.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
forceNo

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It reveals that the tool reads a live save from a specific path (<SAVES>/<name>.d2s) and mentions the force parameter for overwriting. However, it does not explain the behavior when force is false (likely an error), error handling, or other side effects.

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 very concise, with a clear one-line purpose followed by a structured Args section. Every sentence is informative and there is no clutter.

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 simple import tool with 2 parameters and no output schema or annotations, the description covers the essential workflow: what is imported, from where, and the optional overwrite flag. It could mention the output format (yaml file), but overall is quite complete.

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?

With 0% schema description coverage, the description adds crucial meaning: 'name' is explained as reading a live save at a specific path, and 'force' is described as overwriting an existing file. This clarifies both parameters beyond the bare schema types.

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 clearly states the action 'Import a server-synced .d2s save into chars/<name>.yaml' with specific verb and resource. It distinguishes from sibling chargen tools like d2r_chargen_build, d2r_chargen_list, and d2r_chargen_validate, which handle other chargen operations.

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?

The description implies usage for importing .d2s saves into yaml format, but does not explicitly state when to use this tool versus alternatives. No exclusion conditions or alternative recommendations are provided.

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

d2r_chargen_listA

List character names defined in chars/*.yaml.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states it lists names from files, but does not mention permissions, side effects, or output format, leaving significant gaps.

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?

Single sentence, no wasted words. Front-loaded with action and target.

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 simple, no-parameter list tool, the description is mostly complete. However, it does not specify the exact format of the output (e.g., just names or full paths), leaving minor ambiguity.

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, and schema coverage is 100%. The description adds value by specifying the source ('chars/*.yaml'), which is not in the schema. Baseline for 0 params 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?

The description uses a specific verb ('List') and resource ('character names defined in chars/*.yaml'), clearly distinguishing it from siblings like d2r_chargen_build or d2r_chargen_import.

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?

No explicit guidance on when to use this tool versus alternatives. The purpose is implied (simple listing), but no exclusions or context for when not to use it.

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

d2r_chargen_validateB

Validate a character YAML and optionally run a dry-run binary build.

Args: name: Character name (resolves to chars/.yaml). yaml_only: Skip the dry-run binary build + scanner pass.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
yaml_onlyNo

TDQS

B3.4/5.0
Behavior3/5

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

No annotations present. Description explains the primary behavior (validation) and the yaml_only flag (skips dry-run and scanner). Does not disclose side effects (likely none), API requirements, or return format, but adequate for a simple validation 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?

Extremely concise: only two sentences plus bullet-point args. No redundant information. Front-loaded with core purpose.

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?

Given no output schema and no annotations, the description should clarify return values. It does not mention what the tool outputs (e.g., validation results, success/failure). For a validation tool, this is a gap. Parameters are well-described, but output is omitted.

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 0%, so description must carry parameter information. It explains that name resolves to 'chars/<name>.yaml' and that yaml_only skips the dry-run build and scanner pass. This adds meaningful context beyond the schema.

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?

Description clearly states 'Validate a character YAML' with optional dry-run build. It specifies the resource (character YAML) and action, distinguishing it from siblings like d2r_chargen_build or d2r_chargen_list. However, it does not explicitly contrast with these siblings.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like d2r_chargen_build. The description only explains parameters, not usage context or prerequisites.

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

d2r_lookup_item_baseA

Look up a D2R base item by 3-char code or name.

Searches item_bases.py data. Returns dimensions, requirements, sockets. Supports substring matching on names.

Args: query: 3-character item code (e.g. "hax") or item name

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must detail behavior. It mentions substring matching and return fields (dimensions, requirements, sockets), which is helpful. However, it lacks clarity on case sensitivity, exact vs substring behavior for codes, and what happens when no match is found. These are gaps for a lookup 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?

The description is concise and well-structured, starting with the purpose, then search method, return info, and args section. Every sentence adds value without unnecessary fluff.

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 the tool's simplicity (one parameter, output schema exists), the description covers the core aspects: what it looks up, how to query, and what it returns. It could mention error handling or edge cases, but it's largely complete for agent use.

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 input schema only has a 'Query' title with 0% coverage, so the description compensates by explaining the parameter format: '3-character item code (e.g. 'hax') or item name' and gives an example. This adds significant meaning beyond the schema, though it could clarify that codes expect exact match.

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 clearly states the tool's purpose: 'Look up a D2R base item by 3-char code or name.' This specific verb-resource combination distinguishes it from sibling lookup tools that target different entities like runewords, skills, or uniques.

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?

While the description implies usage for base items (by naming them), it does not explicitly state when to use this tool over alternatives or provide exclusions. For example, it doesn't say 'Use this for base items, use d2r_lookup_runeword for runewords.' The context from sibling names helps but is not explicit.

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

d2r_lookup_runewordA

Look up a D2R runeword by name or numeric ID.

Searches runewords.py data. Returns runes, valid bases, stats. Supports substring matching.

Args: query: Runeword name (or substring) or numeric runeword ID

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states basic behavior (lookup, substring matching) but omits critical details like read-only nature, error handling (e.g., no match found), or any side effects. This is insufficient for safe agent decision-making.

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 fairly concise at two sentences plus an args line, with the main purpose front-loaded. It could be more structured (e.g., bullet points) but remains efficient.

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 the tool's simplicity (one parameter) and presence of an output schema, the description sufficiently covers the input and high-level output ('Returns runes, valid bases, stats'). It does not need to elaborate further for a straightforward lookup.

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 schema has one parameter 'query' with anyOf string/integer and no description. The description compensates by explaining that strings represent runeword names (with substring support) and integers represent numeric IDs, providing essential semantics 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?

The description clearly states the verb 'look up' and the resource 'D2R runeword', with specifics like by name or numeric ID and substring matching. It differentiates from sibling lookup tools (e.g., d2r_lookup_item_base, d2r_lookup_skill) by specifying the resource.

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?

The description explains what the tool does but provides no guidance on when to use it versus alternatives like other lookup tools. Without explicit usage context, an agent must infer from the tool name alone.

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

d2r_lookup_set_itemA

Look up a D2R set item by name or numeric ID.

Searches set_items.py data. Returns item info + set membership. Supports substring matching.

Args: query: Item name (or substring) or numeric set item ID

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral disclosure. It states the tool searches a specific data source, returns item info and set membership, and supports substring matching. This adequately describes the read-only, non-destructive nature. No contradictions or missing key behaviors.

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 very concise: two short paragraphs. The first states the purpose, and the second adds usage details. Every sentence provides necessary information without redundancy. Front-loaded with the core action.

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 the simple interface (one parameter, output schema exists), the description sufficiently covers what the tool does, what input it expects, and what it returns. It doesn't need to detail the output schema since that is provided separately. Slight improvement could mention additional output details, but it's complete enough.

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 input schema has no descriptions (0% coverage), so the description must compensate. It explains the 'query' parameter accepts 'Item name (or substring) or numeric set item ID', adding significant meaning beyond the schema's anyOf type. This clearly instructs how to use the 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 clearly states 'Look up a D2R set item by name or numeric ID', specifying the exact action and resource. It distinguishes from sibling lookup tools (e.g., d2r_lookup_item_base, d2r_lookup_unique) by focusing on set items, adding details about searching 'set_items.py data' and returning 'item info + set membership'.

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?

The description implies usage for set item lookups via the name and context, and distinguishes from siblings by specifying 'set item'. However, it does not explicitly state when to use or avoid this tool, nor does it compare to alternatives like other lookup tools. Usage is clear but not exhaustive.

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

d2r_lookup_skillA

Look up a D2R skill by name or numeric ID.

Searches skills.py data. Returns skill ID and class. Supports substring matching.

Args: query: Skill name (or substring) or numeric skill ID

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations exist, so description carries burden. It discloses data source (skills.py), return fields (skill ID and class), and matching behavior (substring). Lacks details on side effects, auth, or rate limits, but adequate for a read-only lookup.

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?

Extremely concise—two sentences plus bullet for args. No fluff, front-loaded with purpose. Every 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?

Output schema exists, so return value explanation is unnecessary. Description covers data source, input flexibility, and matched output fields. Sibling tools are similar, making this sufficiently complete.

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 0%, but description adds meaning: explains query can be skill name, substring, or numeric ID. Also states what is returned, compensating for schema's lack of description.

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 clearly states the verb 'look up' and resource 'D2R skill', distinguishes from sibling tools like d2r_lookup_item_base and d2r_lookup_runeword by specifying the domain (skills).

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?

Provides no explicit when-to-use or when-not-to-use guidance. The mention of substring matching implies usage flexibility, but no comparison with other lookup tools or exclusion criteria.

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

d2r_lookup_statA

Look up a D2R stat by ID, canonical name, or YAML alias.

Searches item_stat_cost.py data. Returns encoding info (save bits, save add, param bits, value shift) needed for binary stat encoding.

Args: query: Stat ID, canonical name (e.g. "fireresist"), or alias (e.g. "fcr")

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Mentions data source ('item_stat_cost.py') and return type ('encoding info'). Lacks disclosure of error handling or edge cases, but is adequate for a lookup 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 concise sentences, each with essential info: purpose, data source, return value, parameter details. No fluff.

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 a simple tool with one param and output schema, the description covers purpose, parameter semantics, and return value. Minor gap: no example queries or mention of case sensitivity.

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

Parameters5/5

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

Schema has 0% description coverage, but description fully explains the single parameter 'query' as accepting stat ID, canonical name, or alias. Adds meaning beyond schema type (anyOf string/integer).

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?

Description states a specific verb ('Look up') and resource ('D2R stat') with clear query methods (ID, canonical name, alias). Differentiates from sibling lookup tools which target other entities (items, runewords, skills, etc.).

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?

Describes when to use (lookup stat by various identifiers) and what it returns. Does not explicitly state when not to use or contrast with siblings, but the context of stat vs other entities is implied.

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

d2r_lookup_uniqueA

Look up a D2R unique item by name or numeric UID.

Searches unique_items.py data. Returns item info + stats. Supports substring matching (e.g. "harlequin" finds Harlequin Crest).

Args: query: Item name (or substring) or numeric UID

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations, but description transparently explains it is a read-only lookup returning item info+stats, with substring matching. No mention of destructive actions, but clear safe usage.

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?

Extremely concise: 3 sentences plus Args section. Front-loaded with purpose. Every sentence adds value without 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?

Simple tool with one parameter, well-described. Output schema exists, so return values are covered. No missing context for an effective lookup.

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?

Despite 0% schema coverage, description enriches the parameter 'query' by explaining it can be name or numeric UID, supports substring matching, and gives an example ('harlequin' finds Harlequin Crest).

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?

Description clearly states it looks up D2R unique items by name or UID, specifies data source (unique_items.py), and mentions substring matching. Distinguished from siblings like d2r_lookup_runeword and d2r_lookup_set_item.

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 clear context on how to use (name or UID, substring matching). Implicitly separates from siblings by focusing on uniques, but no explicit when-not-to-use or alternative tool mentions.

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

d2r_mod_auditB

Audit vanilla skills and items; write markdown reports.

Args: skills: Run skills audit. items: Run items audit. audit_all: Run both audits (overrides skills/items). output_dir: Directory to write reports into. Default: docs/audit.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillsNo
itemsNo
audit_allNo
output_dirNo

TDQS

B3.1/5.0
Behavior2/5

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

The description mentions writing markdown reports to a directory, but does not disclose whether the tool is read-only, destructive, or the exact output format. With no annotations provided, the description should cover more behavioral traits.

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 very concise: one sentence for purpose and a clear Args list. Every sentence adds value, with no redundant information.

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

Completeness2/5

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

Given no output schema and no annotations, the description should provide more context about return values, side effects (e.g., file creation), and prerequisites (e.g., mod must be extracted). It only covers basic parameter usage.

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 description adds meaning to all 4 parameters (skills, items, audit_all, output_dir) beyond the schema, including defaults and the override behavior of audit_all. However, it lacks details like allowed values for output_dir or error handling.

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 it audits vanilla skills and items and writes markdown reports. This is a clear specific verb and resource. However, it could be more explicit about what 'audit' entails to distinguish from sibling mod tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like d2r_mod_diff or d2r_mod_build. There is no mention of prerequisites or context, leaving the agent to infer usage.

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

d2r_mod_buildC

Build mod from vanilla + overlays + scripts into build/.

ParametersJSON Schema
NameRequiredDescriptionDefault
warn_conflictsNo
no_regenNo
game_dirNo

TDQS

C2.8/5.0
Behavior2/5

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

No annotations provided, and the description only states the action without revealing behavioral traits such as side effects (e.g., file creation), permissions needed, or idempotency. The mention of 'into build/' implies file output but lacks specificity.

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?

Extremely concise single sentence with no wasted words. However, it could be slightly expanded to improve completeness without losing conciseness.

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

Completeness2/5

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

Given 3 optional parameters and no output schema, the description is too minimal. It fails to explain concepts like overlays/scripts, the structure of build/, or return value. Sibling tools provide context but the description itself is incomplete.

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

Parameters1/5

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

Schema has 3 parameters with 0% documented in description. The description adds no meaning beyond schema field names. Agent gets no help on what these parameters do or how to set them.

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?

Clearly states the verb 'Build' and the resource 'mod' with inputs (vanilla, overlays, scripts) and output destination (build/). Distinguishes from sibling tools like d2r_mod_clean and d2r_mod_deploy.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, no prerequisites or conditions mentioned. Relies solely on the tool name to imply usage.

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

d2r_mod_cleanA

Wipe the local mod build artifacts to start from a clean slate.

Deletes the build/ directory and resets generated chargen data files. Does NOT touch the deployed D2R install; run d2r_mod_undeploy first if you also want to revert the running game.

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?

Discloses exactly what is deleted (build/ directory and chargen data) and what is not touched (deployed D2R install). No annotations provided, so description carries full burden.

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 concise sentences, no wasted words, front-loaded with key action.

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 no parameters and no output schema, the description provides full context: purpose, scope, and prerequisite actions.

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?

No parameters, schema coverage is 100% (none needed). Baseline 4 for zero parameters. Description does not need to add param info.

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?

Clearly states it wipes local mod build artifacts (build/ directory and chargen data). Distinguishes from sibling tools like d2r_mod_undeploy.

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 (start from clean slate) and when not (does not touch deployed install, suggests undeploy first for reverting game).

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

d2r_mod_deployC

Build + deploy mod to the game mod folder (runs CASC injection by default).

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
no_cascNo
no_buildNo
warn_conflictsNo
no_regenNo
game_dirNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It mentions CASC injection but does not explain what that entails, whether deployment is destructive, or what side effects occur (e.g., overwrite, backup). The flags are not described.

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 a single, front-loaded sentence that conveys the core purpose efficiently. It could benefit from a list of flags, but it is not overly verbose.

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

Completeness2/5

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

Given 6 parameters, no output schema, and no annotations, the description lacks details on return values, prerequisites, error conditions, and the effect of each flag. It is insufficient for a complex deployment tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate. It only mentions 'by default' regarding CASC injection, but does not explain individual parameters like 'force', 'no_casc', 'no_build', etc. Agents must guess from parameter names.

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 clearly states 'Build + deploy mod to the game mod folder', specifying the verb and resource. It also mentions 'runs CASC injection by default', which distinguishes it from siblings like d2r_mod_build (build only) and d2r_mod_undeploy (reverse).

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (e.g., d2r_mod_build for build only). The description implies default behavior but does not explain when to set specific flags or avoid this tool.

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

d2r_mod_diffC

Compare vanilla/ vs build/ tables. Returns list of changed files.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNo
summaryNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, description must carry burden of behavioral disclosure. It implies a read-only comparison but does not explicitly state non-destructiveness, permission requirements, or any side effects. Lacks details about the comparison process.

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

Conciseness3/5

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

Two sentences, concise and front-loaded. However, it sacrifices necessary details for brevity, leaving out parameter explanations and behavioral context.

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

Completeness1/5

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

Given two optional parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain what 'vanilla/ vs build/ tables' refers to, the format of returned file list, or how parameters affect behavior.

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

Parameters1/5

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

Description does not mention either parameter ('file' or 'summary'). With 0% schema coverage, the description fails to add any meaning beyond bare schema. Agent will not know how to use the parameters correctly.

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?

Description clearly states action 'compare' and resources 'vanilla/ vs build/ tables', and output 'list of changed files'. It is specific and easily understood, but does not differentiate from sibling tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like d2r_mod_build or d2r_save_diff. No context on prerequisites or intended workflow.

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

d2r_mod_extractC

Extract vanilla data from CASC archive into vanilla/.

ParametersJSON Schema
NameRequiredDescriptionDefault
game_dirNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It does not disclose side effects like whether files are overwritten, whether the operation is safe to repeat, or any permissions required. This lack of transparency is a significant gap for a data extraction 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?

The description is a single, efficient sentence with no unnecessary words. It is front-loaded with the verb and resource, making it easy to parse quickly.

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

Completeness2/5

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

Given the tool's simplicity (one optional parameter, no output schema), the description fails to clarify the purpose of 'game_dir' or what 'vanilla/' means. It does not mention return values or effects, leaving the agent without full context for invocation.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the description adds no information about the 'game_dir' parameter. The parameter has no enumeration or defaults explained, and the description offers no hint about its purpose, leaving the agent to guess.

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 clearly states a specific action ('Extract vanilla data from CASC archive into vanilla/') and distinguishes itself from sibling tools like d2r_mod_build or d2r_mod_audit by focusing on extraction rather than building or auditing.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., d2r_mod_clean or d2r_mod_build). There is no mention of prerequisites, workflow positioning, or cases where extraction should be skipped.

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

d2r_mod_undeployA

Revert the deployed D2R mod, restoring the vanilla game state.

Removes the mod directory from the D2R install (or keeps it on disk with keep_mod=True) and unregisters the launch options. Use this to roll back a deploy without rebuilding, or before switching to a different mod.

Args: keep_mod: If True, leave the built mod directory in place on disk. game_dir: Override the auto-detected D2R install path.

ParametersJSON Schema
NameRequiredDescriptionDefault
keep_modNo
game_dirNo

TDQS

A4.5/5.0
Behavior4/5

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

Describes actions: removes mod directory (or keeps with keep_mod=True) and unregisters launch options. Without annotations, this adequately discloses behavior. Could mention side effects like requiring game not running, but still strong.

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 with clear docstring structure. No unnecessary words; each sentence adds value.

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?

Covers purpose, parameters, and usage scenarios. No output schema, but return value is implicit (success/failure). Could mention prerequisites like mod being deployed, but not critical.

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

Parameters5/5

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

Both parameters are explained beyond schema: keep_mod controls whether to leave mod on disk, and game_dir overrides auto-detected path. With 0% schema coverage, description fully compensates.

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?

Description clearly states verb 'Revert' and resource 'deployed D2R mod' to restore vanilla state. Distinguishes from sibling tools like d2r_mod_deploy and d2r_mod_build by focusing on undoing a deployment.

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: 'to roll back a deploy without rebuilding, or before switching to a different mod.' No explicit when-not-to-use, but context makes alternatives obvious.

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

d2r_mod_updateC

Full recovery pipeline: extract → build → deploy.

ParametersJSON Schema
NameRequiredDescriptionDefault
warn_conflictsNo
no_regenNo
game_dirNo

TDQS

C2/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions a multi-step pipeline but gives no details on side effects, permissions, or what gets modified. For a tool that likely performs destructive operations, this is insufficient.

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

Conciseness2/5

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

The description is extremely short (one sentence), but it does not convey necessary information. Conciseness should pack meaningful content into few words; here, it under-specifies the tool, making it unhelpful.

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

Completeness1/5

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

Given no output schema, no annotations, and the complexity of a multi-step pipeline, the description is grossly incomplete. It does not explain the order of operations, return value, or how the pipeline affects the mod, leaving major gaps for the agent.

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

Parameters1/5

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

The input schema has three parameters with 0% description coverage, yet the description offers no explanation of their purpose or effects. The parameters 'warn_conflicts', 'no_regen', and 'game_dir' are completely unexplained, failing to add any value beyond the schema.

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

Purpose3/5

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

The description states 'Full recovery pipeline: extract → build → deploy', which indicates a composite operation. However, the verb 'update' in the name is not directly mapped to the pipeline, and it does not clearly specify what is being recovered. While it distinguishes itself from individual sibling tools by being a combination, it lacks specificity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus the individual extract, build, and deploy tools. The description does not mention prerequisites, context, or alternatives, leaving the agent without direction.

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

d2r_save_diffC

Compare two .d2s files and return structural differences.

Args: path_a: First save (treated as "before"). path_b: Second save (treated as "after").

ParametersJSON Schema
NameRequiredDescriptionDefault
path_aYes
path_bYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden for behavioral disclosure. While 'compare' implies a read-only operation, the description does not explicitly state that the tool makes no changes. It also fails to describe what 'structural differences' entail (e.g., specific sections compared) or the output format, leaving the agent without key behavioral information.

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 extremely concise, consisting of two sentences plus parameter docs. It front-loads the core action and avoids any extraneous information. Every word serves a purpose, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is notably incomplete. It does not describe the return format, error behavior (e.g., missing files, identical saves), or limitations. For a diff tool, the agent needs this context to correctly use and interpret results.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description adds only minimal semantic value: 'path_a: First save (treated as "before")' and 'path_b: Second save (treated as "after")'. It does not clarify file path expectations (absolute vs. relative, existence requirements) or any constraints, so the description insufficiently compensates for the sparse schema.

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 clearly states the tool's function: comparing two .d2s files and returning structural differences. It specifies the resource type (.d2s files) and the action (compare/diff). However, it does not explicitly differentiate from sibling save tools like d2r_save_inspect or d2r_save_scan, which could cause ambiguity.

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

Usage Guidelines2/5

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

The description provides ordering guidance (path_a is 'before', path_b is 'after') but offers no information about when to use this tool versus alternatives (e.g., when a simple scan vs. diff is needed). It lacks explicit usage context or exclusions.

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

d2r_save_inspectA

Summarize a .d2s save: class, level, stats, progression, merc.

No scanner pass — use d2r_save_scan for validation.

Args: path: Absolute path to .d2s file, or bare character name.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.7/5.0
Behavior4/5

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

Discloses that it does not perform validation ('No scanner pass'), which is a key behavioral trait. No annotations exist, so description carries full burden and adds relevant context about limitations.

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 sentences and a brief argument list; every word is informative. Front-loaded with the core purpose, 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?

For a simple tool with one parameter, no output schema, and no annotations, the description fully covers what it does, usage guidance, and parameter semantics. An agent can confidently select and invoke it.

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 description adds meaning to the single 'path' parameter beyond the schema: explains it expects an absolute path or a bare character name. This compensates for 0% schema description coverage.

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?

Clearly describes 'Summarize a .d2s save' with specific fields (class, level, stats, progression, merc). Distinguishes from sibling tools like d2r_save_scan and d2r_save_list_items.

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 not to use ('No scanner pass') and provides alternative ('use d2r_save_scan for validation'). Also explains the argument format (absolute path or character name).

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

d2r_save_list_itemsA

List items on disk in a .d2s save, optionally filtered by location.

Args: path: Absolute path to .d2s file, or bare character name. location: Filter: equipped, inventory, cube, stash, merc_equipped, or None for all.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
locationNo

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It implies a read-only operation (listing items on disk), but does not explicitly state that it does not modify data or discuss any side effects, permissions, or rate limits.

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 concise with two sentences for the purpose and a bulleted argument list. Every sentence adds value, and there is no 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?

The description covers the core functionality and parameters. However, it does not describe the return format (e.g., list of item names, properties), which would be helpful given the lack of an output schema.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description must compensate. It does so effectively: explaining that 'path' can be an absolute path or a bare character name, and clarifying that 'location' filters by specific areas or can be null for all items.

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 clearly states the verb ('List') and resource ('items on disk in a .d2s save'), with optional filtering by location. This distinguishes it from sibling tools like d2r_save_diff or d2r_save_scan.

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?

The description specifies that filtering is optional and lists possible location values (equipped, inventory, cube, stash, merc_equipped, or None). While it doesn't explicitly state when not to use this tool or provide alternative tool names, the context from sibling tools makes the purpose clear.

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

d2r_save_scanA

Run d2rdoctor scanner on a .d2s save file.

Returns a structured result with checksum/size status, item counts, and any scanner errors or warnings. status == "error" iff errors is non-empty. Deployment-blocker rule: never deploy a save that this tool flags as error (see CLAUDE.md Rule #17).

Args: path: Absolute path to .d2s file, or bare character name (resolved against Steam saves dir).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It explains the output structure (checksum/size status, item counts, errors), the condition for error status, and path resolution logic. It does not explicitly state read-only, but it is implied; still clear enough.

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 concise and well-structured: first sentence states purpose, then output details, then parameter explanation. No redundant sentences; every sentence adds 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?

Given the tool has only one parameter, no output schema, and no annotations, the description covers behavior, return structure, an important rule, and parameter semantics completely. It is sufficient for an agent to use correctly.

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

Parameters5/5

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

The single parameter 'path' has no description in the input schema, so the description adds crucial meaning: it accepts absolute paths or bare character names resolved against Steam saves dir. This fully compensates for the 0% schema description coverage.

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 clearly states the tool runs d2rdoctor scanner on a .d2s save file and returns structured results. Among siblings like d2r_save_diff or d2r_save_inspect, this tool is uniquely about scanning for issues, making its purpose distinct.

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?

The description includes a deployment-blocker rule ('never deploy a save that this tool flags as error'), providing a strong use case. However, it does not explicitly compare to alternative save tools or state when not to use it, missing some guidance.

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. Dates show when Glama detected each change.

  1. 23 tool updatesv0.1.0
    • First observedd2r_chargen_build
    • First observedd2r_chargen_import
    • First observedd2r_chargen_list
    • First observedd2r_chargen_validate
    • First observedd2r_lookup_item_base
    • First observedd2r_lookup_runeword
    • First observedd2r_lookup_set_item
    • First observedd2r_lookup_skill
    • First observedd2r_lookup_stat
    • First observedd2r_lookup_unique
    • First observedd2r_mod_audit
    • First observedd2r_mod_build
    • First observedd2r_mod_clean
    • First observedd2r_mod_deploy
    • First observedd2r_mod_diff
    • First observedd2r_mod_extract
    • First observedd2r_mod_undeploy
    • First observedd2r_mod_update
    • First observedd2r_save_diff
    • First observedd2r_save_inspect
    • First observedd2r_save_list_items
    • First observedd2r_save_scan
    • First observedd2r_search

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose. The naming with category prefixes (chargen, lookup, mod, save) and specific actions prevents ambiguity. For example, d2r_chargen_build and d2r_save_inspect operate on different resources, and lookups are split by item type.

Naming Consistency5/5

All tools follow the consistent pattern 'd2r_<category>_<action>', using snake_case uniformly. There are no mixed conventions (e.g., camelCase) or irregular formats.

Tool Count5/5

23 tools cover the full modding lifecycle—character generation, lookups, mod building/deploying, and save file inspection—without being excessive. Each tool seems justified for its role.

Completeness5/5

The tool set covers the main workflows: chargen (build, import, validate), lookups (all item types), mod management (extract, build, deploy, clean, update, diff, audit), and save operations (inspect, scan, diff, list items). No obvious gaps for the intended domain.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    Not graded
    maintenance
    Enables complete RPG Maker MZ game development through MCP tools, including autonomous game creation from concepts, AI-generated assets using Gemini 2.5 Flash, and programmatic control over maps, events, characters, and databases. Supports full game creation workflow from a single command with automatic story, asset, and implementation generation.
    32
    25
    -
  • A
    license
    A
    quality
    B
    maintenance
    Provides fast, cached access to comprehensive Dungeons & Dragons 5th Edition data including spells, monsters, classes, races, equipment, and rules through Open5e and D\&D 5e APIs.
    7
    2
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Provides real-time access to Path of Exile 2 game data including currency exchange rates, item prices, and ladder meta-build statistics. It also enables LLMs to search the community wiki and retrieve datamined game information from public APIs.
    8
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A Linux-native MCP server that gives AI assistants direct access to DMA-based memory operations for memory inspection, process analysis, reverse engineering, and game engine SDK extraction via natural language.
    13
    AGPL 3.0

Appeared in Searches

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/crabsmadethis/d2r-horadric-tools'

If you have feedback or need assistance with the MCP directory API, please join our Discord server