Skip to content

1.20.6 + 1.21 + 1.21.1 - Work in progress#2820

Draft
milutinke wants to merge 16 commits intoMCCTeam:pre-releasefrom
milutinke:1.20.6
Draft

1.20.6 + 1.21 + 1.21.1 - Work in progress#2820
milutinke wants to merge 16 commits intoMCCTeam:pre-releasefrom
milutinke:1.20.6

Conversation

@milutinke
Copy link
Member

@milutinke milutinke commented Dec 4, 2024

Heavy work in progress.

The current state:
✅ 1.20.6
✅ 1.21 (in works)
❌ Full Inventory support (Work in progress)

@milutinke milutinke mentioned this pull request Dec 6, 2024
3 tasks
@milutinke milutinke marked this pull request as draft December 6, 2024 17:17
@milutinke milutinke changed the title 1.20.6 / 1.21 - Work in progress 1.20.6 + 1.21 + 1.21.1 - Work in progress Dec 22, 2024
ghost
ghost previously approved these changes Dec 23, 2024
@milutinke milutinke dismissed ghost ’s stale review December 25, 2024 12:40

How even you can do this?

@andy01745
Copy link

Is their an ETA on this ?

@milutinke
Copy link
Member Author

milutinke commented Mar 26, 2025

Is their an ETA on this ?

Nope, I most likely won't be able to finish this any time soon, I work full time while attending an university.
I hope other Maintainers or someone else can take over and finish the inventory part.
I could merge it but without the inventory part (I'd disable it).

@jpcinqmars
Copy link

Really appreciate all the work you have done on the MCC, I have used it for almost a year now. Is there any chance you could merge it for 1.21+ and disable inventory as you mentioned?

@zerofelero
Copy link

@milutinke , is it possible to get 1.21.x (preferrably 1.21.7) support by just disable inventory? I second @jpcinqmars request, as something is better than nothing.

i hope all is well!

@marcopaggioro
Copy link

Is there any chance this PR will be completed?

@Xantam-13
Copy link

Is their an ETA on this ?

Nope, I most likely won't be able to finish this any time soon, I work full time while attending an university. I hope other Maintainers or someone else can take over and finish the inventory part. I could merge it but without the inventory part (I'd disable it).

Heeeey, any news on this buddy? Dying for 1.21.4 :(

@breadbyte
Copy link
Member

@milutinke can you instead merge this on a new branch just so we can consolidate all changes made from both our ends?

I already have a repo that merges both our changes so I can continue working on it, although I want to know if you still want to merge this PR on your end.

@milutinke milutinke changed the base branch from master to pre-release December 4, 2025 23:28
@milutinke
Copy link
Member Author

milutinke commented Dec 4, 2025

@milutinke can you instead merge this on a new branch just so we can consolidate all changes made from both our ends?

I already have a repo that merges both our changes so I can continue working on it, although I want to know if you still want to merge this PR on your end.

Sure, I've created a pre-release branch and assigned it as the target branch for this PR.
Let me check all the changes in the following days to see if everything works.
If I'm not mistaken the inventory crashes on click, I need to figure out how to fix it, the issue is that it has been so long since I've worked on this and the wiki.vg has been merged into Minecraft Wiki, but some specific pages for older versions got lost, so I'll have to figure out what is the issue.
Could use some help with it if you have some time.

I've finished my uni year, so I should have more time to work on the MCC again.

@breadbyte
Copy link
Member

Do you have a rough outline on how you implement new versions (new components, new ents/blocks etc.) so we can get 1.21.2+ up and running? I think archive.org has wiki.vg archived, so we can still use that for reference.

To be honest with you, I'm still racking my brain on how to implement terminal support that doesn't break all the time 😵‍💫 (couldn't find libraries that can handle input and output at the same time, not to mention popover support for autocomplete)

Was thinking of separating the entire application from the ui layer (mcc will become a library, essentially), and we just have an interface to stdin/stdout. This will make autocomplete a little harder to implement, but will make our life easier in the long run (this will also improve support for docker/ptero since it becomes a first-class citizen essentially)

I've also been thinking on how to better resolve issues, maybe we can add a packet comparison with vanilla (matches against expected response) or by unit testing? Would like to have more input on this.

@breadbyte
Copy link
Member

breadbyte commented Dec 8, 2025

For the inventory crash, I've used SniffCraft for 1.21 to check the root cause.

Seems like we're crafting a broken packet as per SniffCraft:

Client --> Server: PARSING EXCEPTION for message Container Click(: 14)While reading carried_item (6th field) in ServerboundContainerClickPacket
While reading components (2th field) in Slot
Not enough input in ReadData<VarType>

A container click packet looks like this on a left click:

    "button_num": 0,
    "carried_item": {
        "components": {
            "map": []
        },
        "item_count": 1,
        "item_id": 843
    },
    "changed_slots": {
        "22": {
            "item_count": 0
        }
    },
    "click_type": 0,
    "container_id": 0,
    "slot_num": 22,
    "state_id": 1
}

and after another left click to another slot:

{
    "button_num": 0,
    "carried_item": {
        "item_count": 0
    },
    "changed_slots": {
        "22": {
            "components": {
                "map": []
            },
            "item_count": 1,
            "item_id": 843
        }
    },
    "click_type": 0,
    "container_id": 0,
    "slot_num": 22,
    "state_id": 1
}

This moves the item from slot 22 to slot 22 (clicked twice on the same slot).

This is certainly useful information, but it's something that I don't know how to fix myself as I don't know how the system is implemented. I vaguely remember you having notes on implementation somewhere but I couldn't find it.

SniffCraft also revealed more information for us, as we seem to be sending way too many MovePlayerPosition when idle, to the point where it seems like it's spamming the server (we seem to send it per tick, as opposed to the vanilla client that sends it at a rate of about 1 per second when idle.)

There are also palette issues on 1.21, as a Netherite Sword is being incorrectly identified as a Netherite Shovel.

I've been thinking about this for a while, but how about we drop the entire item id system in exchange for namespaces? Compatibility layers can be added for converting pre-flattening ids. Older versions adapt to the newer versions, while the latest version is always the ground truth for data. This would mean a little more work as we'll have to coerce all the old stuff into modern equivalents, but would save us a lot of headaches with compatibility, since we won't need to deal with palettes anymore.

@milutinke
Copy link
Member Author

milutinke commented Dec 25, 2025

Do you have a rough outline on how you implement new versions (new components, new ents/blocks etc.) so we can get 1.21.2+ up and running? I think archive.org has wiki.vg archived, so we can still use that for reference.

To be honest with you, I'm still racking my brain on how to implement terminal support that doesn't break all the time 😵‍💫 (couldn't find libraries that can handle input and output at the same time, not to mention popover support for autocomplete)

Was thinking of separating the entire application from the ui layer (mcc will become a library, essentially), and we just have an interface to stdin/stdout. This will make autocomplete a little harder to implement, but will make our life easier in the long run (this will also improve support for docker/ptero since it becomes a first-class citizen essentially)

I've also been thinking on how to better resolve issues, maybe we can add a packet comparison with vanilla (matches against expected response) or by unit testing? Would like to have more input on this.

Hello, sorry for the late reply, I had some health issues.

The rough outline would be:

  1. Check the Wiki changes for the newest version, and diff them with the previous protocol page, I note all the changes that differ in the protocol versions into a TODO file.
  2. Start by updating the ProtocolHandler, then PacketTypesIn and PacketTypesOut, then ConfigurationPacketTypesIn and ConfigurationPacketTypesOut
  3. Then I use Burger to obtain JSON with material, entity and block palettes, and then I use generators we have to generate palettes in our format and add them in.
  4. Then I start updating Protocol18 packet by packet, implementing all the changes as I go, changing utility classes as I got and implementing Entity Metadata palette if needed.
  5. I also update the structured components (not yet merged)
  6. Then I test changes by booting up a local server and trying all the stuff manually, terrain movement, spawning a ton of different entities to test metadata, inventory handling fully, potions, etc..
  7. Then I test it on online servers.

If I can't understand or get some changes from Wiki, I check out other implementations such as BotCraft and I consult the Minecraft Protocol Discord server, in the worst case scenario I needed to decompile the latest server jar and check out the changes manually in Mojang's code.

@milutinke
Copy link
Member Author

For the inventory crash, I've used SniffCraft for 1.21 to check the root cause.

Seems like we're crafting a broken packet as per SniffCraft:

Client --> Server: PARSING EXCEPTION for message Container Click(: 14)While reading carried_item (6th field) in ServerboundContainerClickPacket
While reading components (2th field) in Slot
Not enough input in ReadData<VarType>

A container click packet looks like this on a left click:

    "button_num": 0,
    "carried_item": {
        "components": {
            "map": []
        },
        "item_count": 1,
        "item_id": 843
    },
    "changed_slots": {
        "22": {
            "item_count": 0
        }
    },
    "click_type": 0,
    "container_id": 0,
    "slot_num": 22,
    "state_id": 1
}

and after another left click to another slot:

{
    "button_num": 0,
    "carried_item": {
        "item_count": 0
    },
    "changed_slots": {
        "22": {
            "components": {
                "map": []
            },
            "item_count": 1,
            "item_id": 843
        }
    },
    "click_type": 0,
    "container_id": 0,
    "slot_num": 22,
    "state_id": 1
}

This moves the item from slot 22 to slot 22 (clicked twice on the same slot).

This is certainly useful information, but it's something that I don't know how to fix myself as I don't know how the system is implemented. I vaguely remember you having notes on implementation somewhere but I couldn't find it.

SniffCraft also revealed more information for us, as we seem to be sending way too many MovePlayerPosition when idle, to the point where it seems like it's spamming the server (we seem to send it per tick, as opposed to the vanilla client that sends it at a rate of about 1 per second when idle.)

There are also palette issues on 1.21, as a Netherite Sword is being incorrectly identified as a Netherite Shovel.

I've been thinking about this for a while, but how about we drop the entire item id system in exchange for namespaces? Compatibility layers can be added for converting pre-flattening ids. Older versions adapt to the newer versions, while the latest version is always the ground truth for data. This would mean a little more work as we'll have to coerce all the old stuff into modern equivalents, but would save us a lot of headaches with compatibility, since we won't need to deal with palettes anymore.

Thanks for the info, I'll try to fix this issue and merge it.
As for refactoring, I think it's just not worth building on top of this old code, it's over a decade old and convoluted.
In my opinion, we're just better off starting from zero, and dropping all the older versions of Minecraft, and we start from the latest, as due to Wiki Vg being merged into the Minecraft Wiki, a lot of information was lost, and links are broken.
We could design the whole system to be very modular, to be fully asynchronous and easy to re-use in different clients, eg. GUI, TUI, Mobile, headless, etc..

@breadbyte
Copy link
Member

Personally, I agree about starting from scratch due to the monolithic nature of the code, but I don't know how that would run against the other contributors on the project.

Can't have technical debt if you don't have code to begin with 😉

@ReinforceZwei
Copy link
Member

I agree we should start a new project from ground and deprecate old mcc. We have MCCTeam organization it's easy to start another repository and still under MCC name.

But unfortunately I might not have enough free time and motivation to continue contribute on a Minecraft related project, and I don't play Minecraft now.

@BruceChenQAQ
Copy link
Collaborator

Hi everyone, long time no see! It's really great to see this project is still being maintained.

I'd like to chip in and help out with the maintenance in my spare time. @milutinke , could you give me a quick update on which versions and protocols still need to be adapted? I'm thinking I could spend some time this weekend to push this PR forward.

As for a complete refactor to support all these versions, it sounds like a massive amount of work. Since there's already a pre-release branch set up, I think building on top of that and incrementally pushing the adaptation forward is a much more realistic and achievable goal for now.

@BruceChenQAQ
Copy link
Collaborator

I've been doing some additional adaptation work for the 1.20.6 protocol support with the help of AI. The changes are pushed to https://github.com/BruceChenQAQ/Minecraft-Console-Client-1.19dev/commits/1.20.6/ and include fixes for RegistryData parsing, KnownDataPacks negotiation, dynamic attribute registry, StructuredComponent serialization correctness (ContainerComponent, ChargedProjectilesComponent, BundleContentsComponent, FoodComponentComponent, PotionContentsComponent, InstrumentComponent), and enchantment name mapping/display. Each commit message contains detailed background info on what was wrong and why.

One useful resource I'd like to share: you can use the tools listed at https://minecraft.wiki/w/Tutorial:See_Minecraft%27s_code#Navigation to browse/decompile the official server code, which is very helpful for verifying protocol details like STREAM_CODEC definitions and ByteBufCodecs.holder/optional/list encoding formats.

@milutinke
Copy link
Member Author

milutinke commented Mar 20, 2026

@BruceChenQAQ Hello and welcome back.

Sorry for replying this late, I've been traveling, did not check the notifications.
I see that you've already done some work in a new PR, but I'll answer you anyway. I did support for 1.20.6, 1.21 and 1.21.1, I tested it, found that entity data was crashing, as well as sending an inventory click, and I did not have the time to dedicate to debug this and fix it due to attending university and working, then I got some health issues and completely gave up on this until I resolve those, which I did. So that was the state at which I left it.
Thanks for the work you did with AI.
Have you tested the changes?

As for starting from 0, it can be done with the help of AI, if we set it up properly and give it good documentation, it needs a bit of up-front work setting up all the AGENTS.md/CLAUDE.md, skills, rules, documentation, examples, and hooks, but once those are in place, we can use TTD and get this up in no time. I've spent 3 years trying our various AI tools and patterns, and refactoring some massive code bases at work, so I have the expertise for this.
But I agree, let's get this working first, then we can pull all the changes to your branch with async features, and then refactor the code to be more maintainable and clean, after which we could do the separate library and the client from ground up based on the experience we had from refactoring.

Once you merge your PR, let's do 1.21.4 to 1.21.10 in order, I'll use Claude Code and Codex to create Markdown documentation for those protocols first.

@BruceChenQAQ
Copy link
Collaborator

@milutinke Welcome back and glad to hear you're doing better! No worries about the late reply at all.

Yes — all changes have been tested. Let me walk you through how I set up the AI-assisted development workflow, since I think this approach could be very useful for the future adaptation work you mentioned.

AI-Assisted Debugging Workflow — "Harness Engineering"

The key idea is to give the AI agent (Cursor) a closed-loop environment where it can compile, deploy, test, and inspect results autonomously, without needing interactive terminal access. Here's what I built:

1. Fix Non-Interactive Terminal Crashes

The first blocker was that MCC (specifically ConsoleInteractive) crashed when running in a non-interactive terminal — which is exactly what AI agents use. I patched ConsoleInteractive to gracefully guard against Console.CursorLeft, Console.Clear, Console.KeyAvailable, etc. when no interactive terminal is attached. (There are a few more minor ConsoleInteractive fixes I haven't pushed yet.)

2. Server Management Aliases

I set up bash aliases so the AI can start/stop/query Minecraft test servers with single commands, and use RCON to execute server-side commands (like /give, /summon, /op):

# Start server in tmux with named pipe for stdin
mc-start 1.20.6-Vanilla

# Send server commands via RCON (no interactive terminal needed)
mc-rcon "give CursorBot diamond_sword{Enchantments:[{id:sharpness,lvl:5}]} 1"
mc-rcon "summon minecraft:armor_stand ~ ~ ~ {Tags:[\"test\"]}"

# Build and run MCC
mcc-build && mcc-run

3. FileInputBot — Command Injection for AI

Since AI agents can't type into an interactive console, I added a simple FileInputBot ChatBot that monitors a text file (mcc_input.txt) for commands:

# AI writes commands to the file, MCC picks them up within ~500ms
echo "inventory player list" >> mcc_input.txt
echo "/gamemode creative" >> mcc_input.txt

This gives the AI a complete compile → run → test → inspect loop without any human interaction.

4. Decompiled Server Source as Ground Truth

I provided decompiled official Minecraft server source code for each target version under MinecraftOfficial/<version>-decompiled/. When the AI needs to verify packet structures, field ordering, codec types, or component serialization formats, it reads the authoritative Java source directly — for example checking EntityDataSerializers.java for metadata type order, or DataComponents.java for structured component registration.

5. Version Adaptation Skill

I wrote a reusable "skill" (structured instructions for the AI) for cross-version protocol adaptation. It guides the AI through: running registry diffs between versions → generating updated palettes → updating version routing → handling new serializer types → compile & verify. This made the 1.21 → 1.21.2 jump largely automated.

Testing Methodology

With the above infrastructure, the AI autonomously performs testing like:

  • Inventory: Uses RCON to /give items with complex NBT data (enchantments, custom names, lore, potions), then uses FileInputBot to run inventory player list and verifies item names, counts, and enchantments are parsed correctly. Clicks items between slots and verifies the server accepts the packets without errors.
  • Entities: Uses RCON to /summon various entity types (armor stands, mobs with custom metadata, projectiles), then checks entity tracking via MCC commands.
  • Terrain: Verifies chunk loading, block queries, and movement commands work without protocol errors.
  • Explosions / Particles: Triggers TNT and other effects to verify the new packet formats parse correctly.
  • Stability: Keeps MCC connected for extended periods to check for drift or delayed crashes.

All three versions (1.20.6, 1.21, 1.21.2) pass these tests on vanilla offline-mode servers.

Regarding Next Steps

Completely agree with your plan — let's get this merged first, then tackle 1.21.4 → 1.21.10 incrementally. The workflow I described above should make that much faster. Having Claude Code / Codex generate protocol documentation first is a great idea; combined with the decompiled source and the diff tooling, each version jump should be fairly mechanical.

I also strongly agree about the long-term rewrite approach: get it working first, then refactor, then eventually rebuild as a clean library. The decade-old codebase definitely shows its age, but it works, and there's a lot of institutional knowledge embedded in it.


Appendix: Tooling Files

~/.bashrc — MCC Development Utilities
# ============================================================
# MCC (Minecraft Console Client) Development Utilities
# ============================================================

export MCC_REPO="$HOME/Minecraft/Minecraft-Console-Client-milutinke"
export MCC_SERVERS="$HOME/Minecraft/Servers"

# Helper: convert version to tmux session name (dots -> underscores)
_mc-session() { echo "mc-${1//\./_}"; }

# --- Minecraft Server Management ---
mc-start() { "$MCC_SERVERS/start-server.sh" "${1:-1.20.6-Vanilla}"; }
mc-stop()  { local v="${1:-1.20.6-Vanilla}"; echo "stop" > "$MCC_SERVERS/$v/stdin.pipe"; }
mc-cmd()   { local v="${2:-1.20.6-Vanilla}"; echo "$1" > "$MCC_SERVERS/$v/stdin.pipe"; }
mc-log()   { local s; s=$(_mc-session "${1:-1.20.6-Vanilla}"); tmux capture-pane -t "$s" -p -S "-${2:-50}"; }
mc-kill()  { local v="${1:-1.20.6-Vanilla}" s; s=$(_mc-session "$v"); tmux kill-session -t "$s" 2>/dev/null; rm -f "$MCC_SERVERS/$v/stdin.pipe"; echo "Killed $s"; }
mc-list()  { tmux list-sessions 2>/dev/null | grep "^mc-" || echo "No running MC servers"; }

# --- RCON ---
mc-rcon() {
  local cmd="$1" port="${2:-25575}" pw="${3:-test123}"
  python3 -c "
import socket,struct,sys
s=socket.socket()
s.settimeout(5)
try:
    s.connect(('localhost',$port))
except Exception as e:
    print(f'Connection failed: {e}',file=sys.stderr); sys.exit(1)
def send(i,t,b):
    b=b.encode()
    s.send(struct.pack('<iii',10+len(b),i,t)+b+b'\x00\x00')
def recv():
    l=struct.unpack('<i',s.recv(4))[0]
    d=b''
    while len(d)<l: d+=s.recv(l-len(d))
    return d
send(1,3,'$pw');r=recv()
rid=struct.unpack('<i',r[:4])[0]
if rid==-1: print('Auth failed',file=sys.stderr); s.close(); sys.exit(1)
send(2,2,\"\"\"$cmd\"\"\");r=recv()
body=r[8:-2].decode(errors='replace')
if body: print(body)
s.close()
"
}

# --- MCC Build/Run ---
mcc-build() { dotnet build "$MCC_REPO/MinecraftClient.sln" -c Release; }
mcc-run()   { cd "$MCC_REPO" && MCC_FILE_INPUT=1 dotnet run --project MinecraftClient -c Release -- CursorBot - "localhost:${1:-25565}" 2>&1; }
mcc-cmd()   { echo "$1" >> "$MCC_REPO/mcc_input.txt"; }
mcc-kill()  { pkill -f "MinecraftClient" 2>/dev/null && echo "MCC killed" || echo "No MCC process found"; }
mcc-reload() {
  mcc-kill
  sleep 1
  mcc-build && mcc-run
}
start-server.sh — Tmux-based Server Launcher
#!/bin/bash
# Start a Minecraft server in a tmux session with named pipe for stdin
VERSION="${1:-1.20.6-Vanilla}"
DIR="$HOME/Minecraft/Servers/$VERSION"
PIPE="$DIR/stdin.pipe"
SESSION="mc-${VERSION//\./_}"

if [ ! -d "$DIR" ]; then
    echo "Error: Server directory $DIR does not exist"
    echo "Available versions:"
    ls "$HOME/Minecraft/Servers/" | grep -v '\.sh$' | grep -v '\.pipe$'
    exit 1
fi

if tmux has-session -t "$SESSION" 2>/dev/null; then
    echo "Server $VERSION already running in tmux session '$SESSION'"
    echo "View output:  tmux capture-pane -t '$SESSION' -p -S -50"
    echo "Send command: echo 'say hello' > $PIPE"
    exit 0
fi

rm -f "$DIR/world/session.lock"

[ -p "$PIPE" ] || mkfifo "$PIPE"

tmux new-session -d -s "$SESSION" -c "$DIR" \
  "tail -f $PIPE | java -Xmx2G -Xms2G -jar server.jar nogui 2>&1"

echo "Server $VERSION started in tmux session '$SESSION'"
echo "Send commands: echo 'say hello' > $PIPE"
echo "View output:   tmux capture-pane -t '$SESSION' -p -S -50"
mcc-dev-workflow SKILL.md — AI Agent Instructions
# MCC Development Workflow (WSL)

## Project Overview
- Repo: `~/Minecraft/Minecraft-Console-Client-milutinke` (env var `$MCC_REPO`)
- Solution: `MinecraftClient.sln` (projects: `MinecraftClient` + `ConsoleInteractive`)
- Build: `dotnet build MinecraftClient.sln -c Release`
- Servers: `~/Minecraft/Servers/` (env var `$MCC_SERVERS`)

## Typical Debug Workflow
1. `~/Minecraft/Servers/start-server.sh 1.20.6-Vanilla` (background)
2. Wait for "Done" in server output
3. Build: `dotnet build $MCC_REPO/MinecraftClient.sln -c Release`
4. Run MCC: `cd $MCC_REPO && MCC_FILE_INPUT=1 dotnet run --project MinecraftClient -c Release -- CursorBot - localhost 2>&1`
5. RCON: `mc-rcon "op CursorBot"`
6. MCC cmd: `echo "inventory player list" >> $MCC_REPO/mcc_input.txt`
7. Read terminal file to see output
8. Kill MCC → rebuild → repeat

## Timing Reference
| Operation | Typical Duration |
|-----------|-----------------|
| MCC startup → join server | ~1s |
| FileInput command → response | <500ms |

## Official Minecraft Server Source (Decompiled)
`$MCC_REPO/MinecraftOfficial/` contains decompiled official server code for protocol reference.
When investigating protocol details (packet structure, field order, NBT format, etc.),
look at the corresponding version's decompiled source as authoritative reference.

@milutinke
Copy link
Member Author

milutinke commented Mar 20, 2026

@BruceChenQAQ Awesome, I like it very much. I had a similar idea, but never got around to doing it. Check if there is a MCP plugin for a Minecraft server, might be better than rcon. We also could implement a MCP into the MCC later on.

Btw, one thing I forgot about was the Declare Commands packet, it was broken in 1.20.4, was crashing and I spent hours debugging it and not being able to figure out why it crashed due to the number of information sent.
Maybe AI can help us by inspecting the source code of the server.

This is the piece of code I added:

Edit:
Fun fact, just realized that this PR is the last code I actually wrote by hand. not using AI 😆

@BruceChenQAQ
Copy link
Collaborator

@milutinke Thanks, that makes a lot of sense. I can imagine the amount of work needed to properly adapt Declare Commands from 1.20.4 up to the latest version is probably not small, so I think it’s better for us to leave that until after the main version adaptation work is done.

About RCON, the main reason I chose it is that it’s supported by vanilla servers out of the box, so there’s no need to install any extra plugin. After wrapping it in a helper function, using it is also quite straightforward — from the shell you can just do something like:

mc-rcon "give Bot test_block 1"

And about AI — things are moving incredibly fast now. Top models are evolving so quickly that I really do write much less code by hand than before. For a project like MCC, where both input and output are mostly text-based, it feels like a very good fit for LLMs. As models keep getting stronger and cheaper, I think maintenance will become much easier for us.

Beyond MCP, I also have another idea: allowing users to give MCC tasks directly in natural language, with inputs coming from different sources, and then letting AI use MCC’s capabilities to execute them. Right now the command set we expose is still not complete enough, but I think that could be a very interesting direction in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants