AI-Assisted Development
This guide documents the MCC AI-assisted development workflow as a real working loop, not a patch generator running on guesses. The goal is to give the agent an environment it can drive on its own: build MCC, start a local server, send commands, inspect logs, and repeat. Once that loop is in place, iteration is faster and regressions are easier to catch.
If you are looking for the broader contributor entry point first, start with Contributing and then come back here for the agent workflow.
The practical goal is a closed loop:
Warning
If you develop on Windows, use WSL2. This workflow is built around Unix-style shells, tmux, python3, and shell helper functions. Do not try to run the full AI workflow from plain PowerShell or CMD.
Index
- What This Workflow Covers
- Setup
- How The Harness Works
- Repository Tools
- Skills
- Standard Development Loop
- Testing And Validation
- Version Adaptation Notes
- Example Workflows
What This Workflow Covers
This is the workflow for:
- local MCC development
- local offline server testing
- AI-assisted debugging
- bot authoring
- protocol and version adaptation work
- documentation work that should still follow the same disciplined loop
It is built around two layers:
- repo tools in
tools/, which do the actual work - AI skills in
.skills/, which tell the agent when and how to use those tools
Setup
You only do most of this once.
Windows: install WSL2 first
Open PowerShell as Administrator and run:
wsl --installIf WSL is already enabled and you specifically want Ubuntu, use:
wsl --install -d UbuntuIf the install stalls at 0.0%, use:
wsl --install --web-download -d UbuntuRestart if Windows asks for it, then open the Ubuntu shell and finish the Linux user setup there.
From this point on, do MCC development inside WSL. That includes cloning the repo, building, running servers, and using AI agent tooling.
Reference: Microsoft WSL installation guide
Linux and macOS: use Bash or Zsh
Bash and Zsh both work with MCC's helper scripts.
Check your current shell:
echo $SHELLNotes:
- Bash is the normal baseline on Linux.
- Zsh is the default interactive shell on modern macOS.
- The helper script
tools/mcc-env.shcan be sourced from either~/.bashrcor~/.zshrc.
Install Git
Ubuntu, Debian, and derivatives:
sudo apt update
sudo apt install gitArch Linux:
sudo pacman -S gitmacOS with Homebrew:
brew install gitVerify:
git --versionReference: Git downloads
Install .NET SDK 10
MCC currently builds on .NET 10. You need the SDK, not just the runtime.
Supported Ubuntu releases and Ubuntu-based distros with the correct feed enabled:
sudo apt-get update && sudo apt-get install -y dotnet-sdk-10.0Debian 12:
wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update && sudo apt-get install -y dotnet-sdk-10.0Debian 13:
wget https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update && sudo apt-get install -y dotnet-sdk-10.0Arch Linux:
sudo pacman -S dotnet-sdkmacOS with Homebrew:
brew install --cask dotnet-sdkVerify:
dotnet --versionReferences:
Install Java 21
The local server harness uses java directly, so Java 21 needs to be on your PATH.
Ubuntu and Ubuntu-based distros:
sudo apt update
sudo apt install openjdk-21-jdkDebian:
Package availability varies by Debian release. If openjdk-21-jdk is not available in your configured repositories, install a current JDK 21 build from your preferred vendor instead of forcing a stale package name.
Arch Linux:
sudo pacman -S jdk21-openjdkmacOS with Homebrew:
brew install openjdk@21
sudo ln -sfn "$(brew --prefix openjdk@21)/libexec/openjdk.jdk" /Library/Java/JavaVirtualMachines/openjdk-21.jdkHomebrew marks openjdk@21 as keg-only, which is why the symlink step matters.
Verify:
java -versionReferences:
Install Python 3
Python 3 is required for the RCON helper and the version-adaptation tools.
Ubuntu, Debian, and derivatives:
sudo apt update
sudo apt install python3Arch Linux:
sudo pacman -S pythonmacOS with Homebrew:
brew install python@3.14Homebrew currently provides Python 3 through the python@3.14 formula, and aliases it as python and python3.
Verify:
python3 --versionReferences:
Install tmux
The local Minecraft server runs in a tmux session so it can keep running while the agent builds and restarts MCC.
Ubuntu, Debian, and derivatives:
sudo apt update
sudo apt install tmuxArch Linux:
sudo pacman -S tmuxmacOS with Homebrew:
brew install tmuxVerify:
tmux -VClone the repo and initialize submodules
Clone with submodules in one step:
git clone https://github.com/MCCTeam/Minecraft-Console-Client.git --recursiveIf you already cloned it without submodules:
git submodule update --init --recursivePrepare a server version and decompiled source
From the repo root, use the decompiler helper to download the official server jar and create the decompiled source tree:
tools/decompile.sh --version 1.20.6That creates the paths used by the harness and the version-adaptation workflow:
MinecraftOfficial/downloads/1.20.6/server.jarMinecraftOfficial/1.20.6-decompiled/
If you are doing protocol work, this step is not optional.
Load the MCC shell helpers in Bash
Add this line to ~/.bashrc:
source "$HOME/Minecraft/Minecraft-Console-Client/tools/mcc-env.sh"Reload the shell:
source ~/.bashrcThis gives you the helper functions used by the workflow:
mc-startmc-stopmc-cmdmc-logmc-rconmcc-buildmcc-runmcc-cmdmcc-killmcc-reload
Load the MCC shell helpers in Zsh
Add this line to ~/.zshrc:
source "$HOME/Minecraft/Minecraft-Console-Client/tools/mcc-env.sh"Reload the shell:
source ~/.zshrcIf your clone lives somewhere else, update the path in the source line.
Verify the environment
Run these checks:
git --version
dotnet --version
java -version
python3 --version
tmux -VThen make sure the helper functions are loaded:
type mc-start
type mcc-build
type mcc-runHow The Harness Works
AI agents do not get a rich interactive terminal in the same way a human does. That is why this workflow uses a harness instead of relying on live keyboard input.
The moving parts are:
- a local Minecraft server running in
tmux mc-rconfor server-side commands such as/op,/give,/summon, or gamerule setup- MCC started with
MCC_FILE_INPUT=1 FileInputBot, which watchesmcc_input.txtand turns file lines into MCC commands or server chat- logs from MCC and the local server, which the agent can inspect between runs
The result is simple: the agent can change code, rebuild, start the app, inject commands, and read the result without waiting for a human to sit in the terminal.
Repository Tools
These are the repo-level tools that make the workflow practical.
| Path | Purpose |
|---|---|
tools/mcc-env.sh | Loads the shell helper functions used for the normal loop. |
tools/start-server.sh | Starts a local Minecraft server in a named tmux session with a FIFO for stdin. |
tools/mc-rcon.sh | Sends RCON commands to the local server using python3. |
tools/decompile.sh | Downloads MinecraftDecompiler.jar if needed, decompiles the requested Minecraft version, and fetches server.jar for server-side work. |
tools/diff_registries.py | Compares registries between two Minecraft versions to show which palettes need updates. |
tools/gen_item_palette.py | Generates item palette source from decompiled or reported registry data. |
tools/gen_block_palette.py | Generates block palette source from authoritative block reports. |
tools/gen_entity_palette.py | Generates entity palette source from registry reports. |
tools/gen_entity_metadata_palette.py | Generates entity metadata palette source from serializer registration order. |
tools/gen_command_argument_registry.py | Helps update modern declare-commands registry order. |
tools/gen_block_shapes.py | Downloads and compacts collision shape data for physics support. |
There is one more piece worth calling out:
MinecraftClient/ChatBots/FileInputBot.csis what makes file-driven command injection possible.- It is loaded when
MCC_FILE_INPUT=1is set. mcc-runintools/mcc-env.shalready sets that flag for you.
Skills
The tools above do the work. The skills in .skills/ tell the AI when to use them and what good output looks like.
| Skill | What it is for | Notes |
|---|---|---|
mcc-dev-workflow | The default build, run, debug, and local server loop. | This is the skill to use for most day-to-day MCC debugging. It assumes WSL, tmux, Java, and the local harness. |
mcc-integration-testing | Repeatable end-to-end testing against a local offline server. | This skill bundles its own scripts under .skills/mcc-integration-testing/scripts/. Those are skill resources, not top-level repo scripts. |
mcc-version-adaptation | Protocol and palette updates for new Minecraft versions. | Use this when routing, registries, metadata, palettes, or structured components change. |
mcc-chatbot-authoring | Authoring or repairing built-in bots and standalone /script bots. | This skill bundles references and templates under .skills/mcc-chatbot-authoring/. It defaults to standalone /script bots unless built-in wiring is requested. |
csharp-best-practices | C# 12 / .NET 10 coding guidance for this repo. | Use it whenever the change touches MCC runtime code. |
humanizer | Documentation and prose cleanup. | Use it for docs, guides, release notes, and anything that starts sounding machine-written. |
skill-creator | Creating or evolving skills themselves. | This is for improving the AI workflow, not for normal MCC feature work. |
The important distinction is this:
- repo tools are executable scripts and source files
- skills are instructions, references, templates, and workflow constraints for the AI
Some skills also carry their own bundled resources:
mcc-integration-testingbundles scripts and a command matrix referencemcc-chatbot-authoringbundles references and bot templatesskill-creatorbundles scripts, eval tooling, and reviewer assets
Standard Development Loop
This is the core loop you should expect an agent to follow.
1. Start the local server
mc-start 1.20.6Check the recent server output:
mc-log 1.20.62. Build MCC
mcc-build3. Run MCC with file input enabled
mcc-runThe raw form looks like this:
MCC_FILE_INPUT=1 dotnet run --project MinecraftClient -c Release -- CursorBot - localhost:255654. Set up server state through RCON
Examples:
mc-rcon "op CursorBot"
mc-rcon "gamerule sendCommandFeedback true"
mc-rcon "give CursorBot diamond_sword 1"
mc-rcon "summon minecraft:armor_stand ~ ~ ~"5. Drive MCC through mcc_input.txt
Examples:
mcc-cmd "inventory player list"
mcc-cmd "entity"
mcc-cmd "/gamemode creative"Behavior:
- lines starting with
/are sent as server commands or chat - lines without
/are treated as MCC internal commands first - if a line is not an MCC internal command, it falls back to normal chat sending
6. Inspect the result
Read the MCC output and the server log, decide what changed, and either keep iterating or stop.
7. Rebuild and restart fast
mcc-reloadThat is the usual tight loop for regression work.
Testing And Validation
There are two main testing styles in this workflow.
Manual validation
This is enough for smaller changes:
- join the local server
- grant operator privileges with
mc-rcon - run internal MCC commands through
mcc-cmd - trigger gameplay or server state changes through
mc-rcon - inspect logs for parsing errors, disconnects, or wrong output
Typical manual checks:
- inventory listing and creative item injection
- entity tracking after
summon - terrain and chunk handling after join
- chat and command flow
- explosion, particle, and sound events
Scripted full-spectrum testing
The mcc-integration-testing skill goes further. It bundles its own scripts under .skills/mcc-integration-testing/scripts/ and expects the shell helpers from ~/.zshrc.
Treat those scripts as skill-owned resources. Read the skill before running them directly, and do not assume they behave like top-level repo tools.
That skill is designed for repeatable offline validation of:
- chat
- slash commands
- MCC internal commands
- inventory handling
- entity handling
- particles and sounds
- TNT and explosion handling
Server settings that matter for AI-driven offline testing:
eula=trueonline-mode=falseenforce-secure-profile=falseenable-rcon=truercon.password=test123
If those are wrong, the loop gets noisy fast.
Version Adaptation Notes
Version work needs a stricter process than normal bug fixing.
The important rule is simple:
- for newer versions, especially
1.21.9+, use server data reports as the authority for items and blocks - use decompiled source for implementation details, field order, codecs, and serializer logic
- do not stop at a palette diff; finish with a build and a live server test
The usual order is:
tools/decompile.sh --version <ver>- generate server reports from
server.jar - run
tools/diff_registries.py - regenerate the palettes that actually changed
- update version routing and packet handling
- build MCC
- test against the real target version
That is exactly the sort of work mcc-version-adaptation is meant to guide.
Example Workflows
These are four common patterns this guide is meant to support.
Example 1: Debug a runtime regression
Use skills:
mcc-dev-workflowcsharp-best-practices
Typical loop:
mc-start 1.20.6
mcc-build
mcc-run
mc-rcon "op CursorBot"
mcc-cmd "inventory player list"
mcc-cmd "entity"Then inspect the MCC output, patch the code, and use:
mcc-reloadExample 2: Build or repair a bot
Use skills:
mcc-chatbot-authoringcsharp-best-practicesmcc-dev-workflow
Typical flow:
- Decide whether this should be a standalone
/scriptbot or a built-in bot. - Use the authoring skill's references and templates.
- Build MCC.
- Start a local server and join it.
- Test the bot behavior through live commands, chat, or event-driven actions.
- Make sure cleanup paths such as
OnUnload()are correct.
For standalone script work, the skill defaults to /script unless built-in repo wiring is explicitly needed.
Example 3: Adapt MCC to a new Minecraft version
Use skills:
mcc-version-adaptationmcc-dev-workflowmcc-integration-testing
Typical flow:
tools/decompile.sh --version 26.1Generate server reports:
cd /tmp
java -DbundlerMainClass=net.minecraft.data.Main \
-jar "$MCC_SERVERS/26.1/server.jar" \
--reports --output /tmp/mc_reportsRun the registry diff:
python3 tools/diff_registries.py 1.21.10 26.1 --registry /tmp/mc_reports/reports/registries.jsonThen regenerate the palettes that changed, update routing, build MCC, start a local server for the target version, and run live validation before calling the work done.
Example 4: Write or update documentation for the workflow itself
Use skills:
humanizerskill-creator, if you are changing the skills rather than just the docs
Typical flow:
- Re-read the relevant skill files and repo tools.
- Update the guide so the written process matches the real process.
- Keep the instructions concrete enough that another contributor can follow them without guessing.
- If the workflow itself changed, update the relevant skill too instead of leaving the docs ahead of the automation.
