UNDER THE
HOOD
How the server, transport, and bridge fit together — for anyone extending, self-hosting, or debugging OreMind. Derived directly from the source repo.
HOW A REQUEST FLOWS
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. Fleet coordination is process-local: it coordinates known OreMind reservations without pretending to lock humans, other processes, or Minecraft physics.
THE PATH TO STABLE v3.2
v3.1 is the current supported runtime and its fleet contract is covered by unit, contract, and live-PaperMC checks. The remaining milestone is operational validation, not a speculative feature promise: run a real multiplayer playtest, validate the authenticated LAN path from a second machine, then feed those observations back into fleet coordination.
The upstream roadmap and GitHub issues are the source of truth for status.
ROUTES ON :3100
If MCP_AUTH_TOKEN is set, MCP and telemetry fail closed — send it as Authorization: Bearer <token>. Legacy query tokens are limited to GET telemetry compatibility and are rejected on /dashboard and POST /mcp. The dashboard instead uses POST /api/session. Unset, the process and Compose bind to loopback by default and reject non-loopback Host headers. Browser origins must be loopback or explicitly allowlisted. Every request body is capped at 1 MiB.
WHAT'S IN THE REPO
BOT CORE + TRANSPORT
CHAT BRIDGE
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 consumes the bearer-authenticated /api/events stream by default, resumes with Last-Event-ID, and falls back to /api/status polling only after a disconnect or reset.
Discord posts can't ping @everyone/@here/roles. Telegram text is HTML-escaped. TLS verification is on for both.
RUNNING THE TEST SUITE
git clone https://github.com/christopherdeck/oremind.git cd oremind npm install npm run lint # node --check on every source JS file npm test # ~180 tests; environment-specific checks may skip
CI runs the same lint + test matrix on Node 20 and 22, plus shellcheck + bash -n on scripts/*.sh. Coverage includes queue bounds and cancellation, readiness and telemetry contracts, dashboard sessions, origin/host protections, chat-bridge relay behavior, reconnects, documentation consistency, fleet reservations, waypoint conflicts, movement corridors, and bot lifecycle. A small number of environment-specific installer scenarios may skip when their host conditions are unavailable.
LOGS & ROLLBACK
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 archived v2 Bedrock core is no longer installed or runnable by flipping an env var — the supported v3 runtime refuses to start with MCP_BOT_IMPL=bedrock. Real rollback now means deploying an older release of this repo from before the v3 pivot, not reconfiguring your current install; treat it as a last resort, reinstalling that release's own dependencies rather than switching a variable in place.
For fleet durability, set MCP_FLEET_STATE_FILE to a service-owned path. OreMind writes a schema-versioned metadata snapshot through a temporary file and atomic rename; active assignments are intentionally restored as interrupted so uncertain Minecraft mutations are not replayed after restart.
scripts/deploy-java.sh only overwrites the main unit file, never drop-ins — re-running it to update in place is safe.