返回市场
eve在线-mcp

eve在线-mcp

作者:kongyo25 星标更新:2025-07-25

项目介绍

EVE Online Market MCP Server

Ask DeepWiki smithery badge

此MCP服务器提供了访问EVE Online市场数据的接口。通过使用ESI(EVE Swagger Interface)API,可以获取实时的市场数据。

<a href="https://glama.ai/mcp/servers/@kongyo2/eve-online-mcp"> <img width="380" height="200" src="https://gips3.baidu.com/it/u=2523299726,1970029962&fm=3081&app=3081&f=PNG?w=760&h=400" alt="eve-online-mcp MCP server" /> </a>

认证与速率限制

此服务器目前仅用于获取公共市场数据,因此不需要ESI认证。但是,以下限制和规范适用:

  1. 速率限制

    • ESI每分钟有错误次数限制
    • 服务器会自动监控速率限制,如果达到限制则返回错误
    • 可以通过头部x-esi-error-limit-remainx-esi-error-limit-reset来检查限制状态
  2. 用户代理

    • 遵循ESI推荐设置适当的用户代理
    • 格式:eve-online-mcp/1.0 (github.com/your-username/eve-online-mcp)
  3. 错误处理

    • API错误会被适当地捕获,并以易于理解的消息形式返回
    • 包含来自ESI的错误详细信息

功能

服务器提供以下三个主要功能:

  1. 获取市场价格 (get-market-prices)

    • 获取EVE Online内所有物品的调整价格和平均价格
    • 返回值包括 type_idadjusted_priceaverage_price
  2. 获取市场订单 (get-market-orders)

    • 获取特定区域的市场订单
    • 可选地按特定物品类型或订单类型(买/卖)进行过滤
    • 每个订单包含价格、数量、位置等信息
  3. 获取市场历史 (get-market-history)

    • 获取特定区域特定物品的市场历史
    • 可获取每日最高价、最低价、平均价、交易量等
  4. 获取分组市场数据 (get-market-groups)

    • 获取特定区域和特定物品类型的分组市场数据
    • 提供买方订单和卖方订单各自的统计信息(如平均价格、最高/最低价格、交易量等)
  5. 获取结构体市场订单 (get-structure-orders)

    • 获取特定结构体(如站台、要塞等)的所有市场订单
    • 支持分页,可高效获取大量数据
  6. 获取地区交易所统计数据 (get-market-stats)

    • 获取特定地区的市场统计数据
    • 提供交易量、价格趋势、市场活跃度等指标
  7. 获取结构体特定物品订单 (get-structure-type-orders)

    • 获取特定结构体中特定物品类型的全部市场订单
    • 可进行更详细的市场分析

设置

通过Smithery安装

要通过Smithery自动安装eve-online-mcp到Claude Desktop:

npx -y @smithery/cli install @kongyo2/eve-online-mcp --client claude
  1. 安装依赖包:

    npm install
    
  2. 构建项目:

    npm run build
    
  3. 启动服务器:

    npm start
    

VS Code集成

此项目包含了VS Code的设置:

  • .vscode/settings.json: MCP服务器的设置
  • .vscode/tasks.json: 构建和运行任务

可用的任务包括:

  • "Build EVE Online Market MCP Server": 构建项目
  • "Run EVE Online Market MCP Server": 启动MCP服务器

使用示例

  1. 获取市场价格:
// 获取所有物品的价格
const prices = await callTool("get-market-prices");
  1. 获取市场订单:
// 获取The Forge(区域ID: 10000002)的Tritanium(类型ID: 34)的订单
const orders = await callTool("get-market-orders", {
  region_id: 10000002,
  type_id: 34,
  order_type: "all"
});
  1. 获取市场历史:
// 获取The Forge的Tritanium的市场历史
const history = await callTool("get-market-history", {
  region_id: 10000002,
  type_id: 34
});
  1. 获取分组市场数据:
// 获取The Forge的Tritanium的分组市场数据
const marketGroups = await callTool("get-market-groups", {
  region_id: 10000002,
  type_id: 34
});
  1. 获取结构体市场订单:
// 获取结构体ID: 1234567890 的所有市场订单
const structureOrders = await callTool("get-structure-orders", {
  structure_id: 1234567890,
  page: 1
});
  1. 获取地区交易所统计数据:
// 获取The Forge的市场统计数据
const marketStats = await callTool("get-market-stats", {
  region_id: 10000002
});
  1. 获取结构体特定物品订单:
// 获取结构体ID: 1234567890 中的Tritanium的所有市场订单
const typeOrders = await callTool("get-structure-type-orders", {
  structure_id: 1234567890,
  type_id: 34,
  page: 1
});

认证设置

EVE Online SSO设置

  1. EVE Online Developers Portal注册应用程序

  2. 请求以下范围:

    • esi-markets.structure_markets.v1
    • esi-markets.read_character_orders.v1
  3. 将获得的客户端ID和密钥设置在.env文件中:

    cp .env.example .env
    # 编辑.env文件并设置认证信息
    

认证流程

  1. 获取认证URL:
const authUrlResponse = await callTool("get-auth-url", {
  state: "unique-state-string"
});
// 将用户重定向到authUrlResponse中的URL
  1. 交换授权码:
const authResponse = await callTool("authenticate", {
  code: "authorization-code-from-callback"
});
// 保存返回的令牌
  1. 更新令牌:
const refreshResponse = await callTool("refresh-token", {
  refresh_token: "saved-refresh-token"
});
// 使用新令牌更新

结构体访问

需要认证才能访问结构体的市场数据时:

  1. 获取具有适当范围的令牌
  2. 在调用makeESIRequest时指定令牌:
const structureOrders = await callTool("get-structure-orders", {
  structure_id: 1234567890,
  page: 1,
  token: "your-access-token"
});

注意事项

  1. 结构体相关端点

    • 访问结构体相关端点需要具有适当权限的ESI令牌
    • 无法获取没有访问权限的结构体的数据
  2. 分页

    • 返回大量数据的端点使用分页
    • 可以通过page参数指定特定页面(从1开始)
  3. 缓存

    • ESI响应会在服务器端被缓存
    • 缓存时间因端点而异
    • 可以通过响应头检查缓存信息