Path of Building MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| POB_CMD | No | Compatible LuaJIT executable; resolved through PATH unless an absolute path is supplied. Not detected from the app. | luajit |
| POB_ARGS | No | Space-separated arguments passed to the Lua process. Overrides the default adapter arguments. | |
| POB_PATH | No | Path to the src/ directory of a stock PathOfBuilding checkout. Defaults to the installed PoB app, else ~/Projects/PathOfBuilding/src. POB_FORK_PATH is a legacy alias. | |
| POB_DEBUG | No | Set to "true" for verbose Lua bridge logging. | false |
| POB_DIRECTORY | No | Path to your PoB builds directory. Defaults to the detected Builds directory. | |
| POB_FORK_PATH | No | Legacy alias for POB_PATH, pointing to the src/ directory of a PathOfBuilding checkout. | |
| POE_CACHE_TTL | No | Trade API response cache TTL in seconds. | 300 |
| POB_TIMEOUT_MS | No | Lua request timeout in milliseconds. | 30000 |
| POE_SESSION_ID | No | Your POESESSID cookie value; required for the find_weighted_trade_items tool. | |
| POB_LUA_ENABLED | No | Set to "true" to enable the Lua bridge. | false |
| POE_TRADE_ENABLED | No | Enable Trade API tools. | false |
| POE_RATE_LIMIT_PER_SECOND | No | Trade API requests per second. | 4 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
You are helping a Path of Exile 1 player through Path of Building (PoB) tools.
START
Call profile_get first (once per conversation) and follow its "How to answer" rules: play mode, league, currency, goals, explanation mode. The profile is shared by every AI client and editable in PoB Agent Edition > Options > Agent profile.
Then call live_status. In live mode every lua_* tool reads and edits the PoB Agent Edition window the user is looking at, and they see changes immediately. In headless mode, load a build first (list_builds, lua_load_build).
Use PoB's numbers (lua_get_stats, get_build_issues, analyze_defenses); don't guess game maths. Mention config assumptions (boss, charges, flasks) when they matter.
DIAGNOSE IN THIS ORDER
Elemental resistances capped (75%+), then chaos resistance.
Survivability: max hit taken per damage type (weakest type), EHP, life/ES pool, suppression/evade/block, ailment immunities (freeze, stun).
Recovery and mana: leech/regen, mana reservation not over-reserved, attribute requirements met.
Damage: main skill DPS, support gems, crit/speed, damage-by-type for scaling choices. Explain each finding with the number and what it means for the player.
PLAYER PROFILE
Play mode: trade = buying upgrades is fine (instant buyout only). ssf = Solo Self-Found, no trading: never suggest buying or run trade searches for purchases; suggest crafting, farming and drop targets instead. mixed = give both, labelled [Trade] and [SSF].
Hardcore: a death moves the character to softcore for good, so defences come before damage, risky choices are flagged with a safe option, and trade uses the Hardcore league.
Explanation mode: teach = explain a PoE1 mechanic the first time it matters (1-3 sentences, compared with PoE2), then profile_mark_learned so it isn't repeated; concise = actions and numbers, one line of why; deep = full mechanics and maths (increased vs more, DPS formula, EHP layers) with PoB's numbers.
Use the profile league and currency as defaults for trade tools and budgets. Change the profile (profile_set) only when the player asks or states a fact ("I have 300c", "I'm SSF now").
CHEAP UPGRADES (trade or mixed mode)
Use plan_upgrades (league + budget in chaos + focus). It searches instant-buyout listings, simulates each item in the build and ranks by gain per chaos. In live mode results also appear in the Overview > Advisor card.
League defaults to the profile league; ask if it is unset (get_leagues). Default budget 50c per item, capped by the currency on hand; respect the user's budget.
Present: slot, item, price, DPS %, EHP %, life, resist fixes, warnings, and the trade link.
ATLAS TREE
atlas_get (points, mechanics, combined bonuses, share link), atlas_search (node ids + cost), atlas_edit (add/remove/replace/import link). 150 points; explain what each league mechanic does for a PoE1 newcomer. Save the build to keep it.
TRADE RULES (account safety)
Instant buyout only. Never whisper, never automate buying, never touch the game client. The user buys by opening the link.
Trade requests are rate limited and capped per question; if a tool says the site asked for a pause, tell the user and wait for them to ask again. Don't loop searches.
Never ask for or repeat the POESESSID; it is set in PoB Agent Edition > Options.
CHANGING BUILDS
Never overwrite the user's build file. Make changes in the window, then live_save_build with a new name such as " - AI ". Save over the original only when asked.
Before live_open_build or lua_load_build in live mode, check live_status for unsaved changes and warn the user.
After a change, show before/after numbers and switch the window to the relevant tab (live_set_view, e.g. OVERVIEW).
STYLE
Default player (unless the profile says otherwise): knows Path of Exile 2, new to Path of Exile 1. Explain PoE1 terms and systems (atlas, maps, gem links, flasks, pantheon, cluster jewels, crafting bench...) at the depth the explanation mode asks for, relate them to PoE2 and point out where PoE1 differs.
Plain language, numbers first, short lists. Say what is unknown or not verified.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| profile_getA | Read the player profile FIRST in every conversation: play mode (trade / SSF / mixed), hardcore or softcore, league, currency on hand, goals, PoE experience, explanation mode (Teach / Concise / Deep dive) and topics already explained. Returns rules for how to answer. Shared by every AI client and PoB Agent Edition (Options > Agent profile). |
| profile_setA | Change the player profile when the player asks or states a fact ("I'm playing SSF now", "I have 300 chaos", "explain less"). Only the given fields change. The league is checked against pathofexile.com. PoB's Overview header updates within seconds. |
| profile_mark_learnedA | Teach mode memory: after explaining a PoE1 mechanic to the player, record the topic (short name, e.g. 'pantheon', 'more vs increased', 'cluster jewels') so it isn't explained again in later conversations. |
| analyze_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 |
| compare_buildsA | Compare two Path of Building builds side by side |
| list_buildsA | List all available Path of Building builds |
| get_build_statsC | Extract specific stats from a build (Life, DPS, resistances, etc.) |
| start_watchingA | Start monitoring the builds directory for changes. Builds will be auto-reloaded when saved in PoB. |
| stop_watchingA | Stop monitoring the builds directory for changes. |
| get_recent_changesB | Get a list of recently changed build files. |
| watch_statusA | Check if file watching is currently enabled. |
| refresh_tree_dataA | Force refresh the passive skill tree data cache. Use this if tree data seems outdated. |
| compare_treesA | Compare passive skill trees between two builds, showing differences in allocated nodes |
| get_nearby_nodesA | Find notable and keystone passives near your current tree allocation. Uses loaded Lua bridge build when no build_name is provided. |
| 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. |
| get_build_notesA | Read the notes/documentation from a PoB build file |
| set_build_notesA | Write notes/documentation into a PoB build file (overwrites existing notes) |
| classify_item_affixesA | Resolve an item's explicit mod lines back to the affixes that produced them, using Path of Building's ModExplicit (legacy ModItem) and ModMaster tables. Reports matched prefix and suffix counts, remaining slots when the classification is complete and unambiguous, affix ranges and minimum item levels, and which lines belong to one hybrid affix. USE THIS BEFORE recommending any craft or reroll: one affix can print several lines, and counting those lines separately inverts the answer (a hybrid energy shield prefix also prints stun recovery, which reads like a suffix). LIMITS: explicit mods only. Unmatched lines may be unrecognized explicit affixes that still occupy slots. Remaining slots are reported as unknown when any lines are unmatched or ambiguous. An item whose lines admit more than one reading is flagged as ambiguous rather than guessed. Slot counts assume a rare, which holds three prefixes and three suffixes; a magic item holds one of each. |
| list_craftable_modsA | List the crafting bench mods an item class can take at a given item level, from Path of Building's ModMaster table. Use it to answer 'what can I put in the open suffix', and to say what a higher item level would unlock. A craft occupies a slot of its own type, so check the type of the affix being replaced, not only the one being added. LIMITS: bench crafts only, no essences, fossils or veiled mods, and no metacrafting. It does not know what the item already has, so pair it with classify_item_affixes. |
| find_affix_tiersA | Look up every tier of a rollable affix in Path of Building's ModExplicit table (ModItem on older installs): prefix or suffix, minimum item level, the value range per entry, and the base tags it can roll on. Displays affix names and item levels without inventing T1/T2 labels from filtered result order. Use it to price an affix before pricing an item, since a top-tier rare suffix often replaces a costly unique built around the same stat. LIMITS: slot filtering uses PoB's base tags, not slot names. Body armour bases carry str_armour / dex_armour / int_armour and their hybrids; influenced variants add a suffix like _elder or _shaper; a plain 'armour' tag exists too and does not cover the attribute-specific ones. Pass several tags when unsure. Mods whose spawn weights are all zero are excluded unless include_unobtainable is set. |
| 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. |
| suggest_optimal_nodesC | AI-powered suggestion of optimal passive nodes based on build goals |
| optimize_treeC | Full passive tree optimization - removes inefficient nodes and reallocates to better options |
| analyze_itemsB | Analyze equipped items and suggest upgrades or improvements |
| 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. |
| create_budget_buildC | Create a league-start/budget-friendly version of a build |
| 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. |
| 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. |
| 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. |
| snapshot_buildA | Create a versioned snapshot of a build for easy rollback. Snapshots are stored separately with metadata tracking stats and changes. |
| list_snapshotsA | List all snapshots for a build with metadata and stats |
| restore_snapshotA | Restore a build from a snapshot. Optionally creates a backup of current state before restoring. |
| export_build_summaryA | Generate a clean markdown summary of the loaded build suitable for sharing on Reddit, Discord, or as build documentation |
| analyze_skill_linksB | Analyze skill gem setup and evaluate support gem choices. Detects build archetype, rates each support gem, and identifies issues with current setup. |
| suggest_support_gemsB | Get intelligent support gem recommendations based on build archetype. Provides ranked suggestions with DPS estimates, cost, and reasoning. |
| compare_gem_setupsA | Compare multiple gem configurations side-by-side to evaluate different options. NOTE: Full DPS comparison requires Lua bridge integration (future enhancement). |
| validate_gem_qualityC | Check all gems for quality and level improvements. Identifies missing quality, Exceptional upgrade opportunities, and corruption targets. |
| find_optimal_linksC | Auto-generate the best support gem combination for a skill based on budget and optimization goal. Provides step-by-step upgrade path. |
| gem_upgrade_pathA | Generate a prioritized gem upgrade shopping list showing which gems to level, quality, and upgrade to Exceptional versions, ordered by impact and budget |
| 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. |
| 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. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 42 tools
Several clusters overlap heavily: analyze_build/get_build_stats/validate_build/analyze_defenses, and analyze_skill_links/optimize_skill_links/suggest_support_gems/find_optimal_links/compare_gem_setups/gem_upgrade_path. Descriptions do provide explicit guidance (e.g. 'PREFER validate_build over get_build_issues + analyze_defenses'), which helps, but an agent can still easily misselect within the gem and build-analysis groups.
Most tools follow a clear snake_case verb_noun pattern (analyze_build, compare_builds, list_snapshots, restore_snapshot). Minor deviations exist: profile_get/profile_set/profile_mark_learned use noun_verb, and watch_status/gem_upgrade_path are noun phrases, but the overall convention is readable and predictable.
42 tools is heavy for this server, and many are near-duplicates within the gem, tree, and build-analysis areas. While the PoB domain is broad, the surface feels over-expanded rather than each tool earning a distinct place.
Coverage is strong across build reading/analysis, passive tree, items/crafting, gems, trading, profile, snapshots, and file watching. Minor gaps remain: no delete/cleanup for builds or snapshots, no from-scratch build creation, and no direct trade-search or item-pricing tool beyond affix lookup.