{
  "markdown": "# awesome-mineflayer-mcp\n\n[![npm version](https://img.shields.io/npm/v/awesome-mineflayer-mcp.svg)](https://www.npmjs.com/package/awesome-mineflayer-mcp)\n[![node](https://img.shields.io/node/v/awesome-mineflayer-mcp.svg)](https://nodejs.org)\n[![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n\nA production-ready [Model Context Protocol](https://modelcontextprotocol.io) server that gives an LLM agent **standalone-equivalent control** over a [Mineflayer](https://github.com/PrismarineJS/mineflayer) Minecraft bot — movement, mining, crafting, inventory, combat, containers, chat, and much more — exposed as **123 strongly-typed tools** across 26 groups, plus **guided prompts**, **vision** (real first-person screenshots + schematic maps), persistent **waypoints**, build/dig **macros**, and dual (poll + push) event streaming, with full bot lifecycle management. Tool results carry both human-readable text and machine-readable `structuredContent`.\n\nBacked 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`.\n\n---\n\n## Requirements\n\n- **Node.js ≥ 20** (developed on 22.16)\n- A Minecraft server to connect to (Java Edition). The bot auto-detects the server version. Don't have one? See [Get a server to test against](#get-a-minecraft-server-to-test-against).\n- For online-mode servers: a Microsoft account (`auth: \"microsoft\"`).\n\n### Supported versions\n\n| | Supported |\n|---|---|\n| Minecraft (Java) | the range supported by the bundled `mineflayer` 4.37 / `minecraft-data` (roughly **1.8 → 1.21.x**); version is auto-detected, or pass `version` explicitly |\n| Node.js | **20, 22** (LTS) |\n\nA few tools only work on newer versions/features (e.g. `elytra_fly`, chat signing). On a version mismatch the bot is kicked with an `outdated client/server` message — pass an explicit `version`.\n\n## Installation\n\nRun it on demand with **npx** (no install needed):\n\n```bash\nnpx awesome-mineflayer-mcp\n```\n\n…or install it globally:\n\n```bash\nnpm install -g awesome-mineflayer-mcp\nawesome-mineflayer-mcp\n```\n\nThe server speaks MCP over **stdio**, so it is normally launched by your MCP client rather than run by hand.\n\n## Use with an MCP client\n\nAdd it to your client's MCP server configuration. The recommended form uses `npx` so you always get the latest published build:\n\n**Claude Desktop** (`claude_desktop_config.json`), **Claude Code**, **Cursor**, or any stdio MCP client:\n\n```json\n{\n  \"mcpServers\": {\n    \"mineflayer\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"awesome-mineflayer-mcp\"],\n      \"env\": {\n        \"MCP_DISABLE_GROUPS\": \"\"\n      }\n    }\n  }\n}\n```\n\nIf you installed it globally, use `\"command\": \"awesome-mineflayer-mcp\"` with `\"args\": []` instead.\n\n## Get a Minecraft server to test against\n\nIf you don't already have a server, spin up a throwaway **offline-mode** one with Docker (no account needed):\n\n```bash\n# from a clone of this repo:\ndocker compose up -d        # offline 1.20.4 server on localhost:25565\ndocker compose logs -f      # wait for \"Done (…)! For help, type \"help\"\"\n```\n\n…or a one-liner without the repo:\n\n```bash\ndocker run -d --name mc -p 25565:25565 -e EULA=TRUE -e ONLINE_MODE=FALSE -e VERSION=1.20.4 itzg/minecraft-server\n```\n\nThen connect: `connect_bot { host: \"localhost\", username: \"DevBot\", auth: \"offline\" }`. Tear it down with `docker compose down -v` (or `docker rm -f mc`). Don't expose an offline-mode server to the public internet.\n\n## Autonomous operation (default account)\n\nFor hands-off use, configure a **default account** so the bot connects automatically on startup — no `connect_bot` call required. Run the interactive setup:\n\n```bash\nnpx awesome-mineflayer-mcp setup\n```\n\nIt asks for the server host/port, an **offline** or **Microsoft** account, and whether to auto-connect on startup, then writes `~/.awesome-mineflayer-mcp/config.json` (**no password is stored**). For a Microsoft account it runs the device-code sign-in **once** and caches the token under `profilesFolder`, so later startups need no prompt.\n\nOn startup the server auto-connects the configured account (verify with `get_connection_status`). The agent can also call **`connect_default`** to (re)connect it or **`get_default_account`** to inspect it.\n\n### Configure without the wizard (env vars)\n\nYou can set the default account entirely from your MCP client config — handy for headless deploys. Environment variables override the config file:\n\n```json\n{\n  \"mcpServers\": {\n    \"mineflayer\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"awesome-mineflayer-mcp\"],\n      \"env\": {\n        \"MCP_DEFAULT_HOST\": \"play.example.net\",\n        \"MCP_DEFAULT_USERNAME\": \"MyBot\",\n        \"MCP_DEFAULT_AUTH\": \"offline\",\n        \"MCP_AUTO_CONNECT\": \"true\"\n      }\n    }\n  }\n}\n```\n\nFor Microsoft auth in a headless setup, run `setup` once locally first (or point `MCP_PROFILES_FOLDER` at a directory with a pre-cached token).\n\n## Configuration (environment variables)\n\n| Variable | Default | Purpose |\n|---|---|---|\n| `MCP_DISABLE_GROUPS` | _(none)_ | Comma-separated tool-group keys to disable (see catalog). Trim the surface for clients that struggle with a large tool list. |\n| `MCP_CHARACTER_LIMIT` | `25000` | Max characters returned by any single tool call (truncated with a marker). |\n| `MCP_EVENT_BUFFER` | `1000` | Size of the in-memory event ring buffer. |\n| `MCP_THROTTLE_MS` | `250` | Minimum spacing between pushed resource-update / log notifications. |\n| `MCP_PROXIMITY_RADIUS` | `32` | Radius (blocks) for proximity-filtered events (entity spawns, sounds). |\n| `MCP_ACTION_TIMEOUT_MS` | `60000` | Default timeout for long actions when the caller omits one. |\n| `MCP_DEFAULT_HOST` / `MCP_DEFAULT_PORT` | — | Default server to auto-connect on startup. |\n| `MCP_DEFAULT_USERNAME` | — | Default account name (offline) or email (microsoft). |\n| `MCP_DEFAULT_AUTH` | `offline` | Default auth mode: `offline` or `microsoft`. |\n| `MCP_DEFAULT_VERSION` | auto | Force a protocol version for the default account. |\n| `MCP_DEFAULT_AUTO_RECONNECT` | `true` | Auto-reconnect the default account on disconnect. |\n| `MCP_AUTO_CONNECT` | `true`† | Auto-connect the default on startup († when a default is configured). |\n| `MCP_PROFILES_FOLDER` | `<home>/profiles` | Microsoft auth token-cache directory. |\n| `AWESOME_MINEFLAYER_MCP_HOME` | `~/.awesome-mineflayer-mcp` | Config + token-cache directory. |\n| `MCP_READ_ONLY` | `false` | Observe-only mode: register only read-only tools (+ lifecycle). See [Safety](#safety--guardrails). |\n| `MCP_COMMAND_DENY` | _(admin verbs)_ | Slash commands `run_command` blocks. Setting it **replaces** the default; set empty to allow all. |\n| `MCP_COMMAND_ALLOW` | _(none)_ | If set, a strict allow-list: only these commands run (deny list ignored). |\n| `MCP_ALLOWED_HOSTS` | _(any)_ | Comma-separated allow-list of hosts the bot may connect to. |\n| `MCP_CHAT_MIN_INTERVAL_MS` | `0` | Minimum spacing between outbound chat/whisper/command sends (anti-spam). |\n| `MCP_ENABLE_RAW` | `false` | Enable the advanced/unsafe `raw` protocol tool group (direct packet send/subscribe). |\n| `MCP_SCREENSHOT_WIDTH` / `_HEIGHT` | `800` / `450` | Default `get_screenshot` image size (px). |\n| `MCP_SCREENSHOT_LOAD_MS` | `2500` | How long to let the world render before capturing a screenshot. |\n| `MCP_VIEW_DISTANCE` | `4` | Chunk render distance for screenshots. |\n| `MCP_SCREENSHOT_BROWSER_CHANNEL` | _(auto)_ | Browser channel for screenshots (`chrome`, `msedge`, `chromium`). |\n| `MCP_SCREENSHOT_EXECUTABLE_PATH` | _(none)_ | Explicit browser executable path for screenshots (overrides channel). |\n\nExample — disable rarely-used groups:\n\n```\nMCP_DISABLE_GROUPS=creative,villager,enchanting,settings\n```\n\n## Quick start (tool flow)\n\n1. **`connect_bot`** `{ host, username, auth }` — connect (resolves once the bot spawns). *Skip this if you configured a [default account](#autonomous-operation-default-account) — the bot auto-connects on startup; just check `get_connection_status`.*\n2. Act: **`goto`**, **`dig`**, **`collect_block`**, **`craft_item`**, **`pvp_attack`**, **`chat`**, …\n3. Observe: call **`get_observation`** for a one-shot snapshot (vitals, position, inventory, nearby entities, new events) — pass the returned `events.nextSince` back each tick. Or compose **`get_state`** / **`get_inventory`** / **`list_entities`** / **`get_events`**, or subscribe to the `bot://*` resources.\n4. **`disconnect_bot`** when done.\n\nNew to the server? Use the **`getting_started`** prompt (see [Prompts](#prompts)) for an in-context walkthrough.\n\nBlock / item / entity arguments accept **human names** (`\"iron_ore\"`, `\"diamond_pickaxe\"`, `\"zombie\"`); unknown names return fuzzy suggestions.\n\n## Authentication\n\n- `auth: \"offline\"` (default) — offline-mode servers; `username` is the in-game name.\n- `auth: \"microsoft\"` — `username` is the account email. A device-code prompt is emitted as an `msa_code` event / log notification. Set **`profilesFolder`** to cache the token so subsequent runs skip the prompt, or pass a cached `accessToken`. **Tip:** run `npx awesome-mineflayer-mcp setup` once to do the device-code sign-in and cache the token, then the server connects autonomously (see [Autonomous operation](#autonomous-operation-default-account)).\n\n---\n\n## Tool catalog (123 tools, 26 groups)\n\n> Full generated reference (every tool, prompt, resource): [`docs/TOOLS.md`](docs/TOOLS.md).\n\nGroup keys (for `MCP_DISABLE_GROUPS`) are shown in brackets.\n\n- **Lifecycle** `[lifecycle]` — `connect_bot`, `connect_default`, `disconnect_bot`, `reconnect_bot`, `respawn`, `get_connection_status`, `get_default_account`\n- **State & inspection** `[state]` (read-only) — `get_observation` (one-call snapshot for an agent's observe loop), `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_plugins`\n- **World queries** `[world]` (read-only) — `get_block_at`, `find_blocks`, `get_cursor_target`, `get_blocks_in_region`, `wait_for_chunks_to_load`\n- **Movement & 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_enabled`\n- **Look** `[look]` — `look_at`, `look`, `look_at_entity`\n- **Digging & building** `[digging]` — `dig`, `place_block`, `activate_block`, `activate_entity`, `swing_arm`\n- **Combat** `[combat]` — `pvp_attack`, `attack_entity`, `pvp_stop`, `pvp_configure`\n- **Inventory & items** `[inventory]` — `equip_item`, `unequip_item`, `toss_item`, `set_quickbar_slot`, `consume`, `activate_item`, `click_window`, `move_slot_item`, `transfer_items`\n- **Containers** `[containers]` — `open_container`, `read_open_container`, `container_deposit`, `container_withdraw`, `close_window`\n- **Furnace / smelting** `[furnace]` — `open_furnace`, `furnace_action`, `furnace_status`, `smelt_item`\n- **Enchanting & anvil** `[enchanting]` — `enchant_item`, `anvil_combine`\n- **Villager trading** `[villager]` — `open_villager`, `trade_with_villager`\n- **Crafting** `[crafting]` — `list_recipes`, `craft_item`\n- **Block gathering** `[gathering]` — `collect_block`, `cancel_collect`, `set_collect_config`\n- **Tool auto-select** `[tool]` — `equip_tool_for_block`, `set_tool_chest_locations`, `get_best_tool`\n- **Survival automation** `[survival]` — `autoeat_set_enabled`, `autoeat_configure`, `autoeat_eat`, `autoeat_cancel`, `autoeat_preview`, `armor_equip_all`\n- **Beds & sleep** `[beds]` — `sleep`, `wake`\n- **Vehicles** `[vehicles]` — `mount_entity`, `dismount`, `steer_vehicle`\n- **Fishing, books & signs** `[fishing]` — `fish`, `cancel_fish`, `write_book`, `update_sign`\n- **Chat & communication** `[chat]` — `chat`, `whisper`, `run_command`, `tab_complete`, `register_chat_pattern`, `remove_chat_pattern`, `wait_for_message`\n- **Settings** `[settings]` — `set_settings`\n- **Creative mode** `[creative]` — `creative_set_inventory_slot`, `creative_clear_inventory`, `creative_fly`, `creative_fly_to`\n- **Vision** `[vision]` — `get_screenshot` (real first-person textured game render), `render_map` (dependency-free schematic map) — see [Vision](#vision--let-the-agent-see)\n- **Waypoints** `[waypoints]` — `set_waypoint`, `list_waypoints`, `delete_waypoint`, `goto_waypoint` (persisted across restarts)\n- **Build & dig macros** `[build]` — `clear_region`, `dig_tunnel`, `dig_staircase`, `fill_region` (cancellable, multi-block)\n- **Events & telemetry** `[events]` — `get_events`, `cancel_task`\n- **Raw protocol** `[raw]` — `send_packet`, `subscribe_packet`, `list_packet_subscriptions` (advanced/unsafe; **off unless `MCP_ENABLE_RAW=true`**)\n\nLong-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`.\n\n## Prompts\n\nThe server exposes **guided, parameterized workflows** as MCP prompts — clients surface them as slash-commands / templates. They teach an agent how to chain the right tools for a goal:\n\n- **`getting_started`** — orientation: connect → observe → act → recover.\n- **`gather_wood`** `{ count?, logType? }` — find trees and collect logs.\n- **`mine_to_diamonds`** `{ targetY? }` — descend safely and branch-mine.\n- **`build_shelter`** `{ material? }` — enclose a safe space before nightfall.\n- **`find_and_smelt`** `{ input, fuel? }` — mine/gather an input and smelt it.\n- **`follow_and_defend`** `{ player }` — follow a player and fight off hostiles.\n\nBlock/item arguments offer name autocompletion drawn from the connected world.\n\n## Vision — let the agent *see*\n\nTwo complementary tools return PNG images as MCP image content, so a vision-capable model (and a human) can look at the world instead of reconstructing it from JSON.\n\n### `get_screenshot` — a real game render\n\nCaptures an **actual textured Minecraft render** of what the bot sees — first-person from its eyes (default) or a third-person orbit — exactly like an in-game screenshot. Under the hood, [`prismarine-viewer`](https://github.com/PrismarineJS/prismarine-viewer) renders the real world (client-side WebGL) and a headless browser screenshots it. Args: `width`, `height`, `firstPerson`, `waitMs`, `viewDistance`.\n\n**Setup (one-time).** The renderer deps ship as **optional** packages (installed by default with `npm install`). All you also need is a browser:\n\n- Already have **Google Chrome or Microsoft Edge**? Nothing to do — it's used automatically.\n- Otherwise run **`npx playwright install chromium`** once.\n- Headless servers: install Chrome/Chromium, or set `MCP_SCREENSHOT_EXECUTABLE_PATH` / `MCP_SCREENSHOT_BROWSER_CHANNEL`.\n\nIf the deps/browser aren't available, `get_screenshot` returns a clear `UNSUPPORTED` error with these steps — the rest of the server is unaffected. The renderer packages are pure-JS (no native build), but if you want the leanest possible install and don't need screenshots, use `npm install --omit=optional`.\n\n### `render_map` — a dependency-free schematic\n\nA lightweight colored top-down map (or `mode:\"slice\"` cross-section) drawn from block data with a **built-in PNG encoder** (no extra deps at all). Good as a minimap/overview or when the screenshot extras aren't installed. North (−Z) is up; bot = white dot with a facing tick; players cyan, hostiles red, passives yellow, items grey; includes a block legend.\n\n## Safety & guardrails\n\nSensible defaults that matter once an agent drives the bot autonomously (especially with a [default account](#autonomous-operation-default-account)):\n\n- **Command policy.** `run_command` blocks server-administration verbs by default (`op`, `deop`, `ban`, `kick`, `stop`, `whitelist`, and the `execute`/`function`/`schedule` wrappers, …). Ordinary gameplay commands (`/tp`, `/time`, `/give`, …) are allowed. Override with `MCP_COMMAND_DENY` (replaces the default; empty = allow all) or lock down with `MCP_COMMAND_ALLOW` (strict allow-list). This is **best-effort defense-in-depth**, not a hard boundary — it gates on the first command verb, and a bot with operator permissions could still find a way around it. For untrusted/autonomous deployments, prefer `MCP_COMMAND_ALLOW`, `MCP_READ_ONLY`, and not granting the bot's account operator rights. **Note:** incoming player chat is delivered to your agent as events — treat it as untrusted input.\n- **Host allow-list.** `MCP_ALLOWED_HOSTS` restricts which servers `connect_bot` / `reconnect_bot` may join, so an agent can't repoint the bot (and its cached token) at an arbitrary address.\n- **Read-only mode.** `MCP_READ_ONLY=true` registers only observation tools (plus connection management) — look-but-don't-touch.\n- **Rate limiting.** `MCP_CHAT_MIN_INTERVAL_MS` spaces outbound chat/commands to avoid spam-kicks.\n- **No secret leakage.** Passwords / access tokens are never stored on disk and are redacted from connection-error messages.\n\n## Resources\n\nSubscribe-capable JSON resources for clients that support resource subscriptions:\n\n- `bot://state` — live self snapshot (position, vitals, gamemode, time, weather, held item, control states)\n- `bot://inventory` — items, armor, off-hand, held slot\n- `world://entities` — up to 50 nearest tracked entities\n- `world://players` — server roster\n- `bot://events` — tail of recent events\n- `bot://waypoints` — saved named waypoints\n\nPlus parameterized **resource templates** for on-demand lookups: `block://{x}/{y}/{z}` and `entity://{id}`.\n\n## Events\n\nGame events are delivered two ways:\n\n- **Pull:** `get_events({ since, types, limit })` drains a ring buffer; pass the returned `nextSince` to read only new events. `dropped: true` signals the buffer overflowed since your `since`.\n- **Push:** subscribed resources emit throttled `notifications/resources/updated`; notable lines (chat, death, kick, error, msa_code) are forwarded via `sendLoggingMessage`.\n\nHigh-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.\n\n## Development (from source)\n\n```bash\ngit clone https://github.com/G0Osey99/awesome-mineflayer-mcp.git\ncd awesome-mineflayer-mcp\nnpm install\nnpm run build       # tsc -> dist/\nnpm run typecheck   # tsc --noEmit\nnpm test            # vitest (unit tests for the pure logic)\nnpm run dev         # tsx src/index.ts (run from source, no build step)\n```\n\nArchitecture and the full design rationale: [`docs/superpowers/specs/2026-06-28-mineflayer-mcp-server-design.md`](docs/superpowers/specs/2026-06-28-mineflayer-mcp-server-design.md).\n\n```\nsrc/\n  index.ts        entry (stdio transport, graceful shutdown, crash guards)\n  server.ts       builds the McpServer, registers tool groups + resources + prompts\n  config.ts       env + constants + safety policy (groups, read-only, command/host allow-lists)\n  bot/            manager (lifecycle FSM), plugins, events, wire-events, state, windows, action-locks\n  tools/          one module per tool group (+ registry.ts)\n  prompts/        guided multi-tool workflows\n  resources/      MCP resources + push notifications\n  util/           errors, format, result, resolve (name→id + fuzzy), serialize, async, redact\n  schemas/        shared Zod fragments\n```\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for how to add a tool/group and run a local test server.\n\n## Publishing (maintainers)\n\nPushing a `v*` tag publishes to **npm**, **GitHub Container Registry** (Docker), the **MCP Registry**, and updates **Smithery** — all via [`.github/workflows/ci.yml`](.github/workflows/ci.yml). `npm version` keeps `package.json`, `src/config.ts`, and `server.json` in sync.\n\n```bash\nnpm version minor        # bumps + syncs versions, commits, and tags\ngit push --follow-tags   # triggers the release jobs\n```\n\nFull one-time setup and the step-by-step release checklist are in [`RELEASE.md`](RELEASE.md). The published npm package ships only `dist/`, `README.md`, `LICENSE`, and `NOTICE` (see the `files` field).\n\n## Troubleshooting\n\nConnection failures now return a **specific error code and suggestions** (not an opaque `INTERNAL`). Common cases:\n\n| Symptom / error | Likely cause | Fix |\n|---|---|---|\n| `CONNECT_REFUSED` (ECONNREFUSED) | Wrong host/port, or server not running | Check `host`/`port`; confirm the server has finished starting (default port 25565). |\n| `CONNECT_REFUSED` (ENOTFOUND) | Hostname doesn't resolve | Double-check the server address. |\n| `ONLINE_MODE` / \"unverified username\" | Server is online-mode; bot used offline auth | Use `auth: \"microsoft\"`, or set `online-mode=false` on the server. |\n| `VERSION_MISMATCH` / \"outdated client/server\" | Auto-detected version is wrong | Pass an explicit `version` (e.g. `\"1.20.4\"`). |\n| Chat rejected / \"secure profile\" | Server requires signed chat | Connect with `disableChatSigning: true`. |\n| `AUTH_FAILED` | Stale/invalid Microsoft token | Re-run `npx awesome-mineflayer-mcp setup`, or clear the `profilesFolder` cache and sign in again. |\n| `FORBIDDEN` on `run_command` | Command blocked by policy | See [Safety](#safety--guardrails) — adjust `MCP_COMMAND_DENY` / `MCP_COMMAND_ALLOW`. |\n| `FORBIDDEN` on `connect_bot` | Host not in allow-list | Add it to `MCP_ALLOWED_HOSTS` (or unset to allow any). |\n| `NO_PATH` | Pathfinder can't reach the goal | Move closer, clear obstacles, or relax `configure_movements`. |\n| Microsoft device-code prompt | First-time MSA sign-in | Visit the URL from the `msa_code` event; set `profilesFolder` to cache it. |\n\nFirst-run sign-in for Microsoft auth is interactive once — run `npx awesome-mineflayer-mcp setup` to do it and cache the token.\n\n## Docker\n\nA `Dockerfile` is included for headless/autonomous deployments (configure a default account via `MCP_DEFAULT_*`):\n\n```bash\ndocker build -t awesome-mineflayer-mcp .\n```\n\nMount a volume at `/root/.awesome-mineflayer-mcp` to persist the config and Microsoft token cache. (The server speaks MCP over stdio, so a container is most useful for autonomous default-account runs rather than for a client to spawn.)\n\n## Limitations\n\n- **One bot per server process** (single-session by design).\n- **Evaluations require a seeded world.** A live Minecraft world is not deterministic, so the evaluation set in `eval/` targets a documented seeded fixture (see `eval/fixture.md`); it cannot be verified against an arbitrary live server.\n- `cancel_fish` is best-effort (Mineflayer exposes no first-class fishing abort).\n- Microsoft auth's first run needs an interactive device code (surfaced as an `msa_code` event); use `profilesFolder` to cache it.\n\n## License\n\nMIT\n",
  "bytes": 23025,
  "sha": "23cb4cc84ff3179d84c839e7942087a61ac17f4d5030d40a8fbe1886995dca4d",
  "repo_slug": "g0osey99/awesome-mineflayer-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_g0osey99_awesome_mineflayer_mc_307a54e7/readme"
}