pob2-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pob2-mcpanalyze my PoE2 build's defensive layers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Path of Building MCP Server — PoE2
An MCP (Model Context Protocol) server that enables Claude to analyze, modify, and optimize Path of Exile 2 builds using Path of Building's actual calculation engine, via the PathOfBuilding-PoE2 fork.
It is a port of pob-mcp (PoE1) to PoE2. The high-fidelity calculation half is driven by a headless luajit process running an api-stdio JSON bridge, vendored in this repo at pob-api/ and run against an unmodified PathOfBuilding-PoE2 checkout.
PoE2 specifics
Engine-backed tools to prefer:
analyze_skills,suggest_supports(incl.measure_dps),list_gems,get_classes— all sourced from the PoB2 engine.list_gemsqueries Path of Building's own PoE2 gem database (skill + support gems, tags, gem family, requirements, max level). The defensive analyzer andvalidate_buildare tuned for PoE2 mechanics (evade/block/deflect, Spirit, charms; no spell suppression).On by default: poe.ninja currency tools on the PoE2 economy endpoint (
POE_NINJA_DISABLED=trueto hide).Opt-in: legacy PoE1-shaped skill-gem tools (
analyze_skill_links,suggest_support_gems,find_optimal_links,validate_gem_quality,compare_gem_setups,gem_upgrade_path) viaPOB_LEGACY_GEM_TOOLS=true; Trade API (PoE2 trade2 endpoints) viaPOE_TRADE_ENABLED=true.
Features
Build Analysis (Always Available)
List & Analyze Builds: Browse builds and extract stats, skills, items, passive trees, and notes from XML
Compare Builds: Side-by-side build comparison
File Watching: Real-time detection of builds saved from PoB with automatic cache invalidation
Tree Analysis: Compare passive trees, find paths to nodes, discover nearby notables, what-if allocation testing
High-Fidelity Calculations (Lua Bridge)
Live Stats: Accurate stat calculation using PoB's own engine — identical to what PoB GUI shows
Build Loading & Creation: Load existing builds or create new ones from scratch by class/ascendancy
Passive Tree Editing: Set full tree allocation and see immediate stat recalculation
Node Search: Search the passive tree for nodes by name or stat text
Character Level: Set level and watch all stats update accordingly
Item & Skill Management (Lua Bridge)
Items: Add items from PoE clipboard text, view all equipped gear
Flasks: Toggle flasks active/inactive with immediate stat feedback
Skills: Full gem management — create socket groups, add/remove/level/quality gems
Batch Operations:
setup_skill_with_gemsandadd_multiple_itemsfor efficient workflows
Build Optimization (Lua Bridge)
Defensive Analysis: 3-layer framework (avoidance / mitigation / recovery) — evaluates EHP, spell suppression, armour/PDR, evasion, block, life regen, and leech
Node Suggestions: Archetype-aware suggestions by goal (damage, life, ES, defense, resist)
Tree Optimization: Recommend nodes within reach of the current allocation
Item Upgrade Analysis: Slot-by-slot upgrade recommendations based on live stats
Skill Link Optimization: Detect missing "more" multipliers, penetration gaps, anti-synergies
Budget Build Creation: Generate starter build plans with skill links, gearing strategy, and passive priorities
Build Validation
Comprehensive Checks: Resistances, life pool, defensive layers, mana, flask immunities, accuracy, damage scaling
Severity Classification: Critical / Warning / Info with actionable suggestions
Dual Source: Uses Lua bridge stats when available, falls back to XML parsing
Overall Score: 0–10 build health score
Configuration & Scenario Testing (Lua Bridge)
Config State: View bandit, pantheon, enemy settings
Toggle Conditions: Charges, buffs (Onslaught, Fortify, Leeching), boss mode
Enemy Tuning: Set enemy level, resistances, armour, evasion for boss DPS testing
Skill Gem Analysis
Archetype Detection: Classify builds (Elemental Bow Attack, Summoner, Critical Spell, etc.)
Support Gem Recommendations: Ranked suggestions with DPS estimates and cost context
Quality Validation: Identify missing quality, awakened upgrade paths, corruption targets
Optimal Links: Auto-generate best support gem combinations for 4/5/6-link setups
Budget Tiers: League-start, mid-league, and endgame recommendations
Build Export & Persistence
Export: Copy builds to XML files with optional notes
Save Tree: Write optimized passive tree back to an existing build file
Snapshots: Versioned build history with tags, stat metadata, and one-click rollback
Currency & Market Data (poe.ninja)
Exchange Rates: Real-time currency prices in Chaos Orb equivalent
Arbitrage Detection: Find profitable currency trading loops
Trade Profit Calculator: Evaluate custom trading chains
Trade API (Optional, POE_TRADE_ENABLED=true)
Item Search: Search trade with stat filters, price range, link count
Price Checking: Min/max/median/average from recent listings
Upgrade Finder: Identify best item upgrade candidates for your build
Resistance Gear: Find affordable gear to cap resistances
Cluster Jewels: Search and analyze cluster jewel setups
Shopping List: Generate a prioritized shopping list from build analysis
Related MCP server: codex-cli-mcp-tool
Installation
cd pob-mcp
npm install
npm run buildConfiguration
Claude Desktop Configuration
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
XML-Only (No Lua Bridge)
{
"mcpServers": {
"pob": {
"command": "node",
"args": ["/absolute/path/to/pob-mcp-server/build/index.js"],
"env": {
"POB_DIRECTORY": "/path/to/your/Path of Building/Builds"
}
}
}
}Full Configuration (With Lua Bridge)
{
"mcpServers": {
"pob": {
"command": "node",
"args": ["/absolute/path/to/pob-mcp-server/build/index.js"],
"env": {
"POB_DIRECTORY": "/path/to/your/Path of Building/Builds",
"POB_LUA_ENABLED": "true",
"POB_FORK_PATH": "/path/to/PathOfBuilding/src",
"POB_CMD": "/usr/local/bin/luajit",
"POB_TIMEOUT_MS": "10000"
}
}
}
}Environment Variables
Variable | Default | Description |
| OS-default Builds dir | Path to your PoB builds directory |
|
| Set |
|
| Path to PathOfBuilding-PoE2/src |
|
| LuaJIT binary path |
|
| Lua request timeout (ms) |
|
| Enable Trade API tools (PoE2 |
| — | Your |
|
| Override the trade API base path if GGG changes it |
|
| Descriptive contactable User-Agent for trade requests |
|
| Set |
|
| Expose the legacy PoE1 skill-gem tools (⚠️ PoE1 gem model; prefer the engine-backed gem tools) |
Setting Up the Lua Bridge
The Lua bridge uses PoB's actual calculation engine for accurate stats.
1. Install LuaJIT
# macOS
brew install luajit
# Ubuntu/Debian
sudo apt-get install luajit
# Windows: download from https://luajit.org/ and add to PATH2. Get a PathOfBuilding-PoE2 checkout (no patching required)
The api-stdio bridge is now vendored inside this repo at pob-api/
(pob-api/bootstrap.lua, pob-api/API/{Server,Handlers,BuildOps}.lua, pob-api/utf8.lua). The
server launches luajit pob-api/bootstrap.lua with the working directory set to PoB's src/, so
it drives an unmodified PathOfBuilding-PoE2 checkout — you no longer patch HeadlessWrapper.lua
or copy files into the PoB tree.
Point POB_FORK_PATH at the src/ directory of any compatible PathOfBuilding-PoE2 checkout (the
sibling PathOfBuilding-PoE2/ works, as does a clean upstream clone). "Compatible" means a version
whose internals pob-api/API/BuildOps.lua expects; a wildly newer/older PoB may drift.
3. Verify
luajit -v
ls "$POB_FORK_PATH/Launch.lua" # PoB src (must exist)
ls pob-api/bootstrap.lua # vendored bridge entry (must exist)4. Update Claude Desktop config and restart Claude Desktop
Available Tools
The server registers 91 tools across 10 categories.
XML-Based Tools (Always Available)
Tool | Description |
| List all |
| Full build summary: class, stats, skills, items, tree |
| Side-by-side build comparison |
| Extract raw stats from build XML |
| Get build notes from XML |
| Set build notes in XML |
| Monitor builds directory for changes |
| Stop file monitoring |
| Show watching status and cache info |
| List recently modified builds |
| Clear passive tree data cache |
Tree Analysis Tools (Always Available)
Tool | Description |
| Show node differences between two builds |
| Find notables/keystones reachable from current allocation |
| Shortest path to a target node ID |
| Suggest passive tree upgrades |
| Suggest mastery choices for allocated clusters |
Lua Bridge — Core (Require POB_LUA_ENABLED=true)
Tool | Description |
| Start the PoB calculation engine (stdio or TCP) |
| Stop the engine and free resources |
| Create a blank build for a given class/ascendancy |
| Load a build file into the engine |
| Save the current in-memory build to a |
| Reload the current build from disk |
| Get current build metadata (class, level, etc.) |
| Set level and recalculate all stats |
| Get calculated stats ( |
| View passive tree: class, ascendancy, all allocated node IDs |
| Replace passive tree allocation (preserves class if omitted) |
| Add/remove individual nodes without replacing entire tree |
| Search passive tree by name or stat text |
| List all tree specs in the current build |
| Switch active tree spec |
| Create a new tree spec |
| Delete a tree spec |
| Rename a tree spec |
| List all item sets in the current build |
| Switch active item set |
| Generate a leveling plan for a build |
lua_set_tree class IDs (PoE2): 1=Witch, 2=Ranger, 6=Warrior, 7=Sorceress, 8=Huntress, 9=Mercenary, 10=Monk, 11=Druid. Call get_classes for the live list (classes/ascendancies can change between PoE2 patches).
Ascendancy IDs (PoE2) — per class, e.g. Witch: 1=Infernalist, 2=Blood Mage, 3=Lich, 4=Abyssal Lich; Monk: 1=Martial Artist, 2=Invoker, 3=Acolyte of Chayula. Use get_classes for the full, current mapping.
lua_save_build is required before using file-based tools (validate_build, analyze_build, etc.) on an in-memory build.
Lua Bridge — Item & Skill Management
Tool | Description |
| Add item from PoE clipboard text to a slot |
| Add multiple items in one operation |
| List all equipped gear with name, base, and rarity |
| Activate/deactivate flask 1–5; returns updated stats |
| Show all socket groups with gems, levels, and quality |
| Set which group/gem is used for DPS calculations |
| Create a new socket group (label, slot, enabled) |
| Add a gem to a socket group (name, level, quality) |
| Set gem level by group + gem index |
| Set gem quality (Default/Anomalous/Divergent/Phantasmal) |
| Remove a gem by group + gem index |
| Remove an entire socket group |
| Create a socket group with active gem + supports in one call |
Slot names: Weapon 1, Weapon 2, Helmet, Body Armour, Gloves, Boots, Amulet, Ring 1, Ring 2, Belt, Flask 1–Flask 5
Lua Bridge — Build Optimization
Tool | Description |
| 3-layer defensive audit: avoidance / mitigation / recovery |
| Archetype-aware node suggestions by goal |
| Recommend nearby nodes to allocate for a goal |
| Slot-by-slot item analysis with upgrade priorities |
| Audit supports: "more" multipliers, penetration, anti-synergies |
| Generate a starter build plan for a class/skill/budget |
| Get prioritized list of build problems and suggestions |
| Evaluate readiness for specific boss encounters |
| Suggest Watcher's Eye mods for the build's auras |
suggest_optimal_nodes goals: damage, defense, life, es, resist, speed
Defensive layers:
Avoidance — evasion, spell suppression, dodge, block
Mitigation — armour/PDR, endurance charges
Recovery — life regen (≥1%/s), leech, ES recharge
A build with all 3 layers is considered exceptional.
Configuration & Enemy Settings
Tool | Description |
| View bandit, pantheon, and enemy settings |
| Toggle charges, buffs, conditions (e.g. |
| Set enemy level, resistances, armour, evasion for DPS scenarios |
| Save current config as a named preset |
| Load a saved config preset |
| List all saved config presets |
Build Validation
Tool | Description |
| Check resistances, life, defensive layers, mana, immunities, accuracy, damage scaling |
Returns critical issues, warnings, and info with actionable suggestions and an overall 0–10 health score. Uses Lua bridge stats when available; falls back to XML parsing. build_name is optional — omitting it validates the currently loaded Lua bridge build.
Skill Gem Analysis (PoE2, engine-backed — preferred)
Tool | Description |
| Engine-truth breakdown of each socket group: active skill + supports, flags tag-mismatched supports, empty/disabled/unknown gems |
| Compatible supports for a group's active skill from PoB2's gem DB; ranked by tag relevance, or by real measured DPS with |
| Query PoB2's authoritative gem database (active/support, tags, family, requirements, max level) |
| PoE2 classes + ascendancy IDs from the engine |
Legacy PoE1 gem tools (not registered by default)
analyze_skill_links, suggest_support_gems, validate_gem_quality, compare_gem_setups,
find_optimal_links, gem_upgrade_path use a hand-coded PoE1 gem DB / archetype templates and a
6-link + Awakened-gem model that does not match PoE2. They are disabled by default; set
POB_LEGACY_GEM_TOOLS=true to expose them. Prefer the engine-backed tools above.
Build Export & Persistence
Tool | Description |
| Copy a build to a new XML file with optional notes |
| Write passive tree back to an existing build file |
| Create a versioned snapshot with description and tag |
| List all snapshots for a build |
| Restore from a snapshot (auto-backs up current state) |
| Export a human-readable build summary |
Snapshots are stored in POB_DIRECTORY/.pob-mcp/snapshots/.
Note: export_build copies from the XML file, not from the Lua bridge. Use lua_save_build first if you want to export in-memory changes.
Currency & Market Data (poe.ninja)
Tool | Description |
| Live PoE2 currency exchange rates (Exalted Orb equivalent) |
| Detect profitable currency trading loops (see note) |
| Evaluate a specific trading chain |
Sourced from the PoE2 poe.ninja economy endpoint
(/poe2/api/economy/exchange/current/overview?league=<League>&type=Currency), cached 5 min.
Live-verified. Pass the exact, case-sensitive PoE2 league name (e.g., Runes of Aldur, Standard).
Values are in Exalted Orb equivalent (PoE2's base currency), not Chaos.
Note: the PoE2 currency-exchange feed exposes a single value per currency (no separate buy/sell spread), so
find_arbitragegenerally returns nothing — round-trips evaluate to ~0% profit.get_currency_ratesandcalculate_trading_profitare the useful tools here.
Trade API Tools (Require POE_TRADE_ENABLED=true)
Ported to the PoE2 trade2 endpoints (https://www.pathofexile.com/api/trade2). Stat IDs and
leagues are fetched from this base, so the stat mapper picks up PoE2 trade stats automatically.
Heads up: the official trade API is behind Cloudflare and most endpoints require a logged-in session — set
POE_SESSION_IDto yourPOESESSIDcookie. It is also strictly rate-limited. Verified working server-side (search→fetch through Cloudflare with onlyPOE_SESSION_IDset). Note POESESSID expires periodically; refresh it if you start getting 401/403s.
Tool | Description |
| Search trade with stat filters, price range, link count |
| Price statistics (min/max/median/average) for an item |
| List available leagues |
| Look up Trade API stat IDs |
| Identify best upgrade candidates for your build |
| Find affordable gear to cap specific resistances |
| Compare multiple trade listings side by side |
| Search for cluster jewels by notable |
| Evaluate cluster jewel setups for a build |
| Generate a prioritized shopping list from build analysis |
Typical Workflows
Analyze an existing build
1. lua_start
2. lua_load_build (build_name: "MyBuild.xml")
3. lua_get_stats (category: "defense")
4. validate_build
5. analyze_defenses (build_name: "MyBuild.xml")Build from scratch
1. lua_start
2. lua_new_build (class_name: "Witch", ascendancy: "Necromancer")
3. setup_skill_with_gems (active_gem: "Summon Skeletons", support_gems: [...])
4. lua_set_tree (nodes: [...])
5. lua_get_stats
6. lua_save_build (build_name: "MySummoner.xml")Optimize passive tree
1. lua_load_build (build_name: "MyBuild.xml")
2. suggest_optimal_nodes (goal: "life", points_available: 5)
3. search_tree_nodes (query: "maximum life")
4. lua_get_tree ← copy current node list
5. lua_set_tree ← add new nodes to the list
6. lua_get_stats ← verify improvement
7. lua_save_build ← persistTest DPS against Shaper
1. lua_load_build
2. set_enemy_stats (level: 84, fire_resist: 40, cold_resist: 40, lightning_resist: 40)
3. set_config (config_name: "enemyIsBoss", value: true)
4. lua_get_stats (category: "offense")Troubleshooting
XML Features
No builds found
Verify
POB_DIRECTORYis correct and contains.xmlfilesCheck file permissions
Parse errors
Open the build in PoB GUI to verify it isn't corrupted
Ensure PoB is up to date
Lua Bridge
luajit command not found
brew install luajit # macOS
sudo apt-get install luajit # Ubuntu/DebianOr set POB_CMD to the full path (e.g., /opt/homebrew/bin/luajit).
Failed to find valid ready banner
POB_FORK_PATH must point to a PathOfBuilding-PoE2 src/ directory:
ls "$POB_FORK_PATH/Launch.lua" # must exist (PoB src)
ls "$POB_FORK_PATH/Modules/" # must exist
ls pob-api/bootstrap.lua # vendored bridge entry (must exist)Timed out waiting for response
Increase
POB_TIMEOUT_MS(try20000)Test manually:
cd "$POB_FORK_PATH" && luajit /abs/path/to/pob-api/bootstrap.lua
Stats don't match PoB GUI
Check bandit/pantheon/enemy settings with
get_configEnsure the correct tree spec is active in the XML
Make sure your PathOfBuilding fork is on the
api-stdiobranch and up to date
Bridge becomes unresponsive
lua_stop → wait a moment → lua_startIf still unresponsive, restart Claude Desktop.
Nodes dropped after lua_set_tree
Nodes must form a valid connected path from the class starting node. Disconnected nodes are silently dropped by PoB. Ensure all intermediate nodes are included.
lua_save_build doesn't persist gem changes
Gem modifications made via add_gem, set_gem_level, set_gem_quality are currently held in Lua memory and are not serialized back to the XML on save. This is a known limitation.
Development
npm run build # compile TypeScript
npm run dev # watch modePath of Building XML Structure
PoB builds are XML files with:
<Build>: Character info and stats<Tree>: Passive skill tree node allocations<Skills>: Socket groups and gem links<Items>: Equipped items<Notes>: Build notes
Contributing
Issues and pull requests are welcome!
Contributors
License
GPL-3.0
Available Tools
30 toolsanalyze_buildB
Analyze a Path of Building build file and extract detailed information including stats, skills, gear, passive skill tree analysis with keystones, notables, jewel sockets, build archetype detection, and optimization suggestions
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Name of the build file (e.g., 'MyBuild.xml') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It lists the types of information extracted but does not state whether the operation has side effects, requires specific permissions, or how it handles missing or invalid files. The read-only nature is implied but not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and lists the key outputs. It is somewhat long but information-dense, with no wasted words. The structure is appropriate for the tool's broad scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with many output categories, and there is no output schema or annotations to supplement the description. The description lists the types of information extracted, but does not explain the return format, potential errors, or how to interpret the results. While adequate for a basic understanding, it leaves gaps for a user needing to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is well-documented in the schema. The description adds no additional meaning about the build_name parameter beyond what the schema provides, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Analyze a Path of Building build file and extract detailed information.' It specifies the resource (build file) and the scope (stats, skills, gear, passive tree, keystones, etc.), which distinguishes it from sibling tools by covering a comprehensive analysis rather than a single metric.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like get_build_stats or analyze_defenses. It does not mention any exclusions, prerequisites, or contexts where a different tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_defensesA
Deep-dive into defensive layers (avoidance/mitigation/recovery): EHP, spell suppression, evasion, block, armour/PDR, life regen, leech. Use this when you specifically want detailed defense breakdown. validate_build already covers this — only call analyze_defenses separately if you need more defensive detail than validate_build provides.
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Build to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral transparency burden. It clearly implies a read-only analysis operation through terms like 'deep-dive' and 'breakdown', and adds important context about how this tool relates to validate_build. It does not disclose potential cost or side effects, but for a read-only analysis tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the tool's purpose and key defensive categories, then includes usage guidance and an alternative. Every sentence provides distinct value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one parameter, no output schema, and no annotations, so the description must carry the load. It adequately explains the tool's scope and relationship to validate_build. However, it could optionally describe the expected return format (e.g., a breakdown report) to be fully complete, but the listed defensive layers imply what will be returned. Overall, it is sufficiently complete for an analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single parameter build_name is documented as 'Build to analyze'. The description does not add any additional detail about the parameter, so it does not exceed the schema baseline. A score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a deep-dive into defensive layers, explicitly listing defensive metrics (EHP, spell suppression, evasion, block, armour/PDR, life regen, leech). It distinguishes itself from the sibling tool validate_build by noting that validate_build already covers this and analyze_defenses is for more detailed breakdowns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this when you specifically want detailed defense breakdown.' It also names the alternative (validate_build) and explains when NOT to use this tool separately, which is exactly what the dimension requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_itemsB
Analyze equipped items and suggest upgrades or improvements
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Build to analyze |
TDQS
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 of disclosing behavior. It implies a read-only analysis ('suggest upgrades') but does not explicitly state that no changes are made, what output format is returned, or whether it requires a valid saved build. This leaves significant ambiguity for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundant words. It is front-loaded and immediately conveys the core purpose and scope. Concise yet sufficiently informative for what it covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, no output schema), the description covers the basic function but omits key context. It does not describe the return value, the type of upgrade suggestions, or any side effects or permissions. This is a minimally viable description but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter 'build_name' with a minimal description ('Build to analyze'). Since schema coverage is 100%, the tool description adds no additional parameter semantics. It doesn't clarify format, constraints, or how the build is selected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Analyze') on a specific resource ('equipped items') with an intended outcome ('suggest upgrades or improvements'). It distinguishes itself from sibling tools like analyze_build and analyze_defenses by focusing on equipped gear, though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description only states what it does, and does not mention prerequisites, exclusions, or cases where another analysis tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_trading_profitA
Calculate the profit/loss from a specific trading chain. Useful for testing your own trading strategies or validating arbitrage opportunities before executing them. Shows step-by-step conversion rates. IMPORTANT: Use the EXACT league name the user specifies - do not substitute or guess.
| Name | Required | Description | Default |
|---|---|---|---|
| league | Yes | EXACT league name as specified by user (e.g., 'Standard', 'Settlers', 'Keepers', 'Hardcore'). Do not substitute or change this value. | |
| start_amount | No | Amount of first currency to start with (default: 1) | |
| currency_chain | Yes | Array of currency names in trading order (e.g., ['Divine Orb', 'Chaos Orb', 'Exalted Orb', 'Divine Orb']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds value by stating it 'Shows step-by-step conversion rates' and emphasizes the need for the exact league name, a key constraint. However, it does not explicitly state that the operation is read-only, what the return format looks like beyond conversion rates, or any potential failure modes, making it minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and front-loaded with the core purpose ('Calculate the profit/loss'), followed by two brief context sentences and a critical warning. Every sentence carries weight, and the important note about the exact league name is clearly flagged. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a calculation tool with no output schema, the description reasonably covers the return behavior by stating it shows step-by-step conversion rates and calculates profit/loss. It also gives sufficient context for applicability. It stops short of detailing edge cases (e.g., invalid league, real-time vs historical rates), but the core information is complete enough for an agent to select and invoke the tool properly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already provides thorough descriptions for all parameters, including the league warning and a currency_chain example. The description's reference to 'specific trading chain' aligns with currency_chain but adds no extra parameter-level details. Thus, the schema does the heavy lifting, meriting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Calculate the profit/loss') and a specific resource ('a specific trading chain'). It distinguishes itself from siblings like find_arbitrage (which likely discovers opportunities) and get_currency_rates (which provides rates) by focusing on evaluating a given chain. The verb+resource structure is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear use cases: 'testing your own trading strategies or validating arbitrage opportunities before executing them.' This implies it is for validation rather than discovery, offering context for when to use it. However, it does not explicitly name alternatives (e.g., find_arbitrage) or state when not to use it, leaving a small gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_buildsA
Compare two Path of Building builds side by side
| Name | Required | Description | Default |
|---|---|---|---|
| build1 | Yes | First build file name | |
| build2 | Yes | Second build file name |
TDQS
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 says 'compare side by side' but doesn't disclose what the output looks like, whether it's a diff, whether it has side effects, or any behavioral expectations. This is a minimal tautological explanation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that is easy to parse. However, it is extremely brief and omits significant behavioral details that could be included without much added length, so it's concise but not comprehensively structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is expected to explain what the tool returns or any important context. It doesn't. For a comparison tool, the agent is left without any idea of what 'compare side by side' actually produces, making the tool risky to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already described as 'First build file name' and 'Second build file name'. The description adds no additional semantic detail beyond naming the two builds, so it doesn't compensate beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Compare' with a clear resource 'two Path of Building builds' and the manner 'side by side'. This clearly distinguishes it from siblings like analyze_build (single build) and compare_trees (comparing tree structures).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this tool is for comparing two full builds side by side. However, it doesn't explicitly mention when not to use it or name alternatives, though the intent is fairly obvious given the verb and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_treesA
Compare passive skill trees between two builds, showing differences in allocated nodes
| Name | Required | Description | Default |
|---|---|---|---|
| build1 | Yes | First build file name | |
| build2 | Yes | Second build file name |
TDQS
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 mentions 'showing differences' but does not disclose whether the operation is read-only, error handling, or any side effects. This is minimal transparency for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no superfluous words, front-loaded with the action and resource. Perfectly concise and efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequately complete for a simple tool: parameters are fully covered by schema, and the output is stated as 'showing differences in allocated nodes'. However, it lacks behavioral details like error conditions or result format, and the lack of an output schema puts some burden on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers both parameters with descriptions, so the baseline is 3. The description does not add extra meaning beyond naming the two builds, and the schema already explains 'build1' and 'build2' as file names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 passive skill trees between two builds and showing differences in allocated nodes. The verb 'compare' is specific and the resource is well-defined, distinguishing it from the broader sibling 'compare_builds'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are mentioned, but the description implies usage for comparing passive skill trees specifically. Without exclusions or alternative references, the agent may not know when to choose this over 'compare_builds'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_budget_buildC
Create a league-start/budget-friendly version of a build
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Build to create budget version of | |
| budget_tier | No | Budget tier: 'league-start', 'low', 'medium' (default: league-start) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, placing the full burden on the description. It only states 'Create,' implying a mutating operation, but does not disclose whether it saves to a database, overwrites existing builds, or produces a temporary result. No side effects, prerequisites, or output behavior are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is appropriately front-loaded with the action and object. However, it is under-specified for a create operation, which prevents a perfect score, but that is more a completeness issue than a structure issue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, this description is too minimal for a create tool. It does not explain what happens when the budget version is created, whether it persists, or how it relates to other build tools. The agent has no way to predict the tool's full behavior or return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with descriptions, including budget_tier's allowed values ('league-start', 'low', 'medium'), achieving 100% schema coverage. The tool description adds no additional parameter semantics beyond restating the 'budget-friendly' theme, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Create' and clearly names the resource: 'a league-start/budget-friendly version of a build.' This distinguishes it from sibling tools like analyze_build or list_builds, which have different purposes. However, it does not elaborate on what 'budget-friendly version' entails, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. Sibling tools such as optimize_tree or analyze_build could be related, but the description gives no context for when creating a budget build is appropriate or how it differs from other build-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_buildA
Export a copy of a build to an XML file. Creates a variant/copy from an existing build file. NOTE: This does NOT export from Lua bridge - use save_tree to apply Lua bridge modifications back to files.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Additional notes to append to build notes | |
| overwrite | No | Allow overwriting existing file (default: false) | |
| build_name | Yes | Source build filename (e.g., 'MyBuild.xml') | |
| output_name | Yes | Output filename (without .xml extension) | |
| output_directory | No | Target directory (optional, defaults to POB_DIRECTORY/.pob-mcp/exports) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states it creates a copy/variant and notes the Lua bridge limitation, which is useful. However, it doesn't disclose write permissions, overwrite behavior, or potential side effects like file creation on disk in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, followed by a critical caveat. No wasted words, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no output schema, the description covers the main purpose and the key exception. It lacks return value information but is otherwise adequate for an agent to understand the tool's function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional parameter meaning beyond what the schema already provides, such as defaults for output_directory or overwrite behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports a copy of a build to an XML file and creates a variant/copy. It uses specific verb ('Export') and resource ('build'), and the note about Lua bridge distinguishes it from save_tree, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-not guidance: 'This does NOT export from Lua bridge - use save_tree to apply Lua bridge modifications back to files.' This offers a clear alternative for a specific scenario. However, it doesn't give broader context on when to use this over other export/snapshot tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_build_summaryA
Generate a clean markdown summary of the loaded build suitable for sharing on Reddit, Discord, or as build documentation
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 prerequisites (e.g., a build must be loaded), potential side effects, or whether it returns the markdown directly. The description reads more as a purpose statement than a behavioral contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and intended use, with no unnecessary words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter tool, the description covers the core purpose and output format (markdown). However, it leaves ambiguity about the 'loaded build' prerequisite and what happens if none is loaded, and it does not specify the return behavior (text vs. file). These gaps reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter details to explain. The baseline of 4 applies per the scoring rules for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') with a clear resource ('markdown summary of the loaded build'). It distinguishes itself from the sibling 'export_build' by specifying the markdown format and audience (Reddit, Discord, documentation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context ('suitable for sharing on Reddit, Discord, or as build documentation'), but does not explicitly mention alternatives or when not to use it, stopping short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_arbitrageA
Find currency arbitrage opportunities - profitable trading loops where you can trade currencies in a circle and end up with more than you started. Uses real-time poe.ninja rates to identify market inefficiencies. Perfect for making passive income through currency trading. IMPORTANT: Use the EXACT league name the user specifies - do not substitute or guess.
| Name | Required | Description | Default |
|---|---|---|---|
| league | Yes | EXACT league name as specified by user (e.g., 'Standard', 'Settlers', 'Keepers', 'Hardcore'). Do not substitute or change this value. | |
| min_profit_percent | No | Minimum profit percentage to show (default: 1.0). Lower values find more opportunities but with smaller profits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal that the tool uses 'real-time poe.ninja rates to identify market inefficiencies' and includes a strong instruction about not guessing league names. However, it omits other behavioral traits such as whether the operation is read-only, possibility of rate limits, or what happens when no opportunities exist. This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. It consists of three sentences, each earning its place: what it does, data source/use case, and a critical usage warning. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description is quite complete: it explains the core function, data source, and usage context. It lacks a description of the return format (e.g., a list of loops), but given the tool's simplicity and the strong schema coverage, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameter descriptions, including specific details for league and min_profit_percent. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find currency arbitrage opportunities' and elaborates with 'profitable trading loops where you can trade currencies in a circle and end up with more than you started.' This specific verb+resource combination distinguishes it from siblings like get_currency_rates (which simply fetches rates) and calculate_trading_profit (which likely computes profit for a single trade).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: 'Perfect for making passive income through currency trading.' It also emphasizes a critical behavioral rule ('Use the EXACT league name the user specifies - do not substitute or guess'), but it does not explicitly name alternatives or exclusion conditions. However, the unique focus on arbitrage loops implies when it should be used over related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_path_to_nodeA
Find the shortest path from your current tree to a specific passive node. Uses loaded Lua bridge build when no build_name is provided.
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | No | Build to analyze (optional if a build is loaded via lua_load_build) | |
| target_node_id | Yes | ID of the target passive node | |
| show_alternatives | No | Return up to 3 alternative paths instead of just the shortest (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the default build behavior, but does not mention return format, whether it is read-only, error conditions, or how alternatives are returned. It adds some context but leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose, and no wasted words. The structure is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters, no annotations, and no output schema. The description covers purpose and build default, but does not explain the return value shape or behavior when no path exists. It is adequate for a simple query tool but leaves some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond the schema, mainly clarifying that the loaded build is used when build_name is omitted, which slightly enriches the build_name parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Find the shortest path from your current tree to a specific passive node.' This is distinct from sibling tools like get_nearby_nodes or optimize_tree, which address different concerns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is used when a path to a target node is needed. It also gives a usage nuance about build selection ('Uses loaded Lua bridge build when no build_name is provided'), though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_build_notesA
Read the notes/documentation from a PoB build file
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Name of the build file (e.g., 'MyBuild.xml') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly implies a non-destructive read operation, but it does not disclose potential errors (e.g., file not found), permissions, or return format. This is acceptable for a simple read but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It communicates the core function immediately and efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema, no annotations), the description is adequate. It tells the reader what the tool does and implies the return value (the notes). It could specify the output format, but the simplicity makes this less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema; it just references 'PoB build file' without expanding on the 'build_name' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Read' and clearly identifies the resource as 'notes/documentation from a PoB build file.' It is distinct from siblings like 'set_build_notes' (write operation) and 'list_builds' (listing files), though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context for when to use this tool is implied by the word 'Read' — when you need notes from a build file. However, there is no explicit guidance on when not to use it or which sibling tool to use instead (e.g., 'set_build_notes' for writing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_build_statsC
Extract specific stats from a build (Life, DPS, resistances, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Name of the build file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must communicate behavioral traits. It only says 'Extract' without explicitly confirming read-only behavior, failure modes, or dependency on a saved build file. This leaves safety and side effects undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and includes helpful examples. It is concise without being incomplete, though it could briefly state what the function returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should explain return values and expected behavior. It only lists example stats and does not mention output format, error handling, or how this differs from similar tools, making it inadequate for fully informed use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single parameter build_name with 'Name of the build file' (100% schema coverage). The tool description adds no parameter-specific details, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Extract') and resource ('stats from a build') with concrete examples (Life, DPS, resistances). It is clear and distinct, though it does not explicitly contrast with sibling tools like analyze_build, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided regarding when to use this tool versus alternatives. The description lacks any mention of context, prerequisites, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_currency_ratesA
Get current currency exchange rates from poe.ninja. Returns real-time market prices for all currencies in Chaos Orb equivalent. Updated every 5 minutes from live trading data. IMPORTANT: Use the EXACT league name the user specifies - do not substitute or guess.
| Name | Required | Description | Default |
|---|---|---|---|
| league | Yes | EXACT league name as specified by user (e.g., 'Standard', 'Settlers', 'Keepers', 'Hardcore'). Do not substitute or change this value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states the data source (poe.ninja), update cadence (every 5 minutes), the nature of the data (live trading data), and the critical league-name constraint. It could add failure behavior for invalid leagues, but the provided details are substantive beyond what structured fields offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main action, and ends with an imperative warning highlighted in uppercase. Every sentence contributes essential information—source, output, freshness, and a critical constraint—with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description clearly explains what is returned (real-time prices in Chaos Orb equivalent), the source, the update frequency, and the exact league requirement. This is sufficient for an agent to invoke the tool correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the only parameter 'league', which already includes a detailed description about exactness. The tool description reinforces this with an uppercase warning but adds no new meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' and identifies the exact resource as 'current currency exchange rates from poe.ninja.' It clearly distinguishes this from sibling tools like analyze_build or find_arbitrage by stating the output type (Chaos Orb equivalent). This leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—whenever current exchange rates are needed—and explicitly warns to use the exact league name, which is an important usage condition. It does not name alternative tools or state when not to use it, but the context is clear enough among the provided siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nearby_nodesA
Find notable and keystone passives near your current tree allocation. Uses loaded Lua bridge build when no build_name is provided.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional text filter for node names/stats | |
| build_name | No | Build file to analyze (optional if a build is loaded via lua_load_build) | |
| max_distance | No | Maximum path distance to search (default: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses the fallback behavior (using the loaded Lua bridge build) which is helpful, but it does not describe what 'notable' means, whether results include coordinates/passives, or any side effects. It is a minimal but not misleading disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, each adding value: the first states the core purpose, the second provides a key behavioral detail. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a likely read-only query tool with no output schema, the description covers input behavior and fallback logic, but it omits what the response contains and lacks explicit exclusions. It is adequate for a simple lookup but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a small contextual detail about 'current tree allocation' aligning with max_distance, and reinforces build_name optionality via the loaded-build fallback, but it does not enrich parameter semantics significantly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Find' clearly identifies a search/query action, and the resource is specific: 'notable and keystone passives near your current tree allocation.' This distinguishes it from sibling tools like find_path_to_node (pathfinding) and analyze_build (analysis).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when a loaded build is used (when no build_name is provided) and the scope ('near your current tree allocation'), but it does not explicitly state when to use this tool over alternatives such as suggest_optimal_nodes or get_build_stats. The usage context is implied rather than directly contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_changesB
Get a list of recently changed build files.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of recent changes to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does not disclose what 'recently changed' means (time window), how changes are tracked, or what fields are returned. Since there is no output schema, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no fluff. It directly conveys the core purpose, though lacks expansion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description omits behavioral details such as the definition of 'recently' and the return structure. Given no output schema, these are important for correct invocation and result interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides full coverage for the 'limit' parameter including its default. The description adds no additional semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get) and resource (list of recently changed build files). It is specific but does not differentiate from sibling tools like list_builds or get_build_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives such as list_builds or get_build_notes. The description simply states the function without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_buildsA
List all available Path of Building builds
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states the action but doesn't mention return format, sorting, pagination, or what 'available' means. The behavior is minimally described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the verb and resource, containing zero wasted words. It is appropriately concise for a no-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is mostly adequate but lacks detail on what 'builds' refers to and what data will be returned. Without an output schema, the description should explain the result format to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, and the description correctly indicates no filtering is needed. With no parameters to document, the baseline of 4 is appropriate; the description adds no extra param semantics but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and clearly identifies the resource ('all available Path of Building builds'), distinguishing it from sibling tools like get_build_stats or analyze_build. It precisely states what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need a listing of all builds, but provides no explicit guidance on when to use this tool versus alternatives like get_build_stats or compare_builds. No exclusions or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_snapshotsA
List all snapshots for a build with metadata and stats
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of snapshots to return (optional) | |
| build_name | Yes | Build to list snapshots for | |
| tag_filter | No | Filter by tag (optional) |
TDQS
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 mentions returning 'metadata and stats,' which gives some insight into the output, but it does not explicitly state that the operation is read-only, describe ordering/pagination, or disclose any potential side effects. The word 'list' implies reading, but explicit disclosure is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the main action and resource. Every word is meaningful, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with complete schema parameter documentation, the description is largely sufficient. It gives a general sense of the return content ('metadata and stats') but does not detail pagination, ordering, or the exact structure of the response. Since the tool is low-complexity and the schema covers parameters, a slightly abbreviated description is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (build_name, limit, tag_filter). The description does not add extra meaning beyond the schema, but the baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('snapshots for a build'), and mentions that it includes metadata and stats. This distinguishes it from sibling tools like snapshot_build (create) and restore_snapshot (restore), making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing snapshots of a specific build but does not explicitly mention alternatives or when not to use this tool. It lacks the explicit 'use X instead' guidance seen in higher-scoring examples, though the context of sibling tools (e.g., list_builds, get_build_stats) makes the intended use fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_skill_linksA
Analyze skill gem setups for 'more' multipliers, penetration, and support gem synergies. Flags missing multiplicative damage supports and suggests clear-speed vs bossing balance.
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Build to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It explicitly frames the tool as read-only ('analyze', 'flags', 'suggests') and outlines the behavioral scope (missing multiplicative supports, clear-speed vs bossing balance). This gives a clear safety profile and output behavior, though it does not delve into limitations like build format requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and resource, and contains zero filler. Every clause adds substantive detail about what the analysis covers and what it produces.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only analysis tool with no output schema, the description provides sufficient context: it covers inputs implicitly (the build to analyze) and outputs (flags and suggestions). It could mention output format or use cases, but the tool is simple enough that this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter build_name, which is described as 'Build to analyze'. The tool description adds no additional parameter-specific semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes skill gem setups for 'more' multipliers, penetration, and support gem synergies, which distinctively separates it from sibling tools like analyze_build or analyze_items. The verb 'analyze' plus a specific resource (skill gem setups) and concrete outputs (flags missing supports, suggests balance) make the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for gem-link optimization but does not explicitly contrast with alternatives like analyze_build or optimize_tree. No when-to-use or when-not-to-use guidance is provided, so the agent must infer the context from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_treeA
Full passive tree optimization - removes inefficient nodes and reallocates to better options
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Primary optimization goal: 'damage', 'defense', 'balanced' | |
| build_name | Yes | Build to optimize | |
| constraints | No | Constraints like minimum life, required keystones, etc. | |
| preserve_keystones | No | Whether to preserve allocated keystones (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does reveal a key behavior: the tool removes nodes and reallocates them. However, it omits critical details such as whether changes are persisted, whether the operation is reversible, or how constraints interplay with the reallocation. The disclosure is partial, not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence (13 words) that uses a dash to add a concrete detail. It is front-loaded with the primary action and resource, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite full schema coverage and clear purpose, the description lacks essential context for a tool with nested parameters and no output schema. It does not mention whether the tool modifies the build, returns an optimized tree, or how constraints are applied during optimization. This is a significant omission for a complex operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter. The description adds no additional parameter-level semantics—it only gives a general overview of the optimization process. The description's phrase 'better options' slightly hints at the goal parameter but is too vague to add meaningful meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('optimization'), clearly identifies the resource ('passive tree'), and adds scope ('Full') plus a concrete behavioral outcome ('removes inefficient nodes and reallocates to better options'). This distinguishes it from sibling tools like 'suggest_optimal_nodes' or 'compare_trees'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (use this for full passive tree optimization) but provides no explicit guidance on when to choose this over alternatives, no exclusions, and no mention of prerequisites. The phrase 'Full' hints at scope but does not elaborate on when other optimization tools might be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_tree_dataA
Force refresh the passive skill tree data cache. Use this if tree data seems outdated.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Specific tree version to refresh (optional, defaults to all versions) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. 'Force refresh' implies cache invalidation or replacement, but it does not state whether the operation is safe (e.g., read-only vs. destructive), whether it may require network resources, or what happens to the existing cache beyond 'refreshing.' The description fails to disclose these potential side effects, leaving the agent to infer the impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first states what the tool does, and the second states when to use it. No redundant information or fluff, entirely front-loaded and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is minimally adequate. It states purpose and usage condition, and the schema covers parameters. However, the lack of behavioral transparency (side effects, safety profile) leaves a notable gap in completeness, especially given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description provides 100% coverage for the single 'version' parameter, explaining it is optional and defaults to all versions. The description itself adds no additional parameter context, but the schema is sufficient, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Force refresh the passive skill tree data cache' with a specific verb ('refresh') and resource ('passive skill tree data cache'). It distinguishes from all sibling tools, none of which perform cache refresh operations. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear trigger condition: 'Use this if tree data seems outdated.' This is explicit guidance on when to use the tool. It does not name alternatives, but since no sibling tool offers the same function, explicit exclusions are unnecessary. The guidance is sufficient for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_snapshotA
Restore a build from a snapshot. Optionally creates a backup of current state before restoring.
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | Yes | Build to restore | |
| snapshot_id | Yes | Snapshot ID (timestamp) or tag to restore from | |
| backup_current | No | Create snapshot of current state before restore (default: true) |
TDQS
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 of behavioral disclosure. It only mentions the optional backup feature but does not disclose potentially destructive behavior (overwriting current state), permission requirements, error handling, or what happens on success/failure. For a restore operation, these are significant gaps, making transparency poor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the primary action, and contains no fluff. It efficiently conveys the core function and the optional backup behavior without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should provide more behavioral context. It lacks details about return values, side effects, error conditions, and prerequisites. The tool is potentially destructive, yet the description is minimal. This is comparable to the update_drive example, which scored 2 for similar gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context for the 'backup_current' parameter by explaining its purpose, which goes slightly beyond the schema. However, it doesn't add meaning for build_name or snapshot_id, which are already adequately described in the schema. The added value is modest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Restore') and resource ('a build from a snapshot'). It also mentions the optional backup behavior, which distinguishes it from related snapshot tools like snapshot_build and list_snapshots. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool—restoring a build from a snapshot. While it doesn't explicitly mention alternatives or when not to use it, the context is evident from the tool name and description. Sibling tools like snapshot_build (create) and list_snapshots (list) imply this is the restore counterpart, so the usage guidance is adequate but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_treeA
Update only the passive tree in an existing build file. Use this to apply tree optimizations or Lua bridge modifications back to the original build.
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | Array of node IDs to allocate | |
| backup | No | Create backup before modifying (default: true) | |
| build_name | Yes | Target build filename to update | |
| mastery_effects | No | Mastery selections as object mapping node ID to effect ID (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It discloses that the tool modifies an existing file and only affects the passive tree, which is helpful. However, it does not clarify whether the 'nodes' array replaces the entire tree or merges with existing nodes, nor does it mention backup behavior (though schema notes default true), permissions, or failure handling. This ambiguity prevents a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and contains no fluff. Every word contributes to understanding the tool's purpose and intended use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with four parameters and no output schema, the description covers the core purpose and usage context sufficiently. It lacks details about return values or post-conditions, but these are not essential for a simple update tool, and the backup behavior is covered in the schema. Adequate overall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all four parameters (100% coverage), so the description needs to add little extra. The description does not enhance understanding of any specific parameter beyond the schema, though it contextualizes the overall purpose. Baseline 3 is appropriate for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Update only the passive tree in an existing build file.' This uses a specific verb ('update'), resource ('passive tree'), and scope ('in an existing build file'), distinguishing it from siblings like optimize_tree (which computes optimizations) and snapshot_build (which creates backups).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use the tool: 'Use this to apply tree optimizations or Lua bridge modifications back to the original build.' This provides clear context for the intended use case. However, it does not mention when not to use it or explicitly name alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_build_notesA
Write notes/documentation into a PoB build file (overwrites existing notes)
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | Notes content to write (plain text or markdown) | |
| build_name | Yes | Name of the build file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'overwrites existing notes', which is a critical destructive trait. The verb 'write' also signals mutation. This goes beyond a neutral 'sets notes' and gives the agent essential risk information. It does not discuss reversibility or failure modes, but for a simple setter, the overwrite disclosure is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficiently structured sentence that front-loads the primary action ('Write notes/documentation') and immediately adds the crucial overwrite caveat in parentheses. Every word contributes meaning; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 simple string parameters) and no output schema, the description covers the essential purpose, target resource, and behavioral side effect. It does not mention prerequisites like whether the build file must pre-exist, but this is not critical for basic usage. The core of writing and overwriting is fully communicated, making it contextually complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, describing both build_name and notes with clear meanings. The description adds minimal extra semantics by rephrasing 'write notes/documentation', but does not explain relationships or format details beyond the schema. Per the baseline for high schema coverage, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action with a specific verb and resource: 'Write notes/documentation into a PoB build file'. It also includes the key behavior of overwriting existing notes, distinguishing it from read-only siblings like get_build_notes. This fully captures the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: to write or update notes in a build file. It does not explicitly name alternatives or exclusions, but the 'overwrites existing notes' note implies a caution that this is for replacement rather than appending. Sibling names further clarify the write/read distinction, so it earns a 4 for clear context without explicit alternative framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_buildA
Create a versioned snapshot of a build for easy rollback. Snapshots are stored separately with metadata tracking stats and changes.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | User-friendly tag (e.g., 'before-respec', 'league-start') (optional) | |
| build_name | Yes | Build to snapshot | |
| description | No | Description of this snapshot (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses useful behavioral details: snapshots are stored separately and include metadata tracking stats and changes. However, it omits potential side effects (e.g., whether an existing tag is overwritten), permission requirements, or what the response contains, limiting transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and every clause carries meaning. It is efficiently written without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 3 fully documented parameters, the description is minimally complete. It explains the tool's purpose and storage behavior but does not mention what happens on success (e.g., returns a snapshot ID) or how it relates to restore_snapshot, which could round out the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters (build_name, tag, description). The description adds no parameter-level meaning beyond the schema, which is acceptable given the baseline of 3 for complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and resource ('versioned snapshot of a build'), clearly stating the tool's primary function. It is easily distinguished from sibling tools like list_snapshots and restore_snapshot, which manage snapshots rather than create them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for easy rollback' implies the intended usage context (before making risky changes), and 'versioned' suggests creating a stable restore point. However, it does not explicitly mention when not to use it or name alternatives like export_build for sharing, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_watchingA
Start monitoring the builds directory for changes. Builds will be auto-reloaded when saved in PoB.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the key behavior (auto-reload on save), but does not mention side effects such as whether an existing watch is replaced, resource usage, or how to stop monitoring. Some gaps remain for a long-running operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the action and consequence front-loaded. No filler or redundant information, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter start command, the description covers the purpose and the key consequence. It does not specify the return value or resource limits, but the simplicity of the tool makes this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to explain. The baseline for 0 params is 4, and the description adds no unnecessary parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Start monitoring') and resource ('builds directory'), and it distinguishes itself from siblings like stop_watching by describing the start action and the auto-reload consequence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use this tool when you want to monitor the builds directory and have builds auto-reloaded. However, it does not explicitly compare to alternatives like watch_status or stop_watching, or mention 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.
stop_watchingA
Stop monitoring the builds directory for changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the basic action without revealing side effects, idempotency, or what happens if monitoring is not active. For a mutation-like tool, this is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is front-loaded with the action and directly communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema, low complexity), the description is nearly complete. It clearly states what the tool does. Minor gaps exist around return values or state implications, but overall it suffices for the tool's scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty. The description does not need to explain parameters. Baseline for zero parameters is 4, and there is no additional parameter information needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (stop) and the target resource (monitoring the builds directory for changes). It is a specific verb+resource pair that distinguishes it from sibling tools like 'start_watching' and 'watch_status'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you want to stop monitoring), but does not explicitly state when to use it versus alternatives or provide any exclusions. It lacks explicit guidance such as 'Use when you no longer wish to receive build change notifications.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_optimal_nodesC
AI-powered suggestion of optimal passive nodes based on build goals
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Optimization goal: 'damage', 'defense', 'life', 'es', or stat name | |
| build_name | Yes | Build to optimize | |
| points_available | No | Number of passive points to spend (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It mentions 'AI-powered' hinting at probabilistic behavior but does not disclose whether it is read-only, requires an existing build, or what the response format is. This is insufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no redundant information, and gets to the point immediately. The description is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description is too brief. It fails to mention return value, prerequisites, or how it differs from optimize_tree, making it incomplete for an AI agent to decide when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all parameters. The description adds little beyond mentioning 'build goals' which aligns with the goal parameter, but it does not explain the meaning of points_available or build_name beyond the schema, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool suggests optimal passive nodes based on build goals, using a specific verb and resource. However, it does not distinguish from sibling tools like optimize_tree or analyze_build, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives such as optimize_tree or analyze_build. The description only states the purpose without context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_buildA
Comprehensive build validation: resistances, life pool, defensive layers (avoidance/mitigation/recovery), mana sustain, accuracy, flask immunities, damage scaling. Provides prioritized critical/warning/info recommendations. PREFER this over get_build_issues + analyze_defenses — it covers both in one call. Do not call all three.
| Name | Required | Description | Default |
|---|---|---|---|
| build_name | No | Build to validate. If omitted and Lua bridge is active, validates currently loaded build. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses the tool's output behavior ('Provides prioritized critical/warning/info recommendations') and the aspects it validates. However, it does not explicitly state read-only semantics or potential errors, though 'validation' strongly implies a non-mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: it states the purpose in the first sentence, expands on scope, and immediately provides usage guidance. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description adequately covers what the tool does, what it returns (prioritized recommendations), and when to use it. For a single-parameter tool, this is complete and exceeds the minimum viable description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for the single parameter, providing a description in the schema. The tool description adds no extra meaning about build_name beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs 'comprehensive build validation' and enumerates specific covered areas (resistances, life pool, defensive layers, etc.). It distinguishes itself from sibling tools by explicitly positioning it as a replacement for get_build_issues and analyze_defenses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'PREFER this over get_build_issues + analyze_defenses' and 'Do not call all three.' This clearly identifies when to use this tool versus alternatives and what to avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_statusA
Check if file watching is currently enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates this is a status check (read-only in nature), but does not disclose return format, potential side effects, or any expectations about the 'enabled' state. The description is minimal and doesn't add context beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear, front-loaded sentence. Every word earns its place with no redundancy or filler. It's an ideal length for such a simple status check.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is very simple (no parameters, no output schema). The description fully conveys the purpose. However, since there's no output schema, adding a note about the return value (e.g., boolean true/false) would make it more complete, but it's still adequate as is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially fully covered. Per guidelines, a baseline of 4 is appropriate when no parameters exist. The description doesn't need to add parameter details since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('check') and a clear resource ('file watching'), making the tool's purpose unambiguous. It distinguishes itself nicely from sibling tools like start_watching and stop_watching, which are action-oriented, and get_recent_changes, which deals with different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It states what it does but provides no context, prerequisites, or exclusions. The usage is only implied by the tool's name and description, but there's no explicit recommendation or contrast with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Several tools have overlapping responsibilities, most notably analyze_defenses and validate_build where the description explicitly notes the redundancy. The tree-related tools are distinct but numerous, requiring careful reading to select the right one.
The vast majority of tools follow a consistent verb_noun pattern (get_, analyze_, list_, compare_, etc.), making the API predictable. Minor deviations like 'watch_status' (rather than 'get_watch_status') break the pattern slightly.
At 30 tools, the server is on the heavy side, exceeding the typical well-scoped range. While the tools span several sub-domains (builds, tree, currency, snapshots), the set could likely be consolidated.
The server covers a broad range of build management tasks including analysis, optimization, snapshots, file watching, and currency arbitrage. Notable gaps include no delete_build tool and no way to import a build from a file path directly (though export exists).
Maintenance
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
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Cloudflare Workers MCP server: claude-skill-validator
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
MCP server for Grok Imagine AI video generation
Related MCP Servers
- FlicenseAqualityCmaintenanceAn MCP server for Path of Exile 2 build analysis that loads builds from Path of Building export codes and allows natural language interrogation via any MCP-compatible client.82
- AlicenseNot gradedqualityFmaintenanceAn MCP server that allows Claude Code to interact with the OpenAI Codex CLI.2921MIT
- AlicenseAqualityAmaintenanceAn MCP server for Path of Exile 2: a queryable game corpus plus Path-of-Building-faithful calculations, so an LLM can import your build, answer questions, and theorycraft against real numbers (not invented ones).641MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for Path of Building that enables querying and managing PoB builds and trade data through the Lua bridge and official APIs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/zgrummons/pob2-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server