Skip to main content
Glama

Maicraft

基于 mineflayer 构建的 Minecraft MCP Server。

主要用于和Amaidesu项目配合(maicraft插件现已独立成新的仓库MaiM-with-u/Maicraft),让MaiBot游玩Minecraft游戏。

当然,也可以像普通MCP Server一样使用本项目。

部分高级动作的实现参考自 mineland

安装

请提前配置好minecraft服务器,无论是minecraft客户端直接开局域网游戏,或是minecraft服务器,都支持,版本会自动检测。

推荐的游戏版本:1.20.4

1.21.4也支持,但mineflayer在此版本有些问题,更高的版本可能会有问题,1.21.8目前测出来是不支持的。

方法一:使用npx执行npm包来配置

{
  "mcpServers": {
    "maicraft": {
      "transport": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "maicraft@latest",
        "--host","127.0.0.1",
        "--port","25565",
        "--username","Mai",
         "--auth", "offline"
      ]
    }
  }
}

这里的@latest表示使用最新版本,你也可以替换为其他版本。

方法二:提前全局下载

你可以提前全局安装maicraft,然后再按照方法一进行配置,这样启动时会使用你全局下载的maicraft而不是npx下载的,这样可以避免调用它的时候过慢(因为需要临时下载),缺点是你需要手动升级。

npm install maicraft -g

方法三:本地构建

当你的网络不太好,可以使用本地构建。首先clone本地项目

git clone git@github.com:ChangingSelf/maicraft-mcp-server.git
cd maicraft-mcp-server
pnpm install
pnpm run build

然后配置为:

{
  "mcpServers": {
    "minecraft": {
      "command": "node",
      "args": [
        "/path/to/maicraft-mcp-server/dist/main.js",
        "--host",
        "localhost",
        "--port",
        "25565",
        "--username",
        "EvilMai",
      ]
    }
  }
}

如果你不想每次都 pnpm run build,也可以直接指定为 main.ts,只不过需要tsx来执行

{
  "mcpServers": {
    "minecraft": {
      "command": "npx",
      "args": [
        "tsx"
        "/path/to/maicraft-mcp-server/src/main.ts",
        "--host",
        "localhost",
        "--port",
        "25565",
        "--username",
        "EvilMai",
      ]
    }
  }
}

配置

Maicraft 支持两种配置方式:命令行参数和配置文件。

方式一:命令行参数(推荐)

最简单的方式是直接在启动时使用命令行参数,无需创建配置文件:

# 基本连接参数
--host <地址>           # Minecraft 服务器地址(默认:127.0.0.1)
--port <端口>           # 服务器端口(默认:25565)
--username <用户名>     # 机器人用户名
--auth <认证方式>       # offline | microsoft | mojang(默认:offline)

# 日志配置
--log-level <级别>      # DEBUG | INFO | WARN | ERROR(默认:INFO)

# 事件过滤
--events-disabled <事件列表>  # 要禁用的事件,用逗号分隔

快速开始示例:

# 连接本地服务器
npx -y maicraft --host 127.0.0.1 --username MyBot

# 连接远程服务器并启用调试日志
npx -y maicraft --host mc.example.com --port 25565 --username Bot --log-level DEBUG

# 禁用聊天事件减少噪音
npx -y maicraft --host 127.0.0.1 --username Bot --events-disabled chat,playerJoined

方式二:配置文件(适合复杂配置)

如果你需要复杂的配置,或者想保存配置以便重复使用,可以使用配置文件:

首先获取配置文件模板:

npx 用户

# 复制配置文件模板到当前目录
npx -y maicraft --init-config

源码安装用户

# 复制配置文件模板
cp config-template.yaml config.yaml

然后编辑 config.yaml 配置你的设置:

minecraft:
  host: 127.0.0.1        # Minecraft 服务器地址
  port: 25565            # 服务器端口
  username: MaiBot       # 机器人用户名
  auth: offline          # 认证方式:offline | microsoft | mojang

# 日志配置
logging:
  level: INFO            # 日志级别:DEBUG | INFO | WARN | ERROR
  enableFileLog: true    # 是否启用文件日志
  useStderr: true        # MCP 模式建议开启

# 可选:禁用特定事件
disabledEvents:
  - chat                 # 聊天事件
  - playerJoined         # 玩家加入
  # - death              # 其他事件...

# 其他高级配置...
# ……

提示: 你也可以混合使用两种方式,先用配置文件设置基础配置,再用命令行参数覆盖特定设置。

启动

现在你可以直接启动 Maicraft:

方式一:npx 用户

# 直接启动(结合上面的命令行参数使用)
npx -y maicraft --host 127.0.0.1 --username MyBot

# 或使用配置文件启动
npx -y maicraft /path/to/config.yaml

方式二:源码安装用户

# 开发模式(热重载,适合开发调试)
pnpm dev

# 生产模式(需要先构建)
pnpm build
pnpm start

启动成功后,你会看到类似以下的输出:

[INFO] Maicraft 客户端已启动,按 Ctrl+C 退出
[INFO] 日志文件位置: /path/to/logs/maicraft-2024-01-15T10-30-00.log
[INFO] WebSocket日志服务器已启动: ws://localhost:20915/ws/mcp-logs

测试

方式一:npx 用户

# 需要先安装mcp-inspector
npm install -g @modelcontextprotocol/inspector

# 列出已注册的工具
mcp-inspector --cli --config mcp-inspector.json --server maicraft --method tools/list

# 调用 query_state 进行烟囱测试
mcp-inspector --cli --config mcp-inspector.json --server maicraft --method tools/call --tool-name query_state

方式二:源码安装用户

# 列出已注册的工具
pnpm mcp:tools

# 调用 query_state 进行烟囱测试
pnpm mcp:state

快速调试

方法一:直接调试

无需下载任何源码,直接运行如下命令:

npx @modelcontextprotocol/inspector@0.16.5 npx -y maicraft@latest --host ChangingSelf.xyz --port 50226 --username MaiBot --auth offline

之后会弹出一个浏览器网页,点击这个网页左下角的“connect”按钮,若右侧出现“List Tools”的按钮,说明成功配置好了,可以直接通过UI界面进行调试操作。

指定inspector的0.16.5版本的原因是,左下角会有stderr的输出。本mcp server支持的是stdio类型,所以为了避免日志影响stdio,这里将所有的日志都重定向到了stderr。

方法二:源码调试

如果你已经克隆了项目源码,可以直接使用源码进行调试:

# 克隆项目(如果还没有)
git clone https://github.com/ChangingSelf/Maicraft.git
cd Maicraft

# 安装依赖
pnpm install

# 启动调试界面(开发模式)
pnpm mcp:ui

这会启动一个基于源码的调试界面,无需打包,直接运行TypeScript源码。

如果你需要更灵活的调试,也可以手动配置:

创建mcp-inspector.json配置文件

{
  "mcpServers": {
    "maicraft": {
      "type": "stdio",
      "command": "tsx",
      "args": ["src/main.ts", "./config.yaml"],
      "env": {
        "NODE_ENV": "development"
      }
    }
  }
}
# 启动调试界面
mcp-inspector --config mcp-inspector.json --server maicraft

日志输出

Maicraft 提供多种方式查看日志:控制台输出、文件日志、WebSocket 实时流。

日志文件

日志文件默认保存在项目根目录的 logs/ 文件夹中,文件名格式为:

logs/maicraft-YYYY-MM-DDTHH-mm-ss.log

WebSocket 日志流

程序启动时会自动启动 WebSocket 服务器,用于实时传输日志:

  • 端点: ws://localhost:20915/ws/mcp-logs

  • 默认端口: 20915

  • 用途: 用于 maicraft-web-ui 等工具实时查看日志

可以通过配置修改 WebSocket 服务器设置:

websocket:
  enabled: true           # 是否启用WebSocket日志服务器
  port: 20915             # WebSocket服务器端口
  host: "localhost"       # WebSocket服务器监听地址

架构

graph LR
  A[main.ts 启动器] -->|读取| C[config.yaml]
  A --> L[Logger]
  A --> MC[MinecraftClient]
  A --> AE[ActionExecutor]
  A --> MCP[MaicraftMcpServer]

  MC -->|使用| B[mineflayer Bot]
  B -->|事件| MC
  MC -->|gameEvent| A

  MCP -->|动作工具| AE
  MCP -->|连接/状态| MC
  AE -->|使用 Bot 执行动作| B
  
  AE -->|自动发现| ACT[src/actions/*.ts]
  ACT -->|schema + execute| AE
  AE -->|自动生成| MCP_TOOLS[MCP Tools]

动作系统架构

graph TD
  A[Action File] -->|继承| B[BaseAction]
  A -->|定义| C[schema: z.ZodTypeAny]
  A -->|实现| D[execute: bot, params => Promise<ActionResult>]
  
  B -->|自动提供| E[validateParams]
  B -->|自动提供| F[getParamsSchema]
  B -->|自动提供| G[getMcpTools]
  
  G -->|生成| H[MCP Tool: action_name_snake_case]
  C -->|校验| I[参数类型安全]
  C -->|描述| J[自动生成参数文档]

时序:调用动作(mine_block)

sequenceDiagram
  participant Client as MCP Client
  participant Server as MaicraftMcpServer
  participant AE as ActionExecutor
  participant MC as MinecraftClient
  participant Bot as mineflayer Bot

  Client->>Server: tools/call mine_block
  Server->>MC: getBot()
  MC-->>Server: Bot
  alt Bot ready
    Server->>AE: execute('mineBlock', Bot, params)
    AE->>Bot: 动作执行(寻路/采集等)
    Bot-->>AE: result
    AE-->>Server: { success, data }
    Server-->>Client: structuredContent
  else Bot not ready
    Server-->>Client: { ok:false, error: service_unavailable }
  end

时序:事件处理

sequenceDiagram
  participant Bot as mineflayer Bot
  participant MC as MinecraftClient
  participant Main as main.ts

  Bot->>MC: 原始游戏事件
  MC->>MC: 过滤 disabledEvents(黑名单)
  MC-->>Main: gameEvent

详细配置

命令行参数

Maicraft 支持多种命令行参数,可以覆盖配置文件中的设置:

# 基础连接参数
--host <地址>           # Minecraft 服务器地址(默认:127.0.0.1)
--port <端口>           # 服务器端口(默认:25565)
--username <用户名>     # 机器人用户名
--password <密码>       # 服务器密码(在线模式需要)
--auth <认证方式>       # offline | microsoft | mojang(默认:offline)
--version <版本>        # Minecraft 版本(可选,自动检测)

# 日志配置
--log-level <级别>      # DEBUG | INFO | WARN | ERROR(默认:INFO)

# 事件过滤(黑名单机制)
--events-disabled <事件列表>  # 要禁用的事件类型,用逗号分隔
                              # 示例:--events-disabled chat,playerJoined,health
                              # 支持的事件:chat, playerJoined, playerLeft, death, spawn, rain, kicked, spawnReset, health, entityHurt, entityDead, playerCollect

# MCP 配置
--mcp-name <名称>       # MCP 服务器名称
--mcp-version <版本>    # MCP 服务器版本

# 工具过滤
--tools-enabled <工具列表>    # 启用的 MCP 工具列表(白名单)
--tools-disabled <工具列表>  # 禁用的 MCP 工具列表(黑名单)

事件禁用参数示例

# 禁用聊天和玩家加入事件
npx -y maicraft --events-disabled chat,playerJoined

# 禁用所有生命值相关事件
npx -y maicraft --events-disabled health,entityHurt,entityDead

# 禁用天气和玩家收集事件
npx -y maicraft --events-disabled rain,playerCollect

基础配置

config.yaml 中配置 Minecraft 服务器连接:

minecraft:
  host: 127.0.0.1        # 服务器地址
  port: 25565            # 端口
  username: MaiBot       # 机器人用户名
  auth: offline          # 认证方式:offline | microsoft | mojang
  version: "1.19.0"      # 游戏版本(可选)

# 禁用的事件类型列表(黑名单机制)
# 列出要禁用的游戏事件类型,默认情况下所有事件都会被启用
disabledEvents:
  # - chat                 # 聊天事件
  # - playerJoined         # 玩家加入
  # - playerLeft           # 玩家离开
  # - death                # 玩家死亡
  # - spawn                # 玩家重生
  # - rain                 # 天气变化
  # - kicked               # 玩家被踢出
  # - spawnReset           # 重生点重置
  # - health               # 生命值更新
  # - entityHurt           # 实体受伤
  # - entityDead           # 实体死亡
  # - playerCollect        # 玩家收集物品

# 不能破坏的方块列表配置
# 机器人路径查找时会避免破坏这些方块
blocksCantBreak:
  - chest        # 箱子
  - furnace      # 熔炉
  - bed          # 床
  - door         # 门
  - trapdoor     # 活板门
  - sign         # 告示牌
  - torch        # 火把
  - lantern      # 灯笼

maxMessageHistory: 100   # 事件历史缓存数量


### 路径查找配置

#### 不能破坏的方块列表

`blocksCantBreak` 配置项用于指定机器人在路径查找时不能破坏的方块列表。当机器人需要移动到某个位置时,它会避免破坏这些重要的方块。

```yaml
# 不能破坏的方块列表配置
blocksCantBreak:
  - chest        # 箱子
  - furnace      # 熔炉
  - bed          # 床
  - door         # 门
  - trapdoor     # 活板门
  - sign         # 告示牌
  - torch        # 火把
  - lantern      # 灯笼

配置说明:

  • 如果不配置此选项,将使用默认列表:['chest', 'furnace']

  • 可以设置为空数组 [] 来允许破坏所有方块

  • 方块名称使用 Minecraft 的英文名称(如 chestfurnace 等)

  • 如果配置了未知的方块名称,会在日志中显示警告信息

常见方块名称参考:

  • chest - 箱子

  • furnace - 熔炉

  • crafting_table - 工作台

  • bed - 床

  • door - 门

  • trapdoor - 活板门

  • sign - 告示牌

  • torch - 火把

  • lantern - 灯笼

  • anvil - 铁砧

  • enchanting_table - 附魔台

  • brewing_stand - 酿造台

MCP 工具配置

Maicraft 支持多种工具过滤模式,推荐使用黑名单模式:

mcp:
  name: "Maicraft MCP"
  version: "1.0.0"
  tools:
    # 方式1:黑名单模式(推荐)- 屏蔽指定工具,其他全部可用
    disabled:
      - use_chest
      - smelt_item
    
    # 方式2:白名单模式 - 仅暴露指定工具
    # enabled:
    #   - mine_block
    #   - place_block
    #   - follow_player
    
    # 方式3:同时使用 - 白名单允许的集合减去黑名单
    # enabled:
    #   - mine_block
    #   - place_block
    #   - chat
    # disabled:
    #   - chat
    
    # 方式4:不配置 - 默认暴露所有工具
    # (删除或注释掉 tools 部分)

动作开发

动作系统特性

  • 自动发现:将动作文件放在 src/actions/ 目录即可自动发现

  • 参数校验:基于 Zod 的自动参数校验

  • 类型安全:完整的 TypeScript 类型支持

  • MCP 集成:自动生成对应的 MCP 工具

编写新动作

方式1:继承基类(推荐)

// src/actions/MyAction.ts
import { BaseAction } from '../minecraft/ActionInterface';
import { z } from 'zod';

interface MyActionParams {
  target: string;
  count?: number;
}

export class MyAction extends BaseAction<MyActionParams> {
  name = 'myAction';
  description = '执行我的自定义动作';
  
  // 定义参数校验 schema
  schema = z.object({
    target: z.string().describe('目标对象'),
    count: z.number().int().min(1).optional().describe('执行次数(可选)'),
  });

  async execute(bot: Bot, params: MyActionParams) {
    try {
      // 实现动作逻辑
      const count = params.count ?? 1;
      
      // ... 具体实现
      
      return this.createSuccessResult(`成功执行动作 ${count} 次`);
    } catch (error) {
      return this.createExceptionResult(error, '执行失败', 'EXECUTION_ERROR');
    }
  }
  
  // validateParams、getParamsSchema、getMcpTools 由基类自动提供
}

方式2:函数式定义

// src/actions/MyAction.ts
import { defineAction } from '../minecraft/ActionInterface';
import { z } from 'zod';

export const MyAction = defineAction({
  name: 'myAction',
  description: '执行我的自定义动作',
  schema: z.object({
    target: z.string().describe('目标对象'),
    count: z.number().int().min(1).optional().describe('执行次数(可选)'),
  }),
  async execute(bot, params) {
    // 实现动作逻辑
    const count = params.count ?? 1;
    
    // ... 具体实现
    
    return { success: true, message: `成功执行动作 ${count} 次` };
  },
});

动作自动注册

  1. 将动作文件放在 src/actions/ 目录

  2. 文件会被自动发现并注册

  3. 对应的 MCP 工具会自动生成(工具名为动作名的 snake_case 形式)

  4. 例如:MyActionmy_action 工具

动作开发最佳实践

1. 参数设计原则

  • 使用清晰的参数名称,避免缩写

  • 为可选参数提供合理的默认值

  • 使用 Zod schema 进行严格的参数校验

  • 在参数描述中提供示例和说明

2. 错误处理

  • 使用 createErrorResult() 返回业务逻辑错误

  • 使用 createExceptionResult() 返回异常错误

  • 提供有意义的错误代码和消息

  • 记录详细的调试日志

3. 返回值设计

  • 使用 createSuccessResult() 返回成功结果

  • 在返回数据中包含有用的状态信息

  • 保持返回格式的一致性

4. 依赖检查

  • 检查必要的插件是否已加载(如 pathfinder)

  • 验证目标对象是否存在(如方块、玩家、实体)

  • 确保背包中有必要的物品

5. 性能考虑

  • 设置合理的超时时间

  • 限制搜索范围(如 maxDistance)

  • 避免无限循环和长时间阻塞

可用的动作工具

当前支持的动作工具:

基础交互动作

  • chat chat chat - 发送聊天消息

    • 参数:message (字符串) - 要发送的聊天消息

  • basic_control basic_control basic_control - 基础游戏控制功能

    • 参数:

      • type (字符串) - 控制类型:toss | move | jump | sneak | look_at | sleep | wake | stop_move | stop_sneak

      • item (字符串,可选) - 物品名称或ID (用于 toss 类型)

      • count (数字,可选) - 物品数量 (用于 toss 类型,默认 1)

      • direction (字符串,可选) - 移动方向 (用于 move 类型:forward | back | left | right)

      • lookType (字符串,可选) - 注视类型 (用于 look_at 类型:angle | position | player | entity | block)

      • yaw (数字,可选) - 视角偏航角,弧度 (用于 angle 注视类型)

      • pitch (数字,可选) - 视角俯仰角,弧度 (用于 angle 注视类型)

      • x, y, z (数字,可选) - 目标坐标 (用于 position 注视类型)

      • force (布尔值,可选) - 是否强制看向 (用于所有注视类型,默认 false)

      • player (字符串,可选) - 目标玩家名称 (用于 player 注视类型)

      • entity (字符串,可选) - 目标实体类型 (用于 entity 注视类型),例如 cow, pig, zombie 等

      • block (字符串,可选) - 目标方块名称 (用于 block 注视类型),例如 dirt, stone, diamond_ore 等

      • maxDistance (数字,可选) - 搜索距离 (用于 entity 和 block 注视类型,默认 64)

  • use_item use_item use_item - 使用手中物品

    • 参数:

      • itemName (字符串,可选) - 物品名称,不指定则使用当前手持物品

      • useType (字符串,可选) - 使用类型:consume | activate | useOn,默认为根据物品类型自动判断

      • targetEntityName (字符串,可选) - 目标实体名称,仅在使用 useOn 类型时需要

      • targetPlayerName (字符串,可选) - 目标玩家名称,仅在使用 useOn 类型时需要

      • offHand (布尔值,可选) - 是否使用副手,默认 false

移动与导航动作

  • move move move - 移动到指定位置

    • 参数:

      • type (字符串) - 移动类型:coordinate | block | player | entity

      • useAbsoluteCoords (布尔值,可选) - 是否使用绝对坐标,默认 false

      • x, y, z (数字,可选) - 目标坐标 (当 type 为 coordinate 时必需)

      • block (字符串,可选) - 目标方块名称 (当 type 为 block 时必需)

      • player (字符串,可选) - 目标玩家名称 (当 type 为 player 时必需)

      • entity (字符串,可选) - 目标实体类型 (当 type 为 entity 时必需)

      • distance (数字,可选) - 到达距离,默认 1

      • timeout (数字,可选) - 超时时间(秒),默认 60

      • maxDistance (数字,可选) - 最大移动距离,默认 100

  • follow_player follow_player follow_player - 跟随指定玩家

    • 参数:

      • player (字符串) - 目标玩家名称

      • distance (数字,可选) - 跟随距离(格),默认 3

      • timeout (数字,可选) - 超时时间(秒),默认 5

  • swim_to_land swim_to_land swim_to_land - 游向最近的陆地

    • 参数:

      • maxDistance (数字,可选) - 最大搜索距离,默认 64

      • timeout (数字,可选) - 超时时间(秒),默认 60

方块操作动作

  • mine_block mine_block mine_block - 挖掘指定类型的方块

    • 参数:

      • name (字符串) - 方块名称,例如 "dirt", "stone", "coal_ore"

      • count (数字,可选) - 需要挖掘的数量,默认 1

      • direction (字符串,可选) - 挖掘方向:+y | -y | +z | -z | +x | -x(坐标轴方向),不指定时在附近搜索

      • maxDistance (数字,可选) - 搜索距离,默认 48

      • bypassAllCheck (布尔值,可选) - 是否绕过所有检查直接挖掘,默认 false

  • place_block place_block place_block - 在指定位置放置方块

    • 参数:

      • x, y, z (数字) - 目标位置坐标

      • block (字符串) - 要放置的方块名称

      • face (字符串,可选) - 放置面向:+y | -y | +z | -z | +x | -x(坐标轴方向)

      • useAbsoluteCoords (布尔值,可选) - 是否使用绝对坐标,默认 false

物品制作动作

  • craft_item craft_item craft_item - 合成指定物品

    • 参数:

      • item (字符串) - 要合成的物品名称

      • count (数字,可选) - 合成数量,默认 1

  • start_smelting start_smelting start_smelting - 在熔炉中开始熔炼物品(不等待完成)

    • 参数:

      • item (字符串) - 要熔炼的物品名称

      • fuel (字符串) - 燃料物品名称

      • count (数字,可选) - 熔炼数量,默认 1

  • collect_smelted_items collect_smelted_items collect_smelted_items - 从熔炉中收集已熔炼完成的物品

    • 参数:

      • item (字符串,可选) - 要收集的熔炼产物名称,不指定则收集所有产物

      • x, y, z (数字,可选) - 熔炉坐标

      • useAbsoluteCoords (布尔值,可选) - 是否使用绝对坐标,默认 false

  • use_furnace use_furnace use_furnace - 熔炉操作(放入/取出/查看物品)

    • 参数:

      • container_type (字符串,可选) - 容器类型:furnace | blast_furnace | smoker (默认 furnace)

      • action (字符串,可选) - 操作类型:put | take | view (默认 put)

      • items (数组,可选) - 物品数组 (put操作必需,take操作可选用于指定槽位)

        • name (字符串,可选) - 物品名称 (put操作必需)

        • count (数字,可选) - 物品数量 (默认 1)

        • position (字符串,可选) - 槽位:input | fuel | output

      • x, y, z (数字,可选) - 熔炉坐标

      • auto_search (布尔值,可选) - 是否自动查找附近容器 (默认 false)

  • smelt_item smelt_item smelt_item - 在熔炉中熔炼物品(已弃用,建议使用 start_smelting + collect_smelted_items)

    • 参数:

      • item (字符串) - 要熔炼的物品名称

      • fuel (字符串) - 燃料物品名称

      • count (数字,可选) - 熔炼数量,默认 1

存储与交互动作

  • use_chest use_chest use_chest - 与附近箱子交互,存取物品

    • 参数:

      • action (字符串) - 操作类型:store | withdraw

      • item (字符串) - 物品名称

      • count (数字,可选) - 数量,默认 1

战斗动作

  • kill_mob kill_mob kill_mob - 击杀指定名称的生物

    • 参数:

      • mob (字符串) - 目标生物名称,例如 "cow", "pig", "zombie"

      • timeout (数字,可选) - 等待生物死亡的超时时间(秒),默认 300

其他动作

动作使用示例

基础操作示例

// 发送聊天消息
{
  "tool": "chat",
  "arguments": {
    "message": "Hello, Minecraft!"
  }
}

// 食用苹果
{
  "tool": "use_item",
  "arguments": {
    "itemName": "apple",
    "useType": "consume"
  }
}

// 扔雪球
{
  "tool": "use_item",
  "arguments": {
    "itemName": "snowball",
    "useType": "activate"
  }
}

// 使用当前手持物品(自动判断使用类型)
{
  "tool": "use_item",
  "arguments": {}
}

// 丢弃物品
{
  "tool": "basic_control",
  "arguments": {
    "type": "toss",
    "item": "dirt",
    "count": 5
  }
}

// 开始向前移动
{
  "tool": "basic_control",
  "arguments": {
    "type": "move",
    "direction": "forward"
  }
}

// 执行跳跃
{
  "tool": "basic_control",
  "arguments": {
    "type": "jump"
  }
}

// 开始潜行
{
  "tool": "basic_control",
  "arguments": {
    "type": "sneak"
  }
}

// 调整视角到特定角度
{
  "tool": "basic_control",
  "arguments": {
    "type": "look_at",
    "lookType": "angle",
    "yaw": 1.57,
    "pitch": 0.0,
    "force": true
  }
}

// 看向特定坐标位置
{
  "tool": "basic_control",
  "arguments": {
    "type": "look_at",
    "lookType": "position",
    "x": 100,
    "y": 64,
    "z": 100,
    "force": true
  }
}

// 看向玩家
{
  "tool": "basic_control",
  "arguments": {
    "type": "look_at",
    "lookType": "player",
    "player": "Steve",
    "force": true
  }
}

// 看向最近的牛
{
  "tool": "basic_control",
  "arguments": {
    "type": "look_at",
    "lookType": "entity",
    "entity": "cow",
    "maxDistance": 50
  }
}

// 看向最近的钻石矿石方块
{
  "tool": "basic_control",
  "arguments": {
    "type": "look_at",
    "lookType": "block",
    "block": "diamond_ore",
    "maxDistance": 100
  }
}

// 睡觉(自动寻找附近的床)
{
  "tool": "basic_control",
  "arguments": {
    "type": "sleep"
  }
}

// 醒来
{
  "tool": "basic_control",
  "arguments": {
    "type": "wake"
  }
}

// 停止移动
{
  "tool": "basic_control",
  "arguments": {
    "type": "stop_move"
  }
}

// 停止潜行
{
  "tool": "basic_control",
  "arguments": {
    "type": "stop_sneak"
  }
}

// 对玩家使用物品
{
  "tool": "use_item",
  "arguments": {
    "itemName": "saddle",
    "useType": "useOn",
    "targetPlayerName": "Steve"
  }
}

// 对实体使用物品
{
  "tool": "use_item",
  "arguments": {
    "itemName": "shears",
    "useType": "useOn",
    "targetEntityName": "sheep"
  }
}

// 挖掘石头
{
  "tool": "mine_block",
  "arguments": {
    "name": "stone",
    "count": 5
  }
}

// 向Y轴正方向挖掘石头
{
  "tool": "mine_block",
  "arguments": {
    "name": "stone",
    "count": 3,
    "direction": "+y"
  }
}

// 向Z轴负方向挖掘煤炭
{
  "tool": "mine_block",
  "arguments": {
    "name": "coal_ore",
    "count": 2,
    "direction": "-z",
    "maxDistance": 20
  }
}

// 移动到指定坐标
{
  "tool": "move",
  "arguments": {
    "type": "coordinate",
    "x": 100,
    "y": 64,
    "z": 200,
    "useAbsoluteCoords": true
  }
}

高级操作示例

💡 熔炼优化提示:为了优化熔炼体验并避免长时间等待,建议使用 start_smelting + collect_smelted_items 的组合替代 smelt_item。这样可以:

  • 开始熔炼后立即返回,不阻塞其他操作

  • 在熔炼进行时执行其他任务

  • 熔炼完成后单独收集产物

// 合成工作台
{
  "tool": "craft_item",
  "arguments": {
    "item": "crafting_table",
    "count": 1
  }
}

// 开始熔炼铁矿石(推荐方式)
{
  "tool": "start_smelting",
  "arguments": {
    "item": "iron_ore",
    "fuel": "coal",
    "count": 3
  }
}

// 收集熔炼产物
{
  "tool": "collect_smelted_items",
  "arguments": {
    "item": "iron_ingot"
  }
}

// 熔炼铁矿石(已弃用,会等待熔炼完成)
{
  "tool": "smelt_item",
  "arguments": {
    "item": "iron_ore",
    "fuel": "coal",
    "count": 3
  }
}

// 熔炉操作示例
{
  "tool": "use_furnace",
  "arguments": {
    "action": "put",
    "items": [
      {"name": "iron_ore", "count": 5, "position": "input"},
      {"name": "coal", "count": 2, "position": "fuel"}
    ]
  }
}

// 查看熔炉状态
{
  "tool": "use_furnace",
  "arguments": {
    "action": "view"
  }
}

// 从熔炉取出产物
{
  "tool": "use_furnace",
  "arguments": {
    "action": "take",
    "items": [
      {"position": "output"}
    ]
  }
}

// 跟随玩家
{
  "tool": "follow_player",
  "arguments": {
    "player": "Steve",
    "distance": 5,
    "timeout": 30
  }
}

MCP 工具

查询工具

  • query_state - 查询游戏状态

  • query_events - 查询事件历史

动作工具

动作工具会根据 src/actions/ 目录中的动作文件自动生成,工具名格式为动作名的 snake_case 形式。例如:

  • MineBlockActionmine_block 工具

  • PlaceBlockActionplace_block 工具

  • FollowPlayerActionfollow_player 工具

每个动作工具都会自动包含:

  • 基于 Zod schema 的参数校验

  • 完整的参数类型说明

  • 自动生成的工具描述

  • 统一的错误处理和返回格式

开发

依赖要求

  • Node.js >= 18.0.0

  • pnpm >= 10.6.5

  • Python (用于编译某些依赖)

主要依赖版本

  • mineflayer: ^4.32.0

  • @modelcontextprotocol/sdk: ^1.17.2

  • mineflayer-pathfinder-mai: ^2.4.6

  • prismarine-viewer: ^1.33.0

  • canvas: ^3.1.2

# 构建
pnpm build

# 测试
pnpm test

# 代码检查
pnpm lint

# 清理构建文件
pnpm clean

许可证

MIT

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

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/ChangingSelf/maicraft-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server