使用说明
minecraft mcp服务器
MCP(模型上下文协议)服务器,通过 Mineflayer 机器人支持 创造性的 和 生存 每种模式都有不同的工具集。bot在启动时使用环境变量中的配置自动连接——代理不传递任何连接参数。
通过以下方式进行沟通 标准 --将其插入任何MCP兼容客户端(Claude Desktop等)。
先决条件
- Node.js ≥ 20
- Minecraft Java版 服务器(香草、纸、蜘蛛等)
- 服务器必须位于 离线模式 (
online-mode=false在server.properties)或者配置为机器人无需身份验证即可加入 - 创意模式:机器人需求 操作员权限 (
/op <username>)用于命令工具(setblock,fill等等) - 生存模式:不需要特殊的服务器权限
快速开始
npm install
npm run build
脚本
| 脚本 | 命令 | 描述 |
|---|---|---|
build |
tsc -p tsconfig.json |
将TypeScript编译为 dist/ |
dev |
tsx src/main.ts |
无需编译即可直接运行 |
start |
node dist/main.js |
运行编译后的输出 |
配置
所有配置均通过 环境变量机器人在启动时自动连接——代理从不传递连接参数。
| 变量 | 默认值 | 描述 |
|---|---|---|
MC_MODE |
creative |
模式: creative 或 survival。确定要公开哪些工具。 |
MC_HOST |
127.0.0.1 |
Minecraft服务器主机。 |
MC_PORT |
25565 |
Minecraft服务器端口 |
MC_USERNAME |
mcp-bot |
机器人用户名。 |
MC_VERSION |
(自动检测) | Minecraft协议版本(例如。 1.20.4). |
MC_AUTO_CONNECT |
true |
启动时连接到服务器。设置为 false 推迟连接。 |
MCP客户端集成
此服务器使用 stdio传输.通过设置模式和连接 env 在您的MCP客户端配置中。
创意模式(默认)
{
"mcpServers": {
"minecraft": {
"command": "node",
"args": ["/absolute/path/to/dist/main.js"],
"env": {
"MC_MODE": "creative",
"MC_HOST": "localhost",
"MC_PORT": "25565",
"MC_USERNAME": "Builder"
}
}
}
}
生存模式
{
"mcpServers": {
"minecraft": {
"command": "node",
"args": ["/absolute/path/to/dist/main.js"],
"env": {
"MC_MODE": "survival",
"MC_HOST": "localhost",
"MC_PORT": "25565",
"MC_USERNAME": "Survivor"
}
}
}
}
开发(无构建步骤)
{
"mcpServers": {
"minecraft": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/src/main.ts"],
"env": {
"MC_MODE": "survival"
}
}
}
}
工具
工具分为 常见的 (始终可用), 仅限创意,以及 只生存 根据配置设置 MC_MODE.
常用工具(两种模式)
| 工具 | 说明 |
|---|---|
reconnect_bot |
重新连接到已配置的Minecraft服务器 |
get_bot_status |
获取状态、职位、健康状况、食物、最近聊天记录 |
send_chat |
在游戏中发送聊天消息 |
get_position |
获取当前坐标和方向 |
look_at |
查看特定的世界坐标 |
move_control |
设置运动状态(前进/后退/左/右/跳跃/冲刺/潜行),并可选择自动停止持续时间 |
stop_all_controls |
停止所有移动 |
get_inventory |
列出库存项目 |
仅限创意的工具
可用时间: MC_MODE=creative。这些使用服务器命令并需要 操作员权限.
| 工具 | 说明 |
|---|---|
setblock |
在坐标处放置块--模式: replace, destroy, keep |
fill |
填充长方体区域--模式: replace, destroy, keep, hollow, outline |
clone_area |
将长方体区域克隆到目的地 |
give_item |
将物品交给玩家(默认:机器人) |
teleport_to |
传送机器人以进行可选旋转协调 |
set_time |
设置世界时间(白天、中午、晚上或刻度值) |
set_weather |
设置天气(晴朗、下雨、打雷),持续时间可选 |
set_gamerule |
设定游戏规则 |
summon_entity |
调用具有可选NBT数据的实体 |
fly_to |
使用创意飞行将机器人飞到坐标(回退链:直接→ arc → 传送) |
生存专用工具
可用时间: MC_MODE=survival。这些使用Mineflayer插件(开拓者, 收集块, 工具)对于自主机器人行为,不需要操作员权限。
| 工具 | 说明 |
|---|---|
go_to |
使用寻路导航到坐标(自动处理障碍物) |
dig_block |
在坐标处开采一个矿块(自动配备最佳工具) |
place_block |
在坐标处从库存中放置一个块 |
collect_block |
查找、导航到、挖掘和收集某一类型的块 |
craft_item |
使用库存材料制作物品(必要时自动找到制作表) |
equip_item |
将物品装备到插槽中(手、头、躯干、腿、脚、徒手) |
为什么不
execute_command? 我们有意公开显式、类型化的工具,而不是原始命令passthrough。每个工具都会验证其输入并返回结构化结果,为代理提供更好的反馈并防止命令注入错误。
结构化工具输出
所有创意命令工具(setblock, fill, clone_area, give_item, teleport_to, set_time, set_weather, set_gamerule, summon_entity)返回结构化元数据以及人类可读的文本:
| 字段 | 类型 | 描述 |
|---|---|---|
executed |
boolean |
命令是否确认执行成功 |
category |
string |
成果类别: success, permission_denied, unknown_command, failed,或 timeout |
timedOut |
boolean |
服务器反馈窗口是否在收到响应之前过期 |
未确认、超时和失败的结果被报告为错误(isError: true)因此,代理可以自动检测问题并从中恢复。
fly_to 使用三阶段回退链并返回其他字段:
| 字段 | 类型 | 描述 |
|---|---|---|
method |
string |
哪种策略成功了: direct_fly, arc_fly,或 teleport_fallback |
executionConfirmed |
boolean |
机器人是否到达目标坐标 |
arrivedAt |
object | null |
决赛 {x, y, z} 尝试后的位置 |
例子
创意模式
# Fly to a build site
fly_to(x: 100, y: 80, z: 200)
# Place a single diamond block
setblock(x: 100, y: 64, z: 200, block: "diamond_block")
# Build a 10×1×10 stone platform
fill(x1: 0, y1: 63, z1: 0, x2: 10, y2: 63, z2: 10, block: "stone")
# Hollow out a cube of glass
fill(x1: 0, y1: 64, z1: 0, x2: 10, y2: 74, z2: 10, block: "glass", mode: "hollow")
# Give yourself 64 diamonds
give_item(item: "diamond", count: 64)
# Set daytime
set_time(value: "day")
生存模式
# Navigate to coordinates
go_to(x: 100, y: 64, z: 200)
# Mine a block (auto-selects best tool)
dig_block(x: 100, y: 63, z: 200)
# Collect 10 oak logs nearby
collect_block(blockName: "oak_log", count: 10)
# Craft planks from logs
craft_item(itemName: "oak_planks", count: 4)
# Equip a sword
equip_item(itemName: "stone_sword", destination: "hand")
故障排除
权限被拒绝(创意模式)
机器人需要服务器上的操作员权限:
/op <bot_username>
创意指挥工具(setblock, fill等)返回 isError: true 与类别 "permission_denied" 如果bot缺乏权限。
未知命令
当命令无效或拼写错误时返回。检查:
- 正确的块ID(例如。
stone,diamond_block,不Stone) - 有效坐标范围
- 正确的命令语法
无响应/超时
创意命令工具等待 5秒 用于服务器反馈。超时意味着:
- 该命令可能已执行,但未产生可识别的响应
- 服务器可能出现延迟
工具返回 category: "timeout" 和 timedOut: true,并被视为错误(isError: true)因此代理可以决定如何继续。
fly_to 失败
fly_to 自动按顺序尝试三种策略:
- 直飞 —
bot.creative.flyTo()到目标 - 弧形飞行 --上升到当前/目标Y上方的动态高度,水平飞行,然后下降(避开障碍物)
- 远程端口回退 —
/tp如果两种飞行方法都失败,则发出命令
检查 method 在回复中,看看使用了哪种策略。如果这三个都失败, executionConfirmed 是 false 和 isError 是 true.
连接问题
- 验证Minecraft服务器是否正在运行且可访问
- 检查
online-mode=false在server.properties用于离线模式机器人 - 确保端口正确(默认值:
25565) - 如果服务器已满或用户名已在使用中,机器人无法连接
- 检查
MC_AUTO_CONNECT未设置为false如果您希望自动连接