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包来配置
这里的@latest表示使用最新版本,你也可以替换为其他版本。
方法二:提前全局下载
你可以提前全局安装maicraft,然后再按照方法一进行配置,这样启动时会使用你全局下载的maicraft而不是npx下载的,这样可以避免调用它的时候过慢(因为需要临时下载),缺点是你需要手动升级。
方法三:本地构建
当你的网络不太好,可以使用本地构建。首先clone本地项目
然后配置为:
如果你不想每次都 pnpm run build,也可以直接指定为 main.ts,只不过需要tsx来执行
配置
Maicraft 支持两种配置方式:命令行参数和配置文件。
方式一:命令行参数(推荐)
最简单的方式是直接在启动时使用命令行参数,无需创建配置文件:
快速开始示例:
方式二:配置文件(适合复杂配置)
如果你需要复杂的配置,或者想保存配置以便重复使用,可以使用配置文件:
首先获取配置文件模板:
npx 用户
源码安装用户
然后编辑 config.yaml 配置你的设置:
提示: 你也可以混合使用两种方式,先用配置文件设置基础配置,再用命令行参数覆盖特定设置。
启动
现在你可以直接启动 Maicraft:
方式一:npx 用户
方式二:源码安装用户
启动成功后,你会看到类似以下的输出:
测试
方式一:npx 用户
方式二:源码安装用户
快速调试
方法一:直接调试
无需下载任何源码,直接运行如下命令:
之后会弹出一个浏览器网页,点击这个网页左下角的“connect”按钮,若右侧出现“List Tools”的按钮,说明成功配置好了,可以直接通过UI界面进行调试操作。
指定inspector的0.16.5版本的原因是,左下角会有stderr的输出。本mcp server支持的是stdio类型,所以为了避免日志影响stdio,这里将所有的日志都重定向到了stderr。
方法二:源码调试
如果你已经克隆了项目源码,可以直接使用源码进行调试:
这会启动一个基于源码的调试界面,无需打包,直接运行TypeScript源码。
如果你需要更灵活的调试,也可以手动配置:
创建mcp-inspector.json配置文件
日志输出
Maicraft 提供多种方式查看日志:控制台输出、文件日志、WebSocket 实时流。
日志文件
日志文件默认保存在项目根目录的 logs/ 文件夹中,文件名格式为:
WebSocket 日志流
程序启动时会自动启动 WebSocket 服务器,用于实时传输日志:
端点:
ws://localhost:20915/ws/mcp-logs默认端口: 20915
用途: 用于 maicraft-web-ui 等工具实时查看日志
可以通过配置修改 WebSocket 服务器设置:
架构
动作系统架构
时序:调用动作(mine_block)
时序:事件处理
详细配置
命令行参数
Maicraft 支持多种命令行参数,可以覆盖配置文件中的设置:
事件禁用参数示例
基础配置
在 config.yaml 中配置 Minecraft 服务器连接:
配置说明:
如果不配置此选项,将使用默认列表:
['chest', 'furnace']可以设置为空数组
[]来允许破坏所有方块方块名称使用 Minecraft 的英文名称(如
chest、furnace等)如果配置了未知的方块名称,会在日志中显示警告信息
常见方块名称参考:
chest- 箱子furnace- 熔炉crafting_table- 工作台bed- 床door- 门trapdoor- 活板门sign- 告示牌torch- 火把lantern- 灯笼anvil- 铁砧enchanting_table- 附魔台brewing_stand- 酿造台
MCP 工具配置
Maicraft 支持多种工具过滤模式,推荐使用黑名单模式:
动作开发
动作系统特性
自动发现:将动作文件放在
src/actions/目录即可自动发现参数校验:基于 Zod 的自动参数校验
类型安全:完整的 TypeScript 类型支持
MCP 集成:自动生成对应的 MCP 工具
编写新动作
方式1:继承基类(推荐)
方式2:函数式定义
动作自动注册
将动作文件放在
src/actions/目录文件会被自动发现并注册
对应的 MCP 工具会自动生成(工具名为动作名的 snake_case 形式)
例如:
MyAction→my_action工具
动作开发最佳实践
1. 参数设计原则
使用清晰的参数名称,避免缩写
为可选参数提供合理的默认值
使用 Zod schema 进行严格的参数校验
在参数描述中提供示例和说明
2. 错误处理
使用
createErrorResult()返回业务逻辑错误使用
createExceptionResult()返回异常错误提供有意义的错误代码和消息
记录详细的调试日志
3. 返回值设计
使用
createSuccessResult()返回成功结果在返回数据中包含有用的状态信息
保持返回格式的一致性
4. 依赖检查
检查必要的插件是否已加载(如 pathfinder)
验证目标对象是否存在(如方块、玩家、实体)
确保背包中有必要的物品
5. 性能考虑
设置合理的超时时间
限制搜索范围(如 maxDistance)
避免无限循环和长时间阻塞
可用的动作工具
当前支持的动作工具:
基础交互动作
chatchat chat - 发送聊天消息参数:
message(字符串) - 要发送的聊天消息
basic_controlbasic_control basic_control - 基础游戏控制功能参数:
type(字符串) - 控制类型:toss|move|jump|sneak|look_at|sleep|wake|stop_move|stop_sneakitem(字符串,可选) - 物品名称或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_itemuse_item use_item - 使用手中物品参数:
itemName(字符串,可选) - 物品名称,不指定则使用当前手持物品useType(字符串,可选) - 使用类型:consume|activate|useOn,默认为根据物品类型自动判断targetEntityName(字符串,可选) - 目标实体名称,仅在使用useOn类型时需要targetPlayerName(字符串,可选) - 目标玩家名称,仅在使用useOn类型时需要offHand(布尔值,可选) - 是否使用副手,默认 false
移动与导航动作
movemove move - 移动到指定位置参数:
type(字符串) - 移动类型:coordinate|block|player|entityuseAbsoluteCoords(布尔值,可选) - 是否使用绝对坐标,默认 falsex,y,z(数字,可选) - 目标坐标 (当 type 为 coordinate 时必需)block(字符串,可选) - 目标方块名称 (当 type 为 block 时必需)player(字符串,可选) - 目标玩家名称 (当 type 为 player 时必需)entity(字符串,可选) - 目标实体类型 (当 type 为 entity 时必需)distance(数字,可选) - 到达距离,默认 1timeout(数字,可选) - 超时时间(秒),默认 60maxDistance(数字,可选) - 最大移动距离,默认 100
follow_playerfollow_player follow_player - 跟随指定玩家参数:
player(字符串) - 目标玩家名称distance(数字,可选) - 跟随距离(格),默认 3timeout(数字,可选) - 超时时间(秒),默认 5
swim_to_landswim_to_land swim_to_land - 游向最近的陆地参数:
maxDistance(数字,可选) - 最大搜索距离,默认 64timeout(数字,可选) - 超时时间(秒),默认 60
方块操作动作
mine_blockmine_block mine_block - 挖掘指定类型的方块参数:
name(字符串) - 方块名称,例如 "dirt", "stone", "coal_ore"count(数字,可选) - 需要挖掘的数量,默认 1direction(字符串,可选) - 挖掘方向:+y|-y|+z|-z|+x|-x(坐标轴方向),不指定时在附近搜索maxDistance(数字,可选) - 搜索距离,默认 48bypassAllCheck(布尔值,可选) - 是否绕过所有检查直接挖掘,默认 false
place_blockplace_block place_block - 在指定位置放置方块参数:
x,y,z(数字) - 目标位置坐标block(字符串) - 要放置的方块名称face(字符串,可选) - 放置面向:+y|-y|+z|-z|+x|-x(坐标轴方向)useAbsoluteCoords(布尔值,可选) - 是否使用绝对坐标,默认 false
物品制作动作
craft_itemcraft_item craft_item - 合成指定物品参数:
item(字符串) - 要合成的物品名称count(数字,可选) - 合成数量,默认 1
start_smeltingstart_smelting start_smelting - 在熔炉中开始熔炼物品(不等待完成)参数:
item(字符串) - 要熔炼的物品名称fuel(字符串) - 燃料物品名称count(数字,可选) - 熔炼数量,默认 1
collect_smelted_itemscollect_smelted_items collect_smelted_items - 从熔炉中收集已熔炼完成的物品参数:
item(字符串,可选) - 要收集的熔炼产物名称,不指定则收集所有产物x,y,z(数字,可选) - 熔炉坐标useAbsoluteCoords(布尔值,可选) - 是否使用绝对坐标,默认 false
use_furnaceuse_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_itemsmelt_item smelt_item - 在熔炉中熔炼物品(已弃用,建议使用 start_smelting + collect_smelted_items)参数:
item(字符串) - 要熔炼的物品名称fuel(字符串) - 燃料物品名称count(数字,可选) - 熔炼数量,默认 1
存储与交互动作
use_chestuse_chest use_chest - 与附近箱子交互,存取物品参数:
action(字符串) - 操作类型:store|withdrawitem(字符串) - 物品名称count(数字,可选) - 数量,默认 1
战斗动作
kill_mobkill_mob kill_mob - 击杀指定名称的生物参数:
mob(字符串) - 目标生物名称,例如 "cow", "pig", "zombie"timeout(数字,可选) - 等待生物死亡的超时时间(秒),默认 300
其他动作
动作使用示例
基础操作示例
高级操作示例
💡 熔炼优化提示:为了优化熔炼体验并避免长时间等待,建议使用
start_smelting+collect_smelted_items的组合替代smelt_item。这样可以:
开始熔炼后立即返回,不阻塞其他操作
在熔炼进行时执行其他任务
熔炼完成后单独收集产物
MCP 工具
查询工具
query_state- 查询游戏状态query_events- 查询事件历史
动作工具
动作工具会根据 src/actions/ 目录中的动作文件自动生成,工具名格式为动作名的 snake_case 形式。例如:
MineBlockAction→mine_block工具PlaceBlockAction→place_block工具FollowPlayerAction→follow_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
许可证
MIT