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如何捆绑子服务器
- 添加兄弟目录(
c:/src/pobrain,c:/src/buildstuff)tosys.path. - 迭代注册表
(module_name, prefix)元组和用法importlib.import_module()加载每个。 - 从每个加载的模块中读取
TOOLS列出并提取call_tool来自子服务器的请求处理程序app.request_handlers. - 存储以下映射
tool_name -> (handler, original_name, prefix)在_tool_registry. - 组合
@combined.call_tool()处理程序通过构造一个合成函数来分派传入呼叫CallToolRequest并将其转发给适当的子服务器处理程序。 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+
mcpPython包(模型上下文协议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"]
}
}
}