How the server, transport, and bridge fit together — for anyone extending, self-hosting, or debugging OreMind. Derived directly from the source repo.
v3.x runs bots on Mineflayer + mineflayer-pathfinder against a real Java-edition server — full physics, A* pathfinding, containers, and crafting. Bedrock and Java humans play in the same world via Geyser/Floodgate; the bots join as ordinary Java clients underneath.
If MCP_AUTH_TOKEN is set it gates every route above, fail-closed — send it as Authorization: Bearer <token>, or as ?token=<token> for the browser dashboard.
A bidirectional relay between Minecraft chat and Discord/Telegram. Inbound: POST a message to the bridge's /relay route and it calls minecraft_chat as its own bot username. Outbound: the bridge polls /api/status and forwards new lines, seeding its dedup set on first poll so it never floods the channel with backlog.
Discord posts can't ping @everyone/@here/roles. Telegram text is HTML-escaped. TLS verification is on for both.
git clone https://github.com/christopherdeck/minecraft-mcp.git cd minecraft-mcp npm install npm run lint # node --check on every source JS file npm test # node:test suite (~30 tests, runs in a couple seconds)
CI runs the same lint + test matrix on Node 20 and 22, plus shellcheck + bash -n on scripts/*.sh. Coverage: task-queue step order and status labels, /health & /api/status payload shape, chat-bridge dedup and echo-loop protection, and bot lifecycle (pre-spawn error handling, reconnect backoff). Tests use an injectable step runner and fake EventEmitter bots, so the whole suite runs without a live Minecraft server.
sudo journalctl -u paper-server -f # the Java server sudo journalctl -u minecraft-bot-mcp -f # the MCP + bot core sudo journalctl -u minecraft-chat-bridge -f # the bridge (if installed)
The v2 bedrock-protocol core is preserved for emergencies. Roll back without touching source: bring the Bedrock server up, stop Paper, then drop in an env override —
sudo systemctl edit minecraft-bot-mcp # paste: [Service] Environment=MCP_BOT_IMPL=bedrock Environment=MINECRAFT_HOST=127.0.0.1 Environment=MINECRAFT_PORT=19132 sudo systemctl daemon-reload && sudo systemctl restart minecraft-bot-mcp # /health now reports impl: "bedrock" per bot. Roll forward with: sudo systemctl revert minecraft-bot-mcp && sudo systemctl restart minecraft-bot-mcp
scripts/deploy-java.sh only overwrites the main unit file, never drop-ins — re-running it on a rolled-back system is safe.