Connect once through GGG's official OAuth -- read-only -- and your AI sees every character's equipped gear, skill gems with their supports, and passive tree. Live poe.ninja prices come along, in divines, by league. Works with Claude and ChatGPT.
Answers in your language
Savecraft is a GGG-approved connecting application. The connection is read-only and scoped to your characters and profile -- nothing else.
Reference modules work the moment you add the game -- no account connection required.
Analyze, modify, or explore a Path of Exile 2 build via Path of Building 2. First call returns a compact summary (DPS, life, resists, attributes), character info (class, ascendancy, specialisations), and a section_index listing available detail sections. The summary includes per-element damage breakdown (PhysicalHitAverage, FireHitAverage, ColdHitAverage, LightningHitAverage, ChaosHitAverage) showing the actual damage type split after all conversion and 'gain as extra' mechanics — check these BEFORE recommending element-specific gem or support changes. A skill tagged 'Fire' may deal significant chaos damage via gear conversion. The items section includes mod text for rare/magic items — use these to understand gear-based conversion, added-as-extra, and other build-defining mechanics. Unique item mods are not shown (use unique_search to look them up by name). Request sections='config' to see active configuration overrides (combat conditions, enemy settings, Wither stacks, etc.). To determine Low Life status, check config for conditionLowLife — do NOT rely on LifeUnreservedPercent, which reflects static reservations only, not combat-conditional effects. To drill deeper, call again with the buildId and sections parameter (e.g. sections='offense,defense'). Stat sections return curated key stats plus _extra_keys listing other available stats — use stat_keys to request specific extras. For modifications, pass buildId + operations. The response includes a changes object with {before, after, delta} for every summary stat that changed — present the delta to the player, not the full stat dump. For tree exploration, pass buildId + nearby_metrics to find the highest-impact nearby nodes ranked by real calc deltas. For tree pruning, pass buildId + audit_allocated to find weak branches in the CURRENT allocated tree — ranked by what the player would lose by removing them, with a dead_weight bucket of zero-contribution nodes. Pairs naturally with nearby_metrics: audit identifies underperforming branches, nearby finds replacement directions, you propose the swap. To drill into WHY a stat has its value (which item, tree node, skill, or specialisation contributes), pass mod_sources with the stat names. Stat names resolve case-insensitively, and each requested stat returns exactly one kind-discriminated object under data.statSources[statName]: kind=sources contains top-N modifier rows with source_type, source_name, mod_name, mod_type, value, and mod_row_key, plus truncated: {omitted_rows} when the row limit drops contributors; kind=unsupported_derived contains reason and decomposable_inputs; kind=unknown_stat contains reason and canonical when a case-insensitive match exists. Empty rows in kind=sources means genuinely no contributors. Decomposable stats (return kind=sources with real per-mod rows when contributors exist): Life, EnergyShield, Mana, Spirit, Armour, Evasion, Strength, Dexterity, Intelligence, resistances, BlockChance, SpellSuppressionChance, LifeRegen, ManaRegen, CritChance, ailment-chance/effect stats, hit-damage component stats — anything stored as a mod against the player’s actor. Derived stats such as CombinedDPS, TotalDPS, FullDPS, AverageHit, Speed, EHP, and MaximumHitTaken variants return kind=breakdown or kind=attribution; kind=unsupported_derived applies only when the source-unit universe is empty. When a player asks why two builds diverge on a damage stat, request the listed decomposable_inputs (crit components, hit-damage adders, conversion mods, gear-source life-as-extra-mana, etc.), not the aggregate. Aggregate stats serve as quick "is this build behaving fundamentally differently?" tells, not as source-decomposable answers. Use nearby_categories on a /resolve or /modify call to focus the inline power_report on a specific node type (e.g. nearby_categories=["Keystone"] when the player asks "any keystone I should grab?") — pair with audit_categories on a follow-up audit_allocated call to get symmetric remove/add suggestions confined to the same category axis. When narrating /compare gear diffs, filter to slots where modsSame is false — modsSame:true means no mechanical divergence even when nameSame:false (rare reroll, RELIC/UNIQUE foil flag), so those slots add noise without insight. Each compared socket group carries mainGemLinkCount (link count of the main gem's socket), hostItemMaxLink (largest link on the host item), and hostItemName — read these directly to answer "is this skill 6-linked?" instead of re-correlating with sections.gear.items by slot. diffs.tree.allocatedOnlyIn is an array indexed parallel to builds[]; failed builds get [] at their index — index by build position, not buildId. Config keys prefixed multiplier (e.g. multiplierRage, multiplierWitheredStackCount, multiplierFrenzyCharges) are user-set knobs the calc reads as inputs; the resulting runtime stats live in offense/defense and may be cap-clamped against gear-derived maxima. Read the runtime stat in offense/defense for the post-calc effect — the config value is what was requested, not what's being applied. Every response includes a buildId for follow-up calls. PoE2 has no bandit quest and no pantheon system — the operations list has no set_bandit/set_pantheon ops, and there is no bandit/pantheon field in character info. buy_similar trade-search enrichment (available for PoE1 builds) is not supported for PoE2 — pob-server's trade-mod lookup is poe1-only.
Look up current Path of Exile 2 item and currency prices from poe.ninja. USE PROACTIVELY: query this module when discussing item value, trade decisions, upgrade budgets, or farming strategies. Prices are always denominated in poe.ninja's primary currency (divine orbs) and every result is labeled with that denomination and the league it was pulled from.
Search or resolve Path of Exile 2 passive tree nodes. USE PROACTIVELY: query this module to verify keystone effects, find notable locations, or check ascendancy nodes before advising on tree pathing — and to resolve a character's allocated passive node hashes (the `hashes` array in a connected character's passives section) to readable names, types, and stats. Supports filtering search by type (keystone, notable, small) and ascendancy.
Verified per-game facts with sources, served from the curated fact store; supersedes model training data. Query by text, topic, or fact_id; an empty query lists topics.
Links don't exist in PoE2. That's PoE1 muscle memory answering about a game it can't see.
Your actual slots, your actual sockets, PoE2 mechanics only.
Fresh-by-refresh character data, league-labeled prices, and no guessing.
Path of Exile 2 is a server-side game -- there's nothing to install and no saves to watch. The connection does all the work.
One click through GGG's official OAuth. Read-only, scoped to characters and profile. Savecraft is a GGG-approved connecting application.
Every non-deleted character comes in: equipped gear, skill gems with their supports, and the full passive tree with ascendancy choices.
Ask about any character by name. After a session, refresh in Savecraft to pull the latest state -- your AI always tells you how fresh its view is.
Official APIs, defensive engineering, and a roadmap we're honest about.
GGG-approved, read-only, works with Claude and ChatGPT.