awesome-mineflayer-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@awesome-mineflayer-mcpConnect to localhost as Steve and mine 10 iron ore"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
awesome-mineflayer-mcp
A production-ready Model Context Protocol server that gives an LLM agent standalone-equivalent control over a Mineflayer Minecraft bot — movement, mining, crafting, inventory, combat, containers, chat, and much more — exposed as 110 strongly-typed tools across 23 groups, with full bot lifecycle management and dual (poll + push) event streaming.
Backed by the Mineflayer ecosystem: mineflayer-pathfinder (A* navigation), mineflayer-pvp (combat), mineflayer-collectblock (gathering), mineflayer-tool (auto tool-select), mineflayer-auto-eat, and mineflayer-armor-manager.
Requirements
Node.js ≥ 20 (developed on 22.16)
A Minecraft server to connect to (Java Edition). The bot auto-detects the server version.
For online-mode servers: a Microsoft account (
auth: "microsoft").
Related MCP server: Minecraft Dedalus MCP
Installation
Run it on demand with npx (no install needed):
npx awesome-mineflayer-mcp…or install it globally:
npm install -g awesome-mineflayer-mcp
awesome-mineflayer-mcpThe server speaks MCP over stdio, so it is normally launched by your MCP client rather than run by hand.
Use with an MCP client
Add it to your client's MCP server configuration. The recommended form uses npx so you always get the latest published build:
Claude Desktop (claude_desktop_config.json), Claude Code, Cursor, or any stdio MCP client:
{
"mcpServers": {
"mineflayer": {
"command": "npx",
"args": ["-y", "awesome-mineflayer-mcp"],
"env": {
"MCP_DISABLE_GROUPS": ""
}
}
}
}If you installed it globally, use "command": "awesome-mineflayer-mcp" with "args": [] instead.
Configuration (environment variables)
Variable | Default | Purpose |
| (none) | Comma-separated tool-group keys to disable (see catalog). Trim the surface for clients that struggle with 110 tools. |
|
| Max characters returned by any single tool call (truncated with a marker). |
|
| Size of the in-memory event ring buffer. |
|
| Minimum spacing between pushed resource-update / log notifications. |
|
| Radius (blocks) for proximity-filtered events (entity spawns, sounds). |
|
| Default timeout for long actions when the caller omits one. |
Example — disable rarely-used groups:
MCP_DISABLE_GROUPS=creative,villager,enchanting,settingsQuick start (tool flow)
connect_bot{ host, username, auth }— required first; resolves once the bot spawns.Act:
goto,dig,collect_block,craft_item,pvp_attack,chat, …Observe: poll
get_events(pass the returnednextSinceeach time) andget_state; or subscribe to thebot://*resources.disconnect_botwhen done.
Block / item / entity arguments accept human names ("iron_ore", "diamond_pickaxe", "zombie"); unknown names return fuzzy suggestions.
Authentication
auth: "offline"(default) — offline-mode servers;usernameis the in-game name.auth: "microsoft"—usernameis the account email. A device-code prompt is emitted as anmsa_codeevent / log notification. SetprofilesFolderto cache the token so subsequent runs skip the prompt, or pass a cachedaccessToken.
Tool catalog (110 tools, 23 groups)
Group keys (for MCP_DISABLE_GROUPS) are shown in brackets.
Lifecycle
[lifecycle]—connect_bot,disconnect_bot,reconnect_bot,respawn,get_connection_statusState & inspection
[state](read-only) —get_state,get_inventory,list_players,list_entities,find_nearest_entity,get_entity_details,get_scoreboards,get_teams,get_boss_bars,get_control_states,get_chat_patterns,support_feature,pathfinder_status,get_settings,get_physics,get_loaded_pluginsWorld queries
[world](read-only) —get_block_at,find_blocks,get_cursor_target,get_blocks_in_region,wait_for_chunks_to_loadMovement & pathfinding
[movement]—goto,set_goal,flee_from,follow_entity,stop_pathfinding,get_path_to,configure_movements,configure_pathfinder,set_control_state,clear_control_states,elytra_fly,wait_for_ticks,set_physics_enabledLook
[look]—look_at,look,look_at_entityDigging & building
[digging]—dig,place_block,activate_block,activate_entity,swing_armCombat
[combat]—pvp_attack,attack_entity,pvp_stop,pvp_configureInventory & items
[inventory]—equip_item,unequip_item,toss_item,set_quickbar_slot,consume,activate_item,click_window,move_slot_item,transfer_itemsContainers
[containers]—open_container,read_open_container,container_deposit,container_withdraw,close_windowFurnace / smelting
[furnace]—open_furnace,furnace_action,furnace_status,smelt_itemEnchanting & anvil
[enchanting]—enchant_item,anvil_combineVillager trading
[villager]—open_villager,trade_with_villagerCrafting
[crafting]—list_recipes,craft_itemBlock gathering
[gathering]—collect_block,cancel_collect,set_collect_configTool auto-select
[tool]—equip_tool_for_block,set_tool_chest_locations,get_best_toolSurvival automation
[survival]—autoeat_set_enabled,autoeat_configure,autoeat_eat,autoeat_cancel,autoeat_preview,armor_equip_allBeds & sleep
[beds]—sleep,wakeVehicles
[vehicles]—mount_entity,dismount,steer_vehicleFishing, books & signs
[fishing]—fish,cancel_fish,write_book,update_signChat & communication
[chat]—chat,whisper,run_command,tab_complete,register_chat_pattern,remove_chat_pattern,wait_for_messageSettings
[settings]—set_settingsCreative mode
[creative]—creative_set_inventory_slot,creative_clear_inventory,creative_fly,creative_fly_toEvents & telemetry
[events]—get_events,cancel_task
Long-running actions (goto, dig, collect_block, pvp_attack, fish, smelt_item, craft_item) are mutually exclusive and cancellable — start a new movement/combat action to supersede the prior one, or call stop_pathfinding / pvp_stop / cancel_collect / cancel_fish / cancel_task.
Resources
Subscribe-capable JSON resources for clients that support resource subscriptions:
bot://state— live self snapshot (position, vitals, gamemode, time, weather, held item, control states)bot://inventory— items, armor, off-hand, held slotworld://entities— up to 50 nearest tracked entitiesworld://players— server rosterbot://events— tail of recent events
Events
Game events are delivered two ways:
Pull:
get_events({ since, types, limit })drains a ring buffer; pass the returnednextSinceto read only new events.dropped: truesignals the buffer overflowed since yoursince.Push: subscribed resources emit throttled
notifications/resources/updated; notable lines (chat, death, kick, error, msa_code) are forwarded viasendLoggingMessage.
High-frequency observations (movement, per-tick updates, block/entity updates, time) are intentionally not buffered — read them on demand via get_state and the read-only tools.
Development (from source)
git clone https://github.com/G0Osey99/awesome-mineflayer-mcp.git
cd awesome-mineflayer-mcp
npm install
npm run build # tsc -> dist/
npm run typecheck # tsc --noEmit
npm test # vitest (unit tests for the pure logic)
npm run dev # tsx src/index.ts (run from source, no build step)Architecture and the full design rationale: docs/superpowers/specs/2026-06-28-mineflayer-mcp-server-design.md.
src/
index.ts entry (stdio transport, graceful shutdown)
server.ts builds the McpServer, registers tool groups + resources
config.ts env + constants
bot/ manager (lifecycle FSM), plugins, events, wire-events, state, windows, action-locks
tools/ one module per tool group (+ registry.ts)
resources/ MCP resources + push notifications
util/ errors, format, result, resolve (name→id + fuzzy), serialize
schemas/ shared Zod fragmentsPublishing (maintainers)
npm version patch # or minor / major — bumps package.json + tags
npm publish # the `prepare` script builds dist/ first; publishes to npm
git push --follow-tagsThe published package ships only dist/, README.md, and LICENSE (see the files field).
Limitations
One bot per server process (single-session by design).
Evaluations require a seeded world. A live Minecraft world is not deterministic, so the evaluation set in
eval/targets a documented seeded fixture (seeeval/fixture.md); it cannot be verified against an arbitrary live server.cancel_fishis best-effort (Mineflayer exposes no first-class fishing abort).Microsoft auth's first run needs an interactive device code (surfaced as an
msa_codeevent); useprofilesFolderto cache it.
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/G0Osey99/awesome-mineflayer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server