pob-mcp
pob-mcp
pob-mcp es un servidor MCP. Permite a un LLM cargar, inspeccionar, modificar y mejorar builds de Path of Exile 2. Utiliza el motor de cálculo real de Path of Building Community (fork de PoE2). No reimplementa ese motor.
pob-mcp ejecuta una copia real y sin interfaz gráfica de PoB (un programa Lua) como proceso en segundo plano. Se comunica con ese proceso mediante un pequeño protocolo JSON-RPC. Cada estadística que obtienes es un número que el propio PoB ha calculado.
Cómo funciona
MCP client (Claude Desktop, Cursor, ...)
| MCP over stdio
v
pob-mcp (Python) -- tools_*.py, optimizer/
| JSON-RPC over stdio
v
lua/pob_bridge.lua (running under `luajit`)
| dofile()
v
Path of Building - PoE2's own Lua source (Launch.lua, Main.lua, ...)lua/pob_bridge.lua es un fork de src/HeadlessWrapper.lua de PoB, que PoB utiliza para su suite de pruebas. pob-mcp no depende directamente de ese archivo. Las copias instaladas de PoB omiten HeadlessWrapper.lua (consulta manifest.cfg), por lo que pob-mcp incluye su propia versión. Esto significa que pob-mcp funciona de la misma manera tanto con un checkout de git de PathOfBuilding-PoE2 como con una versión de lanzamiento instalada.
Antes de empezar
Necesitas cuatro cosas:
uv. Úsalo para instalar y ejecutar pob-mcp.
LuaJIT, una compilación compatible con 5.1. Ponlo en tu
PATHcomoluajit, o apunta a él conPOB_MCP_LUAJIT. Lo necesitas por separado de PoB: el runtime de PoB solo incluyelua51.dll/SimpleGraphic.dllpara su aplicación gráfica. No incluye un intérprete de línea de comandos que puedas ejecutar por sí solo.Windows: instálalo con Scoop (
scoop install luajit), Chocolatey (choco install luajit), o una compilación portátil.macOS:
brew install luajit.Linux:
apt install luajit, el equivalente para tu distribución, o compílalo desde el código fuente.
Una instalación de Path of Building - PoE2. Puede ser un checkout de git (este repositorio, o tu propio clon) o una versión de lanzamiento instalada. Consulta "Apuntar pob-mcp a una instalación de PoB" más abajo.
zlib. pob-mcp lo necesita para leer y escribir códigos de build, y para calcular datos de Joyas Atemporales. En Windows ya lo tienes: PoB incluye
zlib1.dll(enruntime/para un checkout, o junto a todo lo demás para una versión de lanzamiento instalada). En Linux y macOS, instala el paquetezlib/libzde tu sistema si aún no lo tienes (la mayoría de los sistemas lo tienen). Si pob-mcp no encuentra zlib, todo sigue funcionando excepto los códigos de build pegados o compartidos y los cálculos de Joyas Atemporales. Carga y exporta builds como archivos.xmlen su lugar.
Apuntar pob-mcp a una instalación de PoB
pob-mcp necesita saber dónde tu instalación de Path of Building - PoE2 guarda su código fuente Lua, porque es contra lo que se ejecuta el proceso puente. Hay dos formas de indicarlo. Ten en cuenta que las dos tienen diseños diferentes en disco — pob-mcp detecta automáticamente cuál estás usando.
Modo de checkout de desarrollo. Establece
POB_MCP_SOURCE_DIRen un checkout de git de PathOfBuilding-PoE2 — ya sea su carpeta raíz, o su carpetasrcdirectamente. Este diseño mantiene el código fuente Lua ensrc/, y el runtime nativo (DLLs de LuaJIT, zlib, las librerías Lua incluidas) en una carpetaruntime/separada al lado.Modo de lanzamiento. Establece
POB_MCP_INSTALL_DIRen la carpeta raíz de una versión de lanzamiento instalada. En Windows, suele ser%APPDATA%\Path of Building Community (PoE2). Una versión de lanzamiento instalada pone todo en una sola carpeta —Launch.lua,Modules/,zlib1.dll, las libreríaslua/incluidas — en lugar de dividirlo. (Lo comprobamos con una instalación real. No lo adivinamos solo a partir de la configuración de empaquetado del repositorio).
Si no estableces ninguna variable, pob-mcp comprueba algunas ubicaciones de instalación comunes para tu sistema operativo, y te da un error claro si no encuentra ninguna. En Windows, esto ya encuentra una copia instalada con el instalador normal sin ninguna configuración de tu parte.
Instalar pob-mcp
git clone <this repo, or wherever you put pob-mcp> pob-mcp
cd pob-mcp
uv syncEjecutarlo por sí solo (para pruebas)
POB_MCP_SOURCE_DIR=/path/to/PathOfBuilding-PoE2 uv run pob-mcp
# or, against an installed release:
POB_MCP_INSTALL_DIR="C:\Users\you\AppData\Roaming\Path of Building Community (PoE2)" uv run pob-mcpEsto inicia el servidor MCP sobre stdio. No verás mucho — los servidores MCP se comunican con clientes MCP, no directamente contigo. Consulta "Comprobar que funciona", más abajo, para una forma de probarlo sin un cliente completo.
Usarlo con Claude Desktop, Cursor u otro cliente MCP
Añade una entrada a la configuración del servidor MCP de tu cliente. Para Claude Desktop, es claude_desktop_config.json. Para Cursor, es mcp.json.
{
"mcpServers": {
"pob-mcp": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/pob-mcp", "run", "pob-mcp"],
"env": {
"POB_MCP_SOURCE_DIR": "/absolute/path/to/PathOfBuilding-PoE2"
}
}
}
}Para el modo de lanzamiento, usa POB_MCP_INSTALL_DIR en su lugar. Apúntalo a la carpeta raíz de tu versión de lanzamiento instalada — en Windows, normalmente %APPDATA%\Path of Building Community (PoE2):
{
"mcpServers": {
"pob-mcp": {
"command": "uv",
"args": ["--directory", "C:\\path\\to\\pob-mcp", "run", "pob-mcp"],
"env": {
"POB_MCP_INSTALL_DIR": "C:\\Users\\you\\AppData\\Roaming\\Path of Building Community (PoE2)"
}
}
}
}Reinicia tu cliente después de editar su configuración. No necesitas cerrar Path of Building. pob-mcp solo lee datos del juego de la carpeta de instalación. Nunca escribe en ella, por lo que funciona bien junto a la aplicación.
Variables de entorno
Variable | Qué hace |
| Ruta a un checkout de git de PathOfBuilding-PoE2 (su carpeta raíz o |
| Ruta a la carpeta raíz de una versión de lanzamiento instalada |
| Ruta a un ejecutable |
| Ruta o nombre para cargar zlib, si pob-mcp no puede encontrarlo por sí mismo |
| Ruta a tu carpeta de Builds de PoB, para |
| Nivel de log para la parte de Python (por defecto |
Qué puedes hacer con ello
Una vez que tu cliente esté conectado, empieza con load_build. Luego usa las otras herramientas para inspeccionar, modificar y mejorar la build:
Cargar una build:
load_build(acepta un código de exportación de PoB, un enlace pobb.in/Maxroll/poe.ninja pob-link/poe2db.tw/Pastebin.com/Rentry.co, una ruta de archivo.xmllocal, o texto XML sin procesar),new_build,list_local_builds.Inspeccionar una build:
get_stats,list_stat_keys,get_character,list_classes,get_tree_state,node_info,search_tree,get_items,get_skills,list_gems,get_config,list_config_options,sanity_check.Modificar una build:
alloc_node/dealloc_node,node_path_cost,select_class,equip_item_raw/unequip_item,add_socket_group,set_main_skill,add_gem/remove_gem/set_gem,list_valid_supports,set_config.Una nota sobre las gemas: cada gema tiene un id interno, y ese id no es el mismo que su nombre mostrado. El id de Bola de Fuego, por ejemplo, es
"Metadata/Items/Gems/SkillGemFireball". Usalist_gemspara buscar el id correcto — no lo adivines. Una suposición incorrecta no genera un error. Simplemente falla silenciosamente al resolver, por lo que la gema no hace nada. Lo mismo ocurre con las clases:select_classtoma un id de clase interno, no un índice simple basado en 0. Usalist_classespara encontrarlo.Mejorar una build:
optimize_build(goal="damage"|"defence"|"balanced", scope=[...])ejecuta una búsqueda dirigida por objetivos sobre el árbol pasivo, las gemas de apoyo y los objetos únicos locales. Comprueba cada cambio candidato contra el motor real de PoB. Consulta su propia descripción en tu cliente MCP para obtener todos los detalles, incluyendo lo que deliberadamente deja intacto.Comparar o exportar:
compare_builds,export_build.
Cada herramienta que modifica la build también devuelve sus stats actualizados. No necesitas una llamada separada a get_stats para ver el efecto de un cambio.
Lo que esto no hace (a propósito)
Son elecciones, no errores:
El optimizador nunca cambia las opciones de configuración (buffs, maldiciones, estadísticas de enemigos, modificadores de mapa). Si pudiera, podría aumentar su propia puntuación asumiendo un escenario poco realista. Llama a
set_configtú mismo primero si quieres optimizar para un escenario específico.La búsqueda de objetos y joyas solo usa la base de datos local de PoB. El ámbito
itemsdeoptimize_buildprueba objetos de la propia base de datos de únicos incluida de PoB, para la misma ranura. No comprueba precios de sitios de comercio, ni busca opciones de crafteo de objetos raros.El optimizador no busca joyas por sí mismo. Emparejar una joya con el socket correcto aún no es lo suficientemente fiable. Aún puedes probar una joya específica manualmente: usa
list_uniques_for_slot, luegoequip_item_raw.El optimizador es una búsqueda voraz, no un solucionador perfecto. Solo añade nodos del árbol — nunca elimina ni reemplaza los existentes — y solo intercambia una gema o un objeto a la vez. Puede quedarse atascado en una respuesta buena pero no óptima que una búsqueda más amplia podría superar.
pob-mcp no puede importar un perfil de personaje en vivo de poe.ninja. Puede importar un pob-link de poe.ninja como cualquier otro sitio compatible, pero un perfil de personaje en vivo es diferente: necesita la API oficial de personajes, y esta versión aún no se comunica con esa API. Exporta el personaje a un código o enlace de PoB primero, y usa eso en su lugar.
pob-mcp no vigila tu carpeta de Builds para detectar cambios.
list_local_buildslista lo que hay cuando lo llamas. No envía actualizaciones cuando algo cambia. Para una sesión impulsada por LLM, volver a llamar a la herramienta es más simple y funciona igual de bien.
Comprobar que funciona
Las pruebas automatizadas (ejecutadas con uv run pytest) vienen en dos grupos:
Pruebas que no tocan PoB en absoluto (
test_importers.py,test_optimizer_goals.py,test_optimizer_moves.py,test_locate.py). Estas se ejecutan en cualquier lugar — no necesitas LuaJIT ni una instalación de PoB.test_bridge_protocol.pyejecuta un proceso puente real de principio a fin: inicia una nueva build, busca en el árbol, asigna y desasigna nodos, guarda y recarga, lista opciones de configuración, y ejecuta una comprobación de cordura. Si no encuentraPOB_MCP_SOURCE_DIR,POB_MCP_INSTALL_DIR, o un ejecutableluajit, se omite a sí mismo y te dice por qué. Establece esas variables de entorno para ejecutarlo realmente.
Para probar el puente manualmente, sin un cliente MCP completo:
cd /path/to/PathOfBuilding-PoE2/src
luajit /absolute/path/to/pob-mcp/lua/pob_bridge.luaLuego escribe (o pasa por tubería) solicitudes JSON-RPC, una por línea:
{"id": 1, "method": "new_build", "params": {}}
{"id": 2, "method": "get_stats", "params": {}}Cada una debería imprimir una línea {"id": ..., "result": {...}}.
Dónde están las cosas
pob-mcp/
lua/
json.lua # self-contained JSON codec for the bridge protocol
pob_bridge.lua # the headless PoB bridge + JSON-RPC loop
src/pob_mcp/
server.py # MCP server entrypoint, tool registration
bridge.py # subprocess + JSON-RPC client for pob_bridge.lua
locate.py # finds a PoB install + luajit
sites.py # pobb.in/Maxroll/poe.ninja/etc. URL -> build code
importers.py # unifies code/URL/file/XML into one load_build path
tools_*.py # MCP tool definitions, grouped by area
optimizer/ # goal-directed build search
tests/This server cannot be installed
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
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
GW1 build compiler: skill data, template code encode/decode, validation, hero roster. Read-only.
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/juddisjudd/pob-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server