流放之路游戏数据服务

提供流放之路游戏数据、定价、交易、仓库管理、角色检查、物品过滤和市场分析的API端点,用于AI助手进行游戏构建规划、经济跟踪和自动化。

  • by jbharvey1
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 jbharvey1/poe-mcp-server

使用说明

poe mcp服务器

一组MCP(模型上下文协议)服务器,将流放之路游戏数据、定价、交易、藏匿管理、角色检查、物品过滤和市场分析作为工具可调用端点公开。设计用于AI助手(Claude等)进行PoE构建规划、经济跟踪和游戏内自动化。


建筑

该仓库包含7个Python模块。六台是独立的MCP服务器,每台都有自己的 Server 例子 TOOLS 列表,以及 call_tool 处理程序。第七, poe_all.py,作为 统一网关 动态导入所有六个兄弟服务器(加上外部 pob-vault 和 pob-brain 服务器),收集其工具定义,并将所有内容重新注册到单个组合MCP上 Server。这意味着您可以在各自的端口上运行单个服务器,也可以运行 poe_all.py 一次将每个工具连接到一个MCP连接下。

poe_all.py如何捆绑子服务器

  1. 添加兄弟目录(c:/src/pobrain, c:/src/buildstuff)to sys.path.
  2. 迭代注册表 (module_name, prefix) 元组和用法 importlib.import_module() 加载每个。
  3. 从每个加载的模块中读取 TOOLS 列出并提取 call_tool 来自子服务器的请求处理程序 app.request_handlers.
  4. 存储以下映射 tool_name -> (handler, original_name, prefix) 在 _tool_registry.
  5. 组合 @combined.call_tool() 处理程序通过构造一个合成函数来分派传入呼叫 CallToolRequest 并将其转发给适当的子服务器处理程序。
  6. pob-brain (从 c:/src/pobrain/server.py)是单独加载的,因为它管理无头构建路径的LuaProcess。

子服务器注册表:

模块 前缀 独立端口
poe_market 坡市场 8481
poe_stash 坡藏匿处 8482
poe_trade 坡贸易 8483
poe_char 朴 8485
poe_pricer 波·普里克尔 8486
poe_filter poe滤波器 8487
pob_vault_mcp pob保险库 (外部)
server (pob脑) pob脑 (外部)
poe_all poe全部 8490

模块

poe_all.py

它的作用: 统一的MCP服务器,将所有PoE和PoB工具捆绑到一个端点中。它没有自己的工具——它从子服务器重新导出所有内容。

入口点:

python poe_all.py          # stdio mode (for .mcp.json)
python poe_all.py sse      # HTTPS SSE on port 8490

poe_char.py

它的作用: 来自PoE API的实时角色数据——装备装备装备、被动树、PoB XML导出和动能引信断点分析。

工具

工具 说明
get_character 为角色获取装备物品和被动树。
get_character_pob 获取字符数据并返回完整的XML构建路径。
scan_stash_tabs 为所有名称以开头的藏匿标签定价 _.Rares通过算法评分,uniques通过poe.ninja DB评分。
kf_check 通过无头PoB进行动力学Fusionlade断点分析。

get_character

参数 类型 默认值 描述
character_name string 配置默认值 要获取的字符名称
include_mods boolean true 在每个项目上包含隐式/显式/精心制作的模组

退货: JSON格式 character (姓名、等级、级别、联赛), gear (按插槽键入名称、基础、ilvl、稀有性、mods),以及 passives (node_count、mastery_count、节点哈希、掌握效果)。

get_character_pob

参数 类型 默认值 描述
character_name string 配置默认值 要获取的字符名称

退货: 完整的PoB XML字符串。与一起使用 load_build(xml=...) 关于脑卒中。

scan_stash_tabs

参数 类型 默认值 描述
min_price integer 5 要包含的最小混沌值
force boolean true 绕过存储缓存并从API获取新鲜

退货: JSON格式 scanned_tabs, total_rares, total_uniques, rare_hits (包括名称、位置、价格、分数、明细), unique_hits (注明名称、基数、价格),以及 errors.

kf_检查

参数 类型 默认值 描述
(无) 使用配置的字符

退货: JSON格式 status (安全/紧密/堵塞), attack_rate_aps, max_effective_aps, headroom_aps, headroom_pct, skill_duration_s, reduced_duration_pct, projectile_count, full_dps, has_less_duration, has_window_of_opportunity,以及 recommendations 阵列。

值得注意的: 在无头PoB中运行Lua脚本,从中提取KF特定的统计数据 build.calcsTab.mainOutput.检查gem链接是否支持较短持续时间,检查被动树是否支持机会窗口。


poe_filter.py

它的作用: 读取和编辑PoE .filter 以编程方式创建文件。支持完整的PoE项目过滤器语法(显示/隐藏/继续块)。专为NeverSink风格的过滤器设计,带有评论元数据和 [[xxxx]] 节标题。

默认筛选器路径: C:/Users/jbharvey/OneDrive/Documents/My Games/Path of Exile/Starting.filter

工具

工具 说明
get_filter_info 筛选器摘要:路径、行数、按类型划分的块数、节标题。
find_blocks 按文本搜索块(不区分大小写的全文匹配)。
get_block 通过块的起始行号获取块的全文。
add_block 在某个位置插入一个新块(顶部/底部/after_line:N/after_pattern:TEXT)。
remove_block 按起始行号删除块。
replace_block 用新文本完全替换块。
set_basetype_rule 便利性:为特定的BaseType添加最高优先级的显示/隐藏规则。

get_filter_info

参数 类型 默认值 描述
filter_path string DEFAULT_FILTER .FILTER文件的路径

退货: JSON格式 path, total_lines, blocks (按显示/隐藏/继续/总计计数), sections (前40 [[xxxx]] 带行号的节标题)。

find_blocks

参数 类型 默认值 描述
query 字符串 必需的 要搜索的文本
filter_path string DEFAULT_FILTER .FILTER文件的路径
limit 整数 20 最大结果

退货: JSON格式 total_matches 和 blocks 数组(行、endline、类型、注释、条件、预览)。

get_block

参数 类型 默认值 描述
line 整数 必需的 起始行号(从1开始)
filter_path string DEFAULT_FILTER .FILTER文件的路径

退货: JSON格式 line, end_line, text.

add_block

参数 类型 默认值 描述
block_text 字符串 必需的 要插入的完整块文本
position string “top” 插入位置: top, bottom, after_line:N, after_pattern:TEXT
filter_path string DEFAULT_FILTER .FILTER文件的路径

退货: JSON格式 ok, inserted_after_line, new_block.

值得注意的: 插入前验证块——拒绝空块、无条件块(将匹配所有项)和带文字的块 \n/\t 转义序列而不是真正的空格。

remove_block

参数 类型 默认值 描述
line 整数 必需的 起始行号(从1开始)
filter_path string DEFAULT_FILTER .FILTER文件的路径

退货: JSON格式 ok, removed_lines, removed_text.

replace_block

参数 类型 默认值 描述
line 整数 必需的 起始行号(从1开始)
new_block_text 字符串 必需的 替换块文本
filter_path string DEFAULT_FILTER .FILTER文件的路径

退货: JSON格式 ok, replaced_lines, old, new.

set_basetype_rule

参数 类型 默认值 描述
action 字符串 必需的 “显示”或“隐藏”
basetypes 数组[字符串] 必需的 BaseType字符串列表
exact_match boolean true 使用 == 精确匹配运算符
comment string 自动生成 块头注释
extra_conditions string “” 其他条件行
filter_path string DEFAULT_FILTER .FILTER文件的路径

退货: 同 add_block 或 replace_block (替换现有的博世对相同基本类型的覆盖)。

值得注意的: 插入到 [[0100]] 覆盖最高优先级的部分。如果同一基型已经存在标记为“Bosch”的覆盖,它将替换它而不是复制。


poe_market.py

它的作用: 暴露当地人 price_history.db SQLite数据库(由外部数据库填充 trend_watcher.py 通过MCP抓取poe.ninja的过程。提供价格查询、历史记录、趋势分析(上涨/下跌/上涨)和数据库状态。

工具

工具 说明
get_price 获取特定商品的最新价格(精确匹配,不区分大小写)。
get_price_history 获取一个项目随时间变化的所有价格快照。
search_items 按名称子字符串搜索项目
get_risers 价格涨幅最大的商品(变化百分比)。
get_fallers 价格跌幅最大的商品(变化百分比)。
get_movers 绝对价格变动最大的商品(波动性商品)。
snapshot_status 数据库信息:快照总数、最新/最旧获取时间、跟踪的项目。

获取价格

参数 类型 默认值 描述
name 字符串 必需的 项目名称(完全匹配,不区分大小写)

退货: JSON格式 name, chaos_value, category,以及其他字段 price_db.search_items().

get_price_history

参数 类型 默认值 描述
name 字符串 必需的 项目名称(精确匹配,回退到模糊)

退货: 随时间变化的价格快照记录数组。

搜索项目

参数 类型 默认值 描述
query 字符串 必需的 搜索词(子字符串匹配)
limit 整数 20 最大结果

退货: 一系列最新价格的商品。

get_risers

参数 类型 默认值 描述
min_snapshots integer 3 可靠趋势所需的最低价格快照
limit 整数 25 最大结果
min_price number 0 当前最小混乱价格(过滤掉垃圾)

退货: 按价格增长百分比排序的项目数组。

get_callers

参数 类型 默认值 描述
min_snapshots integer 3 所需的最小快照数
limit 整数 25 最大结果

退货: 按降价百分比排序的项目数组。

get_movers

参数 类型 默认值 描述
min_snapshots integer 3 所需的最小快照数
limit 整数 25 最大结果

退货: 按绝对价格变动排序的项目数组。

快照_状态

参数 类型 默认值 描述
(无)

退货: JSON格式 total_snapshots, latest_fetch, oldest_fetch, items_tracked.


poe_price.py

它的作用: 零网络调用的本地商品定价引擎。魔法/稀有物品使用 rare_scorer 算法。从当地poe.ninja快照数据库中查找独特、宝石、货币和占卜卡。每次通话时从源代码重新加载记分器模块,以便编辑立即生效。

工具

工具 说明
price_item 从PoE API字典或剪贴板文本中为单个项目定价。
price_items 批量处理PoE API项字典数组。
ninja_lookup 按名称(精确或模糊)查找poe.ninja价格。

价格_项目

参数 类型 默认值 描述
item_dict object -- PoE API项dict(frameType、typeLine、explicitMods等)
item_text string -- PoE的原始剪贴板文本(Ctrl+C格式)

提供以下之一 item_dict 或 item_text.

返回值(算法方法): JSON格式 name, ilvl, rarity, method (“某物”), category, price_estimate, total_score, good_mods, junk_mods, breakdown.如果断裂:也 fractured 和 should_trade_check.

返回(ninja_db方法): JSON格式 name, ilvl, rarity, method (“ninja_db”), category, price_estimate.

退货(未找到): JSON格式 method (“未找到”), price_estimate (null), note.

价格项目

参数 类型 默认值 描述
items 数组[对象] 必需的 PoE API项字典数组
min_price number 0 仅包括此价格或以上的商品
include_unpriced boolean false 包括无法定价的项目

退货: JSON格式 total_items, priced_count, total_value_chaos, items (按价格降序排列),可选 should_trade_check (值得在交易中核实的破碎物品的名称)。

ninja_lookup

参数 类型 默认值 描述
name 字符串 必需的 项目名称(支持部分匹配)

回报(精确): JSON格式 name, price_chaos, category, match (“准确”)。

返回值(模糊): JSON格式 query, match (“模糊”), results 数组 {name, price_chaos, category}.


poe_ash.py

它的作用: 通过缓存、项目搜索、罕见评分和标签定价来阻止标签访问。通过使用5分钟缓存 StashCache 以避免过多的API调用。

工具

工具 说明
get_tab 按名称或索引从收藏选项卡中获取所有项目。
list_tabs 列出所有存储选项卡名称和索引。
score_rare 从PoE剪贴板文本中得分一个罕见项目。
price_tab 在收藏标签中为所有稀有物品打分并定价
find_items 按名称、基本类型或mod文本搜索隐藏选项卡中的项目。
cache_status 显示隐藏标签的缓存新鲜度。

get_tab

参数 类型 默认值 描述
tab_name string -- 选项卡名称(不区分大小写)
tab_index integer -- 制表符索引(从0开始)
force boolean false 强制刷新,绕过缓存

提供以下之一 tab_name 或 tab_index.

退货: JSON格式 count 和 items 阵列。每个项目包括 name, baseType, rarity, ilvl, category, mods, implicitMods, craftedMods, enchantMods, sockets, requirements,以及网格位置(x, y, w, h)如果存在。

list_tabs

参数 类型 默认值 描述
force boolean false 强制刷新选项卡列表

退货: 一大批 {index, name, type} 对于每个选项卡。

记分牌

参数 类型 默认值 描述
item_text 字符串 必需的 PoE中的原始项目文本(Ctrl+C)

退货: JSON格式 name, category, ilvl, price_estimate, total_score, affix_count, good_mods, junk_mods, breakdown.

价格选项卡

参数 类型 默认值 描述
tab_name string -- 选项卡名称(不区分大小写)
tab_index integer -- 制表符索引(从0开始)
min_price integer 1 要包含的最小混沌值
force boolean false 强制刷新存储数据

退货: JSON格式 total_rares, priced_items, total_value, items (按分数降序排列,每个都有名称、类别、价格、分数、good_mods、junk_mods、细分)。

值得注意的: 直接从磁盘缓存中读取,而不是访问API。需要事先 get_tab 或 list_tabs 调用以填充缓存。

查找项目

参数 类型 默认值 描述
query 字符串 必需的 搜索词(匹配名称、基本类型或mod文本)
tab_name string -- 仅搜索此选项卡(如果省略,则搜索前10个选项卡)
force boolean false 强制刷新

退货: JSON格式 matches 数并且 items 阵列。稀有物品包括 price_estimate 和 score.

cache_status

参数 类型 默认值 描述
(无)

退货: JSON格式 league 和 tabs 数组(索引、名称、缓存、年龄秒、新鲜)。显示前15个选项卡。


poe_trade.py

它的作用: 从官方处搜索并获取 pathofexile.com/api/trade支持任何项目类型的通用贸易API包装。始终强制执行定价/即时买断列表(sale_type: priced).包括HTTP 429速率限制上的自动重试和回退。

工具

工具 说明
search_trade 使用统计/类别/价格过滤器搜索PoE交易网站。
get_stat_ids 按关键字搜索交易统计过滤器ID。
search_by_item_mods 通过人类可读的mod文本搜索交易(不需要统计ID)。
fetch_listing 从之前的搜索中获取特定列表ID的详细信息。

search_trade

参数 类型 默认值 描述
league string “幻影” 联赛名称
category string -- 物品类别(例如,“武器.魔杖”、“盔甲.身体”、“配件.戒指”)
rarity string “任意” “非唯一”、“唯一”或“任意”
name string -- 项目名称(用于uniques)
base_type string -- 基本类型过滤器(例如“蛋白石棒”)
stats 数组 -- 统计过滤器,每个 {id, min, max}
min_price 数字 -- 混乱中的最低价格
max_price number -- 混乱中的最高价格
max_level integer -- 最大级别要求
instant_buyout boolean true(当设置max_price时) 仅显示已定价的列表
online_only boolean true 仅显示在线卖家
account string -- 按卖家帐户名筛选
min_links number -- 最小链接套接字
limit integer 10 最大结果(上限为20)

退货: JSON格式 total, showing, trade_url (可点击链接到交易网站上的结果), query_id,以及 results 阵列。每个结果包括 id, name, base_type, ilvl, price_amount, price_currency, account, implicit_mods, explicit_mods, crafted_mods, corrupted, level_req, sockets.

get_stat_ids

参数 类型 默认值 描述
query 字符串 必需的 要搜索的关键字(例如,“攻击速度”、“耐火性”)
limit integer 10 最大结果

退货: 一大批 {id, text, type} 用于匹配统计过滤器ID。

search_by_item_mods

参数 类型 默认值 描述
mods array -- 列表 {text, is_local?, min_pct?} 物体。 min_pct 默认值为0.7(轧制值的70%)。
item_category string -- 交易类别(例如,“武器.魔杖”)
unique_name string -- 对于唯一性:按名称而不是mods搜索
league string “幻影” 联赛名称
limit integer 10 最大结果

退货: 格式与 search_trade.

值得注意的: 使用从交易统计API构建的模式匹配索引,自动将人可读的mod文本转换为统计ID。将数字标准化为 # 用于模糊匹配的占位符。单独处理本地武器模组(例如,“增加物理伤害(本地)”)。

fetch_listing

参数 类型 默认值 描述
query_id 字符串 必需的 来自先前搜索结果的查询ID
listing_ids 字符串 必需的 逗号分隔的列表ID(最多10个)

退货: 已解析的列表对象数组。


依赖项

共享公用设施

模块 位置 目的
mcp_server_utils.py c:/poe/mcp/ 共享 run_server() 基于CLI参数处理stdio与SSE模式选择的函数

poe_monitor库

全部位于 c:/src/buildstuff/poe_monitor/:

模块 目的
poe_lib.py PoeApi 类(PoE API客户端), load_config() (读 config.json 和 poesessid, account, character), build_pob_xml() (将API数据转换为PoB XML), PobAnalyzer (无头PoB接口)
stash_cache.py StashCache 类使用5分钟的磁盘缓存来存储标签数据。提供 get_tab(), get_tab_by_name(), get_tab_list(), get_tabs(), cache_age()
rare_scorer.py score_item() (对PoE API项dict进行评分), score_item_text() (剪贴板文本的分数), classify_item() (对项目进行分类)。返回结果对象 name, category, ilvl, price_estimate, total_score, good_mod_count, junk_count, breakdown, is_fractured, should_trade_check

价格数据库

模块 位置 目的
price_db.py c:/poe/ SQLite接口 price_history.db.功能: search_items(), get_history(), get_risers(), get_fallers(), get_movers(), snapshot_count(), get_snapshot_times(), get_all_latest()

数据库(c:/poe/price_history.db)由外部填充 trend_watcher.py 定期抓取poe.ninja的过程。

构建大脑的路径

模块 位置 目的
server.py c:/src/pobrain/ pob-brain MCP服务器——使用Lua eval构建无头路径、构建加载、状态提取、宝石交换、树分析

设置

先决条件

  • Python 3.11+
  • mcp Python包(模型上下文协议SDK)
  • PoE会话ID已在中配置 c:/src/buildstuff/poe_monitor/config.json:
{
    "poesessid": "your-poe-session-id",
    "account": "your-account-name",
    "character": "your-character-name",
    "bandit": "None",
    "res_penalty": "Act 10 (-60%)"
}

运行单个服务器

每个模块都可以独立运行:

python poe_market.py       # stdio mode
python poe_market.py sse   # SSE mode on its assigned port

运行组合服务器

python poe_all.py           # stdio mode — all tools under one connection
python poe_all.py sse       # SSE mode on port 8490

MCP注册

添加到您的 .mcp.json (或Claude Desktop配置)作为使用组合服务器的单个条目:

{
    "mcpServers": {
        "poe-all": {
            "command": "python",
            "args": ["C:/tmp/poe-mcp-server/poe_all.py"],
            "env": {}
        }
    }
}

或者单独注册单个服务器:

{
    "mcpServers": {
        "poe-market": {
            "command": "python",
            "args": ["C:/tmp/poe-mcp-server/poe_market.py"]
        },
        "poe-stash": {
            "command": "python",
            "args": ["C:/tmp/poe-mcp-server/poe_stash.py"]
        },
        "poe-trade": {
            "command": "python",
            "args": ["C:/tmp/poe-mcp-server/poe_trade.py"]
        },
        "poe-char": {
            "command": "python",
            "args": ["C:/tmp/poe-mcp-server/poe_char.py"]
        },
        "poe-pricer": {
            "command": "python",
            "args": ["C:/tmp/poe-mcp-server/poe_pricer.py"]
        },
        "poe-filter": {
            "command": "python",
            "args": ["C:/tmp/poe-mcp-server/poe_filter.py"]
        }
    }
}