Skip to main content
Glama

mcdev-mcp

CI License: MIT

An MCP (Model Context Protocol) server that empowers AI coding agents to work effectively with Minecraft mod development. Provides both static analysis of decompiled source code and runtime interaction with a running Minecraft instance.

Features

Static Analysis (work offline)

  • Decompiled Source Access — Auto-downloads and decompiles Minecraft client using Vineflower

  • Dev Snapshot Support — Works with development snapshots (e.g., 26.1-snapshot-10) that lack ProGuard mappings

  • Symbol Search — Search for classes, methods, and fields by name (mc_search)

  • Source Retrieval — Get full class source or individual methods with context

  • Package Exploration — List all classes under a package path or discover available packages

  • Class Hierarchy — Find subclasses and interface implementors

  • Call Graph Analysis — Find method callers and callees across the entire codebase

Runtime Interaction (requires DebugBridge mod)

  • Live Groovy Execution — Execute Groovy scripts inside the running Minecraft JVM (mc_execute); migrated from Lua in mid-2026

  • Game State Snapshots — Player position, health, dimension, time, weather (mc_snapshot)

  • Screenshots, Recordings & Screen Inspection — Game-window JPEG, multi-frame contact sheet for temporal debug, and current-GUI structure (mc_screenshot, mc_record_video, mc_screen_inspect)

  • World Introspection — Nearby entities and block-entities, plus per-id details (mc_nearby_entities, mc_entity_details, mc_nearby_blocks, mc_block_details, mc_looked_at_entity)

  • Visual Markers — Outline entities or blocks for the user to spot (mc_set_entity_glow, mc_set_block_glow, mc_clear_block_glow)

  • Item Texture Rendering — Render an inventory slot, an item id, or a slot on another entity as PNG (mc_get_item_texture, mc_get_item_texture_by_id, mc_get_entity_item_texture)

  • Chat History — Recent client-side chat messages (mc_chat_history)

  • Session Control & Dev Loop — Join/leave servers, quit the client, and reconnect after a relaunch (mc_join_server, mc_leave_server, mc_quit_client, mc_wait_for_bridge, mc_wait_until_in_world; gated by session_control_enabled in the DebugBridge config). Build/launch orchestration is the coding agent's job, guided by the mcdev://guides/dev-loop resource and the minecraft-dev-loop skill.

  • Slash Commands — Execute in-game commands (mc_run_command, opt-in dev tool)

  • Script Execution Logs — Review past mc_execute runs and error patterns (mc_script_logs, opt-in via Claude Desktop user setting)

MCP Resources

  • mcdev://guides/python-scripting — Wire-protocol reference for AI agents that want to drive DebugBridge from Python directly (bypassing the MCP tools): WebSocket framing, a minimal asyncio client, and the Groovy surface you send through it. Surfaced via the standard MCP resources/list + resources/read, with a pointer in the server's instructions so agents know to look.

Related MCP server: MCP Plus

Quick Start

Security note — init is intentionally terminal-only. The MCP server only exposes read/query tools. Downloading and decompiling Minecraft sources must be triggered by you in the terminal; an AI agent connected to the server has no tool surface to trigger init, rebuild, clean, or callgraph.

1. Initialize in your terminal

# Download, decompile, and index Minecraft sources (~2-5 minutes)
npx mcdev-mcp init -v 1.21.11

This command:

  1. Downloads the Minecraft client JAR

  2. Decompiles using Vineflower (pure Java, 8 threads)

  3. Builds the symbol index (classes, methods, fields, inheritance)

  4. Generates call graph for mc_find_refs

Data is stored in your OS cache directory (see Storage location below), so it persists across npx invocations. Expect roughly ~2 GB per Minecraft version — mostly decompiled .java sources and a SQLite callgraph database. All of it is regeneratable, so your OS is free to evict it under storage pressure and init will rebuild what it needs.

2. Add to your MCP client

Codex Desktop / Codex CLI

Codex can launch local stdio MCP servers directly. Install the published package with:

codex mcp add mcdev-mcp -- npx -y mcdev-mcp serve

If you are developing from a local checkout, build first and point Codex at the local server:

git clone https://github.com/use-ai-for-mc/mcdev-mcp.git
cd mcdev-mcp
npm install
npm run build
codex mcp add mcdev-mcp -- node "$(pwd)/dist/index.js"

Verify that Codex can see it:

codex mcp list
codex mcp get mcdev-mcp

Restart Codex Desktop, or start a new Codex session, after adding the server. Codex will launch the MCP server automatically when a session needs it; you do not run serve by hand.

Other MCP clients

{
  "mcpServers": {
    "mcdev": {
      "command": "npx",
      "args": ["-y", "mcdev-mcp", "serve"]
    }
  }
}

The serve subcommand starts the MCP server over stdio. Your MCP client (Claude Desktop, Cursor, etc.) launches it automatically — you never run serve directly.

3. (Optional) Install DebugBridge for live-game tools

The static analysis tools (mc_search, mc_get_class, mc_find_refs, …) work as soon as init finishes. The runtime tools (mc_execute, mc_snapshot, screenshots, world introspection, item textures, glow markers, etc.) additionally require the DebugBridge mod installed in the Minecraft instance you want to drive. Without DebugBridge, those tools will just report a connection error — the static half keeps working unaffected.

Supported Versions

Version Type

Example

Notes

New scheme (26.x and later)

26.1, 26.1-snapshot-10

Recommended. Ships pre-unobfuscated; no ProGuard mapping step.

Releases 1.141.21.x

1.21.11, 1.20.4, 1.19.4

Supported. Mojang's official ProGuard mappings are required (downloaded automatically).

Older releases (< 1.14)

1.13, 1.12.2

Not supported — no official mappings published.

The validator lives in src/cli.ts (isValidVersion). For 1.x.x releases it requires 1.14 or later; the new 26.x+ scheme is accepted unconditionally.

(Optional) Skip Call Graph

# Skip callgraph generation if you don't need mc_find_refs
npx mcdev-mcp init -v 1.21.11 --skip-callgraph

# Generate callgraph later
npx mcdev-mcp callgraph -v 1.21.11

Verify Installation

npx mcdev-mcp status

Note: mc_version (with action: "set") must be called before using any other static MCP tools. If the version isn't initialized, the AI will be instructed to ask you to run init.

Install from source (development)

git clone https://github.com/use-ai-for-mc/mcdev-mcp.git
cd mcdev-mcp
npm install
npm run build

# Use the local build instead of npx
node dist/cli.js init -v 1.21.11
node dist/cli.js serve         # stdio MCP server; MCP clients launch this

Upgrading from an older version? If you have a previous installation using DecompilerMC, run npx mcdev-mcp clean --all first to remove old cached data.

MCP Tools

Version Management (Static Tools)

Before using static tools, set the active Minecraft version:

mc_version

Manage the active Minecraft version. Call with action: "set" before other static tools, or action: "list" to see what's initialized.

{
  "action": "set",
  "version": "1.21.11"
}
{
  "action": "list"
}

Static Tool Requirements

Tool

Requires init

Requires callgraph

mc_version

-

-

mc_search

-

mc_get_class

-

mc_get_method

-

mc_list_classes

-

mc_list_packages

-

mc_find_hierarchy

-

mc_find_refs

Search decompiled source code for classes, methods, or fields by name pattern.

{
  "query": "Minecraft",
  "type": "class"
}

mc_get_class

Get the full decompiled source code for a class.

{
  "className": "net.minecraft.client.Minecraft"
}

mc_get_method

Get source code for a specific method with context.

{
  "className": "net.minecraft.client.Minecraft",
  "methodName": "tick"
}

mc_find_refs

Find who calls a method (callers) or what it calls (callees).

{
  "className": "net.minecraft.client.MouseHandler",
  "methodName": "setup",
  "direction": "callers"
}

Direction

Description

callers

Find methods that call this method

callees

Find methods this method calls

Note: Requires callgraph to be generated (included in init by default).

mc_list_classes

List all classes under a specific package path (includes subpackages).

{
  "packagePath": "net.minecraft.client.gui.screens"
}

mc_list_packages

List all available packages. Optionally filter by namespace.

{
  "namespace": "minecraft"
}

Namespace

Description

minecraft

Minecraft client classes

fabric

Fabric API classes (if indexed)

mc_find_hierarchy

Find classes that extend or implement a given class or interface.

{
  "className": "net.minecraft.world.entity.Entity",
  "direction": "subclasses"
}

Direction

Description

subclasses

Classes that extend this class

implementors

Classes that implement this interface


Runtime Tools

These tools require Minecraft to be running with the DebugBridge mod installed.

mc_connect

Connect to a running Minecraft instance. Other runtime tools auto-connect if needed. Pass reset: true to disconnect and clear state before reconnecting (useful when switching instances). If port is omitted, scans ports 9876-9886.

{
  "port": 9876,
  "reset": false
}

mc_execute

Execute Groovy code in the running game. The binding persists across calls, and mc / player / level are pre-bound. (The runtime migrated from Lua to Apache Groovy 5 in mid-2026 — the tool description carries a Lua→Groovy cheat-sheet.)

return player.blockPosition().toShortString()

mc_snapshot

Get a structured snapshot of current game state (player, world, time, weather).

{}

mc_screenshot

Capture the game window as a JPEG file and return its path.

{
  "downscale": 2,
  "quality": 0.75
}

mc_record_video

Capture a short burst of frames for debugging temporal rendering issues (animation glitches, shader bugs, particles, sub-tick artifacts a single screenshot can't resolve). Returns either one composed grid JPEG (default) or N separate frame JPEGs.

{
  "frames": 60,
  "interval": 50,
  "output": "grid",
  "downscale": 2,
  "quality": 0.75
}

interval is either "frame" (every render tick, ~60 Hz) or milliseconds (number, >= 1). Numeric intervals (50–100 ms) are recommended unless you specifically need sub-tick detail; at "frame" cadence the encoder may fall behind and the response's dropped count tells you how many frames were skipped. Capped at 300 frames per call. Files land under <gameDir>/debugbridge-recordings/<requestId>/.

mc_screen_inspect

Snapshot the screen the player currently has open (chest UI, inventory, advancement screen, etc.) and return its structure.

{
  "includeIcons": false
}

Set includeIcons: true to render each unique item in the screen as a small PNG and attach an icons map keyed by registry id.

mc_chat_history

Get the most recent client-side chat messages — what the user has seen in chat.

{
  "limit": 50,
  "includeJson": false
}

Set includeJson: true to include each message's full Minecraft Component JSON (useful when chat-message styling matters).

mc_nearby_entities

List entities (mobs, items, projectiles, players) within a radius of the player.

{
  "range": 64,
  "limit": 100,
  "includeIcons": false
}

Returns each entity's id, type, position, and primary equipment summary. Pass the id to mc_entity_details, mc_set_entity_glow, or mc_get_entity_item_texture to drill in.

mc_entity_details

Get full details for one entity by id (the id field returned by mc_nearby_entities or mc_looked_at_entity).

{
  "entityId": 12345
}

mc_looked_at_entity

Returns the entity id the player is currently aiming at (raycast), or null if nothing is in the line of sight.

{
  "range": 64
}

mc_nearby_blocks

List nearby block-entities (signs, chests, banners, beacons, hoppers, …). Plain world blocks aren't included — use mc_block_details for any specific position.

{
  "range": 16,
  "limit": 100
}

mc_block_details

Get details for the block-entity at (x, y, z): sign lines, chest contents, banner patterns, etc.

{
  "x": 100,
  "y": 64,
  "z": 200
}

mc_set_entity_glow

Outline an entity with the team-colour glow so the user can spot it. Pass glow: false to remove.

{
  "entityId": 12345,
  "glow": true
}

mc_set_block_glow

Highlight a block in the world (yellow outline on 1.19, vanilla glow on newer versions). Pass glow: false to remove just this position.

{
  "x": 100,
  "y": 64,
  "z": 200,
  "glow": true
}

mc_clear_block_glow

Clear all block highlights set via mc_set_block_glow in one call.

{}

mc_get_item_texture

Render the item in the player's inventory slot N as a PNG attached as MCP image content.

{
  "slot": 0
}

Slot range

Meaning

0–35

Main inventory (0–8 are the hotbar)

36–39

Armor (boots, leggings, chestplate, helmet)

40

Off-hand

mc_get_item_texture_by_id

Render the default texture for a registry id (e.g. minecraft:diamond) without needing the item to be in any inventory.

{
  "itemId": "minecraft:diamond"
}

mc_get_entity_item_texture

Render an item carried by another entity. slot is "mainhand", "offhand", or one of the armor slot names.

{
  "entityId": 12345,
  "slot": "mainhand"
}

Session control & dev loop

These five tools are the bridge-side primitives of the rebuild → relaunch → rejoin loop. The underlying endpoints (disconnect, joinServer, quit) are disabled by default: set "session_control_enabled": true in <minecraft>/config/debugbridge.json and restart the client (the flag is read at startup). mc_connect reports whether the connected instance has it enabled, and the tools return exact instructions when it's off.

The machine-specific halves of the loop — building the mod, copying the jar into <gameDir>/mods/, and launching the client — are deliberately not server tools: a coding agent with shell access discovers and runs them itself, guided by the mcdev://guides/dev-loop resource (also available as a copyable Claude Code skill in skills/minecraft-dev-loop/). The short version: the agent derives the deploy target, instance name, and launcher from the gameDir that mc_connect reports, persists the launch command it composes in the project's CLAUDE.md, and leaves authentication entirely to the launcher.

Caution: mc_quit_client shuts down the whole Minecraft client, and mc_join_server / mc_leave_server change which world the user is in — they tear down the current play session. For repeated automated test runs, prefer a local throwaway server over a live community server (nondeterministic world, other players, server rules).

mc_join_server

Join a multiplayer server (disconnecting from the current world first if needed). The server resource pack is pre-accepted by default so the join doesn't stall on the confirmation prompt. The bridge ack means the connect attempt has started: bridges ≥ 2.0.0 defer it until the client has settled (no startup/reload overlay), so a join fired right after a relaunch may take some extra seconds to ack; older bridges ack as soon as the request is queued. By default the tool then polls every second until a game snapshot shows a player (joined) or a DisconnectedScreen appears (failed — its title is returned as the reason).

{
  "address": "localhost:25565",
  "acceptResourcePacks": true,
  "wait": true,
  "timeoutSeconds": 60
}

mc_leave_server

Leave the current world/server to the title screen (when not in a world, it still resets the open menu screen to the title screen). Fire-and-acknowledge — the ack means the disconnect was queued on the game thread.

{}

mc_wait_until_in_world

Poll until the player is in a world, a DisconnectedScreen appears, or the timeout elapses. Read-only (doesn't require session control); useful after mc_join_server with wait: false or after a relaunch.

{
  "timeoutSeconds": 60
}

mc_quit_client

Gracefully shut down the Minecraft client (the WebSocket dropping right after the ack is the normal success mode). By default it resolves the client's PID from the bridge port before quitting, then polls until the port stops listening and that process exits — on success it's safe to relaunch immediately, even through launchers that track the instance (Prism silently ignores --launch while it still sees the old process). When the PID can't be resolved (no lsof, permissions), it falls back to port-close-only and the result says so — the JVM can outlive the port by a few seconds, so in that case confirm the old process exited yourself before relaunching.

{
  "waitForExit": true,
  "timeoutSeconds": 30
}

mc_wait_for_bridge

Block until a freshly (re)launched client's bridge answers, then connect to it. Sweeps ports 9876-9886 once per second, only accepting the instance that matches the previous connection's game directory / version — so a second running instance isn't mistaken for the relaunch. Pass expectedVersion only when deliberately switching instances. Read-only.

{
  "expectedVersion": "1.21.11",
  "timeoutSeconds": 120
}

mc_run_command (opt-in dev tool)

Execute a Minecraft slash command.

{
  "command": "/give @s minecraft:diamond 64"
}

Disabled by default. Both this server (MCDEV_RUN_COMMAND=1) and the DebugBridge mod (runCommandEnabled in BridgeConfig) must opt-in. See Opt-in / dev tools below.

mc_script_logs (opt-in dev tool)

Review the file-backed log of past mc_execute runs (timestamp, code, result, error, duration), summarise common error patterns, or print the log paths.

{
  "mode": "errors",
  "limit": 20
}

Mode

Returns

"errors"

The most recent failed mc_execute calls

"stats"

Aggregate error patterns (which messages recur)

"paths"

Where the log files live on disk

Disabled by default. Enabled by MCDEV_SCRIPT_LOGS=1. The Claude Desktop MCPB exposes this as a user-facing toggle ("Log script executions") — see Opt-in / dev tools.

Opt-in / dev tools

Two runtime tools are gated behind environment variables so the default server only exposes the read-only and "safe" wrappers. The bridge mod has its own matching flags, so flipping just the server-side env on does nothing if the mod hasn't also opted in.

Tool

Env var

Bridge-side flag

Surface in Claude Desktop

mc_run_command

MCDEV_RUN_COMMAND=1 (or true)

runCommandEnabled

Not exposed via the MCPB user_config — set the env explicitly when launching the server.

mc_script_logs

MCDEV_SCRIPT_LOGS=1 (or true)

(server-side only)

"Log script executions" toggle in the MCPB extension settings (also enables file logging of every mc_execute).

When the env var is unset (or set to 0/false), the tool simply isn't registered and won't appear in the MCP client's tool list.

AST-based Java indexer (preview)

Set MCDEV_AST_PARSER=1 before init or rebuild to use the new java-parser-backed indexer. Compared to the default regex parser it:

  • Correctly handles multi-line annotations, nested generics, records, sealed types, pattern matching, and lambda-initialised fields (the regex parser silently miscounts on each of these).

  • Picks up interface constants and default/static interface methods that the regex parser misses.

  • Does not fold nested-class members into the outer type's lists.

In a head-to-head on Minecraft 1.21.11 source (500-file sample), the AST parser found ~2× more fields and ~33% fewer (correctly attributed) methods than the regex parser. It is ~4.5× slower per file, so a full re-index runs in roughly 75 seconds instead of 17 — acceptable inside an init that already takes 2–5 minutes for download + decompile. Very large generated command classes are isolated in bounded worker processes; if java-parser still exhausts a worker on one file, the indexer falls back to the regex parser for that file instead of failing the whole rebuild.

MCDEV_AST_PARSER=1 npx mcdev-mcp init -v 1.21.11
# or, to re-index an already-decompiled version:
MCDEV_AST_PARSER=1 npx mcdev-mcp rebuild -v 1.21.11 --with-callgraph

The MCP server stamps manifest.indexerVersion so it can tell which parser produced the existing index. When you flip the flag but haven't rebuilt yet, the server prints a one-time hint per version on the next tool call:

[source-store/manifest:1.21.11] Index was built with the 'regex' parser, but the server is now running the 'ast' parser.
  This is fine — existing indices still work — but the new parser would produce a better index.
  Run `mcdev-mcp rebuild -v 1.21.11` (or `init -v 1.21.11` for a full re-fetch) to refresh.
  Set MCDEV_SUPPRESS_INDEXER_HINT=1 to silence this message.

Requirements

Dependency

Version

Purpose

Node.js

18+

Runtime

Java

8+

Decompilation (Vineflower) & callgraph

~2GB

disk

Decompiled sources + cache

Note: Java 17+ is recommended for the callgraph command due to Gradle compatibility.

CLI Commands

Invoke via npx mcdev-mcp <command> (or node dist/cli.js <command> from a source checkout).

Command

Description

serve

Start the MCP server over stdio (launched by MCP clients — not run by humans)

init -v <version>

Download, decompile, index Minecraft sources, and generate callgraph

init -v <version> --skip-callgraph

Same as above but skip callgraph generation

callgraph -v <version>

Generate call graph for mc_find_refs

status

Show all initialized versions and what stage each one is at

rebuild -v <version>

Rebuild the symbol index from already-cached sources

rebuild -v <version> --with-callgraph

Also regenerate the callgraph in the same run

clean -v <version> --all

Remove cached data for one version

clean --all

Remove all cached data across versions

Re-indexing

To re-index a version:

# Clean existing data for a version
npx mcdev-mcp clean -v 1.21.11 --all

# Re-initialize
npx mcdev-mcp init -v 1.21.11

Architecture

mcdev-mcp/
├── src/
│   ├── index.ts              # MCP server entry point
│   ├── cli.ts                # CLI commands
│   ├── tools/
│   │   ├── static/           # Decompiled source tools
│   │   └── runtime/          # DebugBridge runtime tools
│   ├── decompiler/           # Vineflower integration
│   ├── indexer/              # Symbol index builder
│   ├── callgraph/            # Call graph generation & queries
│   └── storage/              # Source & index storage
└── dist/                     # Compiled output

How It Works

┌─────────────────────────────────────────────────────────────┐
│                     MCP Client (AI Agent)                    │
└─────────────────────────────────────────────────────────────┘
                              │
         ┌────────────────────┴────────────────────┐
         ▼                                          ▼
┌─────────────────────────────┐    ┌──────────────────────────────────┐
│   Static Tools (8)          │    │   Runtime Tools (18 + 2 opt-in)  │
│  ┌────────────────────────┐ │    │  ┌────────────────────────────┐  │
│  │ mc_version             │ │    │  │ mc_connect / mc_execute    │  │
│  │ mc_search              │ │    │  │ mc_snapshot / mc_screenshot│  │
│  │ mc_get_class / method  │ │    │  │ mc_screen_inspect          │  │
│  │ mc_list_classes / pkgs │ │    │  │ mc_chat_history            │  │
│  │ mc_find_hierarchy      │ │    │  │ mc_nearby_entities + det.  │  │
│  │ mc_find_refs           │ │    │  │ mc_nearby_blocks   + det.  │  │
│  └───────────┬────────────┘ │    │  │ mc_looked_at_entity        │  │
│              │              │    │  │ mc_set_*_glow / mc_clear_* │  │
│       ┌──────┴──────┐       │    │  │ mc_get_item_texture (×3)   │  │
│       ▼             ▼       │    │  │ ─── opt-in (env-gated) ─── │  │
│  ┌─────────┐  ┌──────────┐  │    │  │ mc_run_command             │  │
│  │  Index  │  │Callgraph │  │    │  │ mc_script_logs             │  │
│  │ (JSON)  │  │ (SQLite) │  │    │  └─────────────┬──────────────┘  │
│  └────┬────┘  └────┬─────┘  │    │                │                 │
└───────┼────────────┼────────┘    │         ┌──────┴──────┐          │
        ▼            ▼              │         ▼             │          │
┌────────────────────────────┐      │   ┌──────────────┐    │          │
│ Decompiled Src (local)     │      │   │  WebSocket   │    │          │
│ (Vineflower)               │      │   │ to Minecraft │    │          │
└────────────────────────────┘      │   └──────┬───────┘    │          │
                                    └──────────┼────────────┘
                                               ▼
                                    ┌────────────────────────────┐
                                    │ DebugBridge Mod (in game)  │
                                    │ github.com/use-ai-for-mc/  │
                                    │ debugbridge                │
                                    └────────────────────────────┘

See docs/ARCHITECTURE.md for detailed design documentation.

Storage location

mcdev-mcp stores all cached data in the OS-standard cache directory, courtesy of env-paths. Everything under this directory is regeneratable — safe to delete at any time — and init will rebuild what it needs on next run.

Platform

Path

macOS

~/Library/Caches/mcdev-mcp

Linux

~/.cache/mcdev-mcp (XDG-compliant, honours $XDG_CACHE_HOME)

Windows

%LOCALAPPDATA%\mcdev-mcp\Cache

Disk usage: approximately 2 GB per Minecraft version (JAR ~60 MB, decompiled sources ~1.8 GB, callgraph DB ~200 MB, symbol index ~50 MB). Run npx mcdev-mcp status to see which versions are cached, and npx mcdev-mcp clean --all (or clean -v <version> --all) to reclaim space.

Layout

<cache-dir>/
├── tools/
│   └── vineflower.jar         # Decompiler, downloaded once
├── java-callgraph2/           # Call graph tool, cloned once
├── cache/
│   └── {version}/
│       ├── jars/               # Downloaded Minecraft client JARs
│       └── client/             # Decompiled Minecraft sources
├── index/
│   └── {version}/
│       ├── manifest.json       # Index metadata
│       └── minecraft/          # Per-package symbol indices
└── tmp/                        # Temporary files (cleaned by --all)

Upgrading from a pre-1.0 install? Earlier versions stored everything under ~/.mcdev-mcp/. If you have data there and want to keep it, move it manually to the new location (e.g. on macOS: mv ~/.mcdev-mcp ~/Library/Caches/mcdev-mcp). Otherwise just run init again — the download step is idempotent.

Development

npm run build    # Compile TypeScript
npm test         # Run tests
npm run lint     # Lint code
npm run mcpb     # Build a Claude Desktop MCPB bundle for the current platform

Releasing

Releases are tag-driven. Pushing a v* tag triggers GitHub Actions to:

  1. Run the full test matrix and TypeScript checks

  2. Build a single universal MCPB bundle on ubuntu-latest

  3. Publish the package to npm

  4. Create a GitHub Release with the .mcpb attached

To cut a release:

# 1. Bump the version. npm version only touches package.json; mirror the same
#    value into manifest.json by hand — the verify-version CI job hard-fails
#    if the two disagree with the tag.
npm version patch          # or: minor, major, 1.2.3, etc.
$EDITOR manifest.json      # set "version" to match package.json

# 2. Commit the manifest bump (npm version already committed package.json)
git commit -am "Sync manifest.json version"
git tag -f "v$(node -p 'require(\"./package.json\").version')"

# 3. Push the commit and the tag
git push --follow-tags

That's it — the workflow at .github/workflows/ci.yml handles the rest. No NPM_TOKEN secret is needed; the workflow publishes to npm via Trusted Publishing (OIDC). A trusted publisher must be configured on the npm side, under the package's publishing-access settings: owner use-ai-for-mc, repo mcdev-mcp, workflow ci.yml. Releases also ship npm provenance attestations via npm publish --provenance.

The MCPB build is also runnable locally:

npm run mcpb
# → dist-mcpb/mcdev-mcp-<version>.mcpb

The bundle is universal — pure JavaScript plus sql.js (SQLite compiled to WebAssembly), no native binaries. The same .mcpb works on macOS (arm64 and x86_64), Linux (x64/arm64), and Windows. Node ≥ 20 is required at runtime (from package.json engines).

Installing the MCPB in Claude Desktop

Download the bundle from the Releases page and double-click the .mcpb file. Claude Desktop will validate the manifest and offer to install it. After install, run mcdev-mcp init -v <version> in a terminal once to populate the cache (the extension cannot trigger init itself — it's deliberately terminal-only, see Quick Start).

Limitations

  • Static Analysis: mc_find_refs cannot trace calls through reflection, JNI callbacks, or lambda/method references created dynamically

  • Client Only: Server-side classes are not included in static analysis

  • Runtime Tools: Require Minecraft running with the DebugBridge mod installed

This tool decompiles Minecraft source code for development reference purposes. Please respect Mojang's intellectual property:

You MAY:

  • Decompile and study the code for understanding and learning

  • Use the knowledge to develop mods that don't contain substantial Mojang code

  • Reference class/method names for mod development

You may NOT:

  • Distribute decompiled source code

  • Distribute modified versions of Minecraft

  • Use decompiled code commercially without permission

Per the Minecraft EULA: "You may not distribute any Modded Versions of our game or software" and "Mods are okay to distribute; hacked versions or Modded Versions of the game client or server software are not okay to distribute."

This tool is for reference only — do not copy decompiled code directly into your projects.

Third-Party Components

This project includes or uses third-party software under the following licenses:

  • DecompilerMC (MIT) — Decompiler logic adapted and translated from Python to TypeScript in src/decompiler/

  • Vineflower (Apache-2.0) — Java decompiler used for source generation

  • java-callgraph2 — Cloned at runtime for static call graph generation

Additional runtime dependencies (downloaded/used):

  • Mojang — Official ProGuard mappings and Minecraft client JAR

See LICENSE for full license text and third-party attributions.

License

MIT — Copyright (c) 2025 mcdev-mcp contributors

Available Tools

31 tools
mc_block_detailsA

Get details for the block-entity at (x, y, z): sign lines, chest contents, banner patterns, skull profile, beacon level, etc.

Returns {gone: true} if there is no block-entity at that position (e.g. plain terrain, or it was broken since the last mc_nearby_blocks call).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
zYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. It discloses that the tool returns {gone: true} when no block-entity is present. Does not mention error handling or side effects, but for a simple read operation, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundancy, front-loaded with the tool's purpose. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 3 numeric params and no output schema, the description covers the main use case and a special condition. Could add more on return format or coordinate system, but adequate for use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, so description must compensate. It explains that parameters are coordinates (x,y,z) and frames them as the position of the block-entity. Adds meaning beyond the schema's type-only definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves details for a block-entity at a specific position, listing concrete examples (sign lines, chest contents). This distinguishes it from siblings like mc_entity_details and mc_nearby_blocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains when to use (to get block-entity details) and what to expect if no block-entity exists (returns {gone: true}). Implies use after mc_nearby_blocks. No explicit alternatives but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_chat_historyA

Get the most recent client-side chat messages — what the user has seen in the chat overlay, including system messages and command output.

Prefer this over walking mc.gui.getChat().allMessages from Groovy (which costs one bridge round-trip per field on each message). Returns {plain, addedTime} per message, newest-first. Set includeJson=true to also receive each message as a structured Component (preserves colors, styles, click events, hover events) — handy for parsing colored command output.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax messages returned. Default 50.
includeJsonNoInclude the Component as JSON for each message. Default false.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the return structure ({plain, addedTime} per message), ordering (newest-first), and the effect of includeJson. It does not mention error conditions, rate limits, or authentication, but for a read-only tool with local client data, these omissions are acceptable. The description is transparent about the data and options.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with no wasted words. It is front-loaded with the main purpose in the first sentence, then provides technical details and usage tips. Every sentence contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional parameters, read-only), the description is complete. It explains what the tool returns (including format), how to control output with parameters, and a practical use case for includeJson. No output schema is needed as the description already covers the return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value by stating the default limit (50) and explaining the purpose of includeJson ('preserves colors, styles, click events, hover events' and 'handy for parsing colored command output'). This goes beyond the schema's descriptions, providing practical usage context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the most recent client-side chat messages' and specifies what is included (system messages, command output). It distinguishes from a potential alternative approach (walking Groovy's getChat) and implies it is the preferred method for this data. The specific verb 'get' and resource 'chat history' make the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this tool: when you need recent chat messages. It provides guidance on using includeJson for parsing colored command output. While it does not explicitly exclude other scenarios, it gives clear context and an advantage over a known alternative. There are no sibling tools with similar functionality, so no need for differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_clear_block_glowA

Clear all block highlights set via mc_set_block_glow.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Indicates a destructive clearing action. No annotations exist, but the description adequately conveys behavior, though it could mention any prerequisites like being connected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is front-loaded and contains all necessary information with zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool, the description fully explains its purpose and relation to mc_set_block_glow, omitting nothing essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; schema coverage is 100% and description adds no parameter info, which is sufficient. Baseline for 0 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'clear' and specific resource 'block highlights' are provided, with explicit reference to its counterpart mc_set_block_glow, distinguishing it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States clear purpose to undo mc_set_block_glow, implying when to use. No explicit when-not, but the context is clear as a complementary tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_connectA

Connect to a running Minecraft instance with the DebugBridge mod. Optional - other runtime tools auto-connect if needed. Useful to specify a non-default port, reconnect to a different instance, or get session info.

If port is not specified, scans ports 9876-9886 to find the mod. Use reset=true to disconnect and clear state before reconnecting.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoWebSocket port. Default: scan 9876-9886
resetNoDisconnect and clear state before connecting (for switching instances)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description explains port scanning, reset behavior, and auto-connect. Could detail session info more, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficiently structured with primary purpose first, then optional uses, then parameter-specific guidance. No extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequately covers connection behavior for a simple tool with full schema coverage. Missing detail on what 'session info' entails, but reasonable given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning beyond schema by explaining port scanning range and reset usage. Schema descriptions are already good, and description reinforces them with examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Connect to a running Minecraft instance with the DebugBridge mod.' and differentiates from siblings like mc_quit_client and mc_leave_server.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context on when to use manually (non-default port, reconnect, get session info) and mentions auto-connect behavior. Lacks explicit when-not to use but is sufficiently informative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_entity_detailsA

Get full details for one entity by id (the id field returned by mc_nearby_entities). Includes equipment slots with damage and custom names, mounted vehicle, passengers, attributes, and frame contents where applicable.

Returns {gone: true} if the entity has despawned or its chunk has unloaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityIdYesEntity id from mc_nearby_entities or mc_looked_at_entity.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses what information is included (equipment slots with damage, custom names, mounted vehicle, passengers, attributes, frame contents) and the special return case ({gone: true}) for despawned or unloaded entities. No annotations are provided, so the description carries full burden and does it well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences covering main purpose, included details, and edge case. Every sentence adds value, and the information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers the tool's behavior well but does not specify error handling for invalid ids beyond the gone case. It is fairly complete for a single-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the single parameter with a basic description. The tool description adds context by specifying the id sources (mc_nearby_entities or mc_looked_at_entity), adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get full details for one entity by id'. It specifies the source of the id (from mc_nearby_entities) and distinguishes from sibling tools like mc_nearby_entities (listing) and mc_looked_at_entity (getting looked-at entity).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use the tool (to get details for a specific entity) and what the id should come from. It does not explicitly state when not to use it or mention alternatives, but the context is clear given sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_executeA

Execute GROOVY code in the Minecraft session (the runtime migrated from Lua to Apache Groovy 5 in mid-2026 — see the migration note at the end if you knew the old surface). The binding is persistent: undeclared assignments (x = 5) survive to later calls; def x is script-local.

PREFER NATIVE TOOLS WHERE POSSIBLE — they're faster and avoid script overhead:

  • Player state (x/y/z/yaw/pitch/look/velocity/vehicle/raycast target/world): mc_snapshot

  • Nearby entities or one entity's details: mc_nearby_entities / mc_entity_details

  • Nearby block entities (signs, chests, etc.): mc_nearby_blocks / mc_block_details

  • Open screen / inventory contents: mc_screen_inspect

  • Recent chat: mc_chat_history

  • Item textures: mc_get_item_texture (by slot or by id) Reach for mc_execute when you need to explore the Java API or do something the native tools don't cover.

Pre-bound globals: mc (Minecraft instance), player, level — plus the "java" helper.

Mojang names everywhere, on every Minecraft version: obj.foo reads a field (JavaBean getter fallback), obj.foo(args) calls a method. Overloads resolve by argument types; decimal literals coerce to double/float params.

Minecraft classes can't be named directly on obfuscated builds — load them via java.type: def Vec3 = java.type('net.minecraft.world.phys.Vec3'); construct with Vec3(1, 2, 3) or Vec3.create(1, 2, 3). (Single-quote class names: double-quoted GStrings interpolate the $ in inner-class names.)

The "java" helper provides:

  • java.type(className) - class handle for statics + construction, by Mojang name

  • java.list(x) - Java collection/array -> Groovy List (use for iteration)

  • java.typeName(obj) - the Mojang class name

  • java.isNull(obj) - null check

  • java.ref(refId) - retrieve a stored object reference ($ref_N from results)

  • sync { ... } - run the closure ON THE GAME THREAD in one hop. Use it to batch bulk loops (hundreds of entities/slots run in milliseconds instead of one thread-hop per call): sync { java.list(level.entitiesForRendering()).collect { java.typeName(it) } }

Reflection helpers for exploring API:

  • java.describe(obj) - full dump: class, fields, methods, supers

  • java.methods(obj, [filter]) - list methods (optional name filter)

  • java.fields(obj, [filter]) - list fields (optional name filter)

  • java.supers(obj) - class hierarchy and interfaces

  • java.find(pattern, [scope]) - search mappings for classes/methods/fields

Plain JDK classes work natively (System.currentTimeMillis(), new File(path).text = "..."). Sandbox: Runtime / ProcessBuilder / java.net.* are blocked; file I/O is allowed. Caveat: bridge-wrapped Minecraft objects don't auto-unwrap when passed to NATIVE Java calls like new File(wrappedFile, name) — pass strings/primitives or unwrap with wrapped.getTarget(). Bridge-dispatched calls (anything on mc/player/level or a java.type class) unwrap arguments automatically.

Use "return " to get a value back; println/print output is captured. Returned Minecraft objects serialize as {className, ref, toString, fields} — resume them later with java.ref(ref).

timeoutMs: optional per-call deadline in ms (default 10000, max 300000 = 5 min). Bump it for bulk reflection or heavy file I/O — but prefer sync{} batching or a native tool over raising the timeout.

MIGRATING FROM THE OLD LUA SURFACE (pre-2026-06): obj:method(args) -> obj.method(args); java.import(name) -> java.type(name); java.new(Cls, args) -> Cls(args) or Cls.create(args); java.iter/java.array -> java.list; java.typeof -> java.typeName; java.cast - removed (dispatch walks the runtime hierarchy, no cast needed); io.open(...) -> new File(...); os.time() -> System.currentTimeMillis(); print(x) -> println x; pcall -> try/catch; local x -> def x; {a = 1} tables -> [a: 1] maps and [1, 2, 3] lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesGroovy code to execute
timeoutMsNoOptional per-call execution deadline in milliseconds. Range 1000-300000, default 10000 (10s). Use a longer value for bulk reflection or heavy file I/O.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description thoroughly covers persistent binding, sandbox restrictions, thread hopping, return value handling, serialization, timeout, and migration from Lua.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but well-structured, front-loaded with key usage guidance and progressive detail. Every section earns its place, though minor redundancy possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given complexity, no annotations or output schema, the description covers all critical aspects: return values, error handling, threading, serialization, migration, and sandbox restrictions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds valuable context for both parameters: code is Groovy script with persistence, timeoutMs has default and usage tips.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Execute GROOVY code in the Minecraft session' and distinguishes from sibling tools by listing preferred native tools for specific tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to prefer native tools when possible, lists alternatives for common tasks, and specifies when to use mc_execute (exploring Java API or unsupported cases).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_find_hierarchyA

Find classes that extend (subclasses) or implement (implementors) a given class or interface. Useful for understanding class inheritance relationships.

Results are capped (default 200, max 5000). Pass limit to widen.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional: max results to return (default 200, ceiling 5000). Non-positive or non-finite values fall back to the default.
versionNoOptional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version.
classNameYesFully qualified class or interface name (e.g., "net.minecraft.world.entity.Entity", "net.minecraft.world.item.Item")
directionYessubclasses = classes that extend this class, implementors = classes that implement this interface

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description provides transparency about result limits (default 200, max 5000) and the limit parameter. It does not mention side effects, but as a query tool, this is adequate. No contradiction with annotations (none provided).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The purpose is front-loaded, and important constraints are in the second sentence. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description does not specify the return format (e.g., list of class names). However, the tool's simplicity and the fact that it's a search tool make this acceptable. It covers purpose, parameters, and limits well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds context beyond the schema: it explains the default and max for limit, and gives examples for className. The direction parameter is clarified with examples. This adds meaningful value to the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'find' and the resource 'classes that extend or implement a given class/interface'. It distinguishes between 'subclasses' and 'implementors', which differentiates it from sibling tools like mc_find_refs and mc_list_classes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Useful for understanding class inheritance relationships', which implies when to use the tool, but does not explicitly state when not to use it or provide alternatives. Sibling tools are not mentioned, so guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_find_refsA

Find callers (who calls this method) or callees (what this method calls) using the callgraph database. Useful for understanding code dependencies.

Results are capped (default 100, max 5000). Pass limit to widen.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional: max results to return (default 100, ceiling 5000). Non-positive or non-finite values fall back to the default.
versionNoOptional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version.
classNameYesFully qualified class name (e.g., "net.minecraft.client.MinecraftClient")
directionYescallers = who calls this method, callees = what this method calls
methodNameYesMethod name to find references for

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses result capping (default 100, max 5000) and the effect of the limit parameter, but does not mention whether the operation is read-only, or any required permissions or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and contains no extraneous information. Every sentence contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters and no output schema, the description covers core purpose and capping behavior. It could mention return format or error cases, but overall is adequate for a relatively simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying the default and maximum for the limit parameter, and implies the direction parameter's enum values. However, other parameters are adequately described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool finds callers or callees using the callgraph database, with a specific verb and resource. It distinguishes between two reference directions, making purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for understanding code dependencies but does not explicitly state when to use this tool over sibling tools like mc_find_hierarchy or mc_get_method. No direct comparison or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_get_classA

Get info about a Minecraft or Fabric API class.

Use the "view" parameter to control the response size:

  • "summary" (default): hierarchy + counts + one-line method/field signatures. Always fits in the response budget; pick this first.

  • "methods": hierarchy + every method signature (no bodies, no fields).

  • "fields": hierarchy + every field declaration (no methods).

  • "full": full decompiled source. Big classes (e.g. ClientPacketListener) may exceed the response budget — start with "summary" and only ask for "full" when you need the implementation.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoHow much to return. Default "summary".
versionNoOptional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version.
classNameYesFully qualified class name (e.g., "net.minecraft.client.MinecraftClient")

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that 'full' views may exceed the response budget for large classes, and describes the variations in information returned for each view. Without annotations, it carries the full burden, but it does not mention error cases (e.g., class not found) or version-dependent behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise at about 10 lines, front-loaded with the core purpose, and uses a clear bullet-like list for the view parameter options. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return types for each view sufficiently (e.g., 'hierarchy + counts + one-line method/field signatures'). It does not detail the exact response structure or error handling, but provides enough for the agent to choose appropriately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by detailing what each view option returns (e.g., 'summary' gives one-line signatures, 'methods' gives method signatures) and suggesting an order of use, going beyond the schema's enum descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Get info about a Minecraft or Fabric API class' which clearly identifies the action and resource. It distinguishes from sibling tool mc_get_method by focusing on classes rather than methods, though it doesn't explicitly exclude other class-related tools like mc_list_classes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on using the 'view' parameter: start with 'summary' as it always fits the budget, and only use 'full' when needed. This helps the agent avoid exceeding response limits. However, it does not discuss when to use this tool versus alternatives like mc_get_method.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_get_entity_item_textureA

Render an item carried by another entity (slot is "mainhand", "offhand", "head", "chest", "legs", or "feet") as a PNG you can see directly. Pair with mc_nearby_entities to find ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
slotYes
entityIdYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, and the description lacks details on failure modes (e.g., missing entity, empty slot), side effects, or authentication needs. It only states the output is a viewable PNG.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence plus a short recommendation, using minimal words. It is front-loaded with the core purpose and slot enumeration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description omits return structure (e.g., URL or data format). It does not mention error handling or prerequisites, leaving gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 0%, so the description must compensate. It explains the slot enum values but does not clarify the entityId parameter beyond suggesting a source (nearby_entities). More details on entityId source would improve.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs and nouns: 'Render an item carried by another entity' and enumerates slot options. It distinguishes from sibling tools like mc_get_item_texture by focusing on entity-attached items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It advises pairing with mc_nearby_entities to find entity IDs, indicating typical usage. However, it does not explicitly state when to avoid this tool or contrast with other rendering tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_get_item_textureA

Render the item in the player's inventory slot N as a PNG you can see directly. Honors damage / CustomModelData resource-pack overrides on 1.21.11; falls back to the baked sprite on 1.19. Returns the rendered PNG plus a one-line text caption with dimensions + sprite name.

ParametersJSON Schema
NameRequiredDescriptionDefault
slotYesInventory slot index (0-35 main inv, 36-39 armor, 40 offhand).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses version-specific behavior (honors CustomModelData, fallback on older versions) and output format (PNG + caption). It does not cover permissions or side effects, but for a read operation this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with action and output, no unnecessary words. Highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only one parameter and no output schema, the description covers version differences, output format, and return content. Complete enough for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds no extra meaning beyond the schema's field description for 'slot'. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renders an item in a specific inventory slot as a PNG, with version-specific behavior. It distinguishes from siblings like mc_get_entity_item_texture and mc_get_item_texture_by_id by focusing on player inventory slot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus siblings (e.g., mc_get_item_texture_by_id). There is no mention of when not to use it or alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_get_item_texture_by_idA

Render the default texture for an item registry id (e.g. "minecraft:diamond_pickaxe") as a PNG you can see directly. No inventory slot required.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesRegistry id like "minecraft:diamond".

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description partially addresses behavioral traits: it mentions output format (PNG) and the fact that no inventory slot is required. However, it does not disclose error handling, permission needs, or limits, leaving some gaps for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the action and a key constraint. Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers the essential purpose, input, output format, and a usage nuance. It lacks only minor details about error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description adds a concrete example and context ('registry id'), slightly enriching the parameter meaning beyond the schema. However, the added value is modest, consistent with baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renders the default texture for an item registry id as a PNG, with a concrete example. It distinguishes from siblings by specifying 'default texture' and 'no inventory slot required', although the difference from mc_get_item_texture is not fully explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like mc_get_item_texture or mc_get_entity_item_texture. The description implies a specific use case but does not provide context for when-not or alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_get_methodA

Get the source code for a specific method in a class, with surrounding context. Useful for understanding method implementation details.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoOptional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version.
classNameYesFully qualified class name (e.g., "net.minecraft.client.MinecraftClient")
methodNameYesMethod name (e.g., "tick", "render", "onUse")

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns source code with context and implies a read-only operation, but does not detail what 'surrounding context' entails, error behavior, or any access requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence followed by a short utility note. Every word adds value, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and 3 simple parameters. The description explains purpose and utility but omits details about return format (e.g., string of code) and potential errors (e.g., method not found). It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no extra semantic detail beyond the schema; it only mentions the tool's output context, not the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'source code for a specific method in a class', and includes the nuance 'with surrounding context'. It distinguishes from siblings like mc_get_class (whole class) and mc_search (broad search).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage ('useful for understanding method implementation details') but does not provide explicit guidance on when to use this tool versus alternatives like mc_get_class or mc_find_refs. No when-not-to-use or alternative mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_join_serverA

Join a multiplayer server by address ("host" or "host:port"). Disconnects from the current world/server first if needed, so this changes the user's play session — don't point it at a new server without being asked. The server's resource pack is pre-accepted by default so the join doesn't stall on the confirmation prompt.

The bridge ack means the connect attempt has started — current bridges defer it until the client has settled (no startup/reload overlay), so a join issued right after client launch is safe and may take some extra seconds to ack. By default this also polls until the player is actually in-world: success when a game snapshot shows a player, failure when a DisconnectedScreen appears (its title is returned as the reason). When called from inside a world, the poll first waits for the old session to drop so a stale snapshot of it can't masquerade as the new join. Set wait=false to just fire the join and return.

For repeated automated test runs, prefer a local throwaway server over a live community server — live servers have nondeterministic worlds, other players, and rules about automation.

Requires session_control_enabled=true in the DebugBridge config.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNoPoll until in-world / disconnected before returning. Default true.
addressYesServer address, "host" or "host:port" (e.g. "localhost:25565")
timeoutSecondsNoHow long to wait for the join to complete. Default 60.
acceptResourcePacksNoPre-accept the server resource pack. Default true.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: disconnects current session, pre-accepts resource packs, bridge ack mechanism, polling logic, and handling of wait flag. No contradictory statements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with front-loaded purpose and logical breakdown of behaviors. While detailed, some paragraphs (e.g., bridge ack) could be slightly more concise, but overall efficient for required depth.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters and no output schema, the description fully covers tool behavior, side effects, prerequisites, and success/failure indicators (snapshot vs DisconnectedScreen). No gaps for agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions, but the description adds meaningful context for parameters like 'wait' (explains polling behavior) and 'acceptResourcePacks' (pre-accepted by default). Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Join a multiplayer server by address', provides scope (disconnects current world), and distinguishes from sibling tools like mc_leave_server and mc_connect by specifying the action and side effects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (joining a server), when not to (don't point without being asked), and provides specific guidance for automated tests (prefer local server), plus mentions required config setting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_leave_serverA

Leave the current world or server and return to the title screen. If not in a world, it still resets whatever menu screen is open back to the title screen. This ends the user's current play session — only do it when asked, or as part of a dev loop the user set up.

Fire-and-acknowledge: the ack means the disconnect was queued on the game thread, not that it finished. Requires session_control_enabled=true in the DebugBridge config.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, the description fully bears the burden of behavioral disclosure. It accurately describes the fire-and-acknowledge semantics (ack does not mean disconnect finished) and the config requirement. No omissions or contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two short paragraphs. The first sentence captures the core action, followed by edge cases, usage guidance, and behavioral notes. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description covers all essential aspects: what it does, when to use, behavioral nuance (fire-and-ack), and prerequisite config. It feels complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so per guidelines the baseline is 4. The description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: leaves the current world/server and returns to the title screen. It distinguishes itself from quitting the entire client by specifying 'end the user's current play session' and from other tools like mc_quit_client. The edge case of resetting menu screens is also mentioned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'only do it when asked, or as part of a dev loop the user set up,' providing clear usage guidance. It also notes the required configuration setting (session_control_enabled=true). While it doesn't explicitly state when not to use it, the context is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_list_classesA

List all classes under a specific package path. Returns class names and their source locations. Use this to discover classes in a package hierarchy.

Results are capped (default 200, max 5000). Pass limit to widen.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional: max results to return (default 200, ceiling 5000). Non-positive or non-finite values fall back to the default.
versionNoOptional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version.
packagePathYesPackage path to list classes from (e.g., "net.minecraft.client", "net.minecraft.world.entity"). Matches exact package and all subpackages.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes result cap (default 200, max 5000), the effect of limit parameter, and that it matches exact packages and subpackages. No annotations provided, so description carries full burden; it does a good job disclosing relevant behaviors without contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: first defines purpose, second adds return details, third explains limit behavior. No fluff, every sentence adds value. Front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, it explains return format (class names and source locations) adequately. Could mention potential errors or more detail on the result structure, but for a list tool this is sufficient. The cap and version context help completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions; description adds context like default/max for limit, version fallback, and subpackage matching. These details go beyond the schema fields, providing meaningful additional guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'List all classes under a specific package path' and differentiates from siblings like mc_list_packages (packages) and mc_get_class (single class). The description specifies the verb (list), resource (classes), and scope (under a package).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to discover classes in a package hierarchy,' giving clear context. However, it does not explicitly mention when not to use or alternatives, though the sibling set implies them. Could be improved with a direct comparison to mc_get_class or mc_list_packages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_list_packagesA

List all available packages. Optionally filter by namespace (minecraft or fabric). Use this to discover package structure.

Results are capped (default 500, max 5000). Pass limit to widen.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional: max results to return (default 500, ceiling 5000). Non-positive or non-finite values fall back to the default.
versionNoOptional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version.
namespaceNoOptional: filter by namespace (minecraft or fabric)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions result caps (default 500, max 5000) and the ability to widen with 'limit'. This adds behavioral context beyond the schema, but does not disclose other potential behaviors like permissions or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose, filter option, and limits. Every sentence earns its place with no fluff. Front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 optional params, no output schema), the description covers the core behavior and parameters. It could mention the return structure (e.g., list of package names/IDs) but is adequate for a discovery tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. The description adds context for 'limit' (results capped, default/max, widening) and 'namespace' (minecraft or fabric), but largely reiterates schema info. No added meaning for 'version'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and resource 'packages', and specifies optional filtering by namespace. It distinguishes from sibling tools by focusing on package discovery.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context: 'Use this to discover package structure.' It implies when to use but does not explicitly state when not to use or provide alternatives. However, no similar sibling tools exist, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_looked_at_entityA

Returns the entity id the player is currently aiming at, or null if none is within range. Useful for "what is that thing?" questions where the user gestures at an entity in the world. Pair with mc_entity_details.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoRaycast distance in blocks. Default 64.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions range and default but does not disclose other behavioral aspects like prerequisites (player must be in world) or failure modes. It is adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose. No redundant information; every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with one optional parameter and no output schema. Description covers purpose, null case, and usage hint. Could mention return type, but overall adequate for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (one parameter with description). Main description does not add extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it returns entity ID player is aiming at, or null. It distinguishes from siblings by specifying the target (what the player is looking at) and suggests pairing with mc_entity_details, which covers a different use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly states usefulness for 'what is that thing?' questions and recommends pairing with mc_entity_details. It implies when to use but does not explicitly state when not to use or list alternatives like mc_block_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_nearby_blocksA

Get nearby block-entities (signs, chests, banners, beacons, hoppers, furnaces, skulls, etc.) — the blocks worth browsing for debugging. Plain terrain (dirt, stone) is intentionally excluded.

Returns x, y, z, blockId (e.g. "minecraft:oak_sign"), type (Mojang class name), and distance for each. Use mc_block_details to drill in.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax entries returned. Default 100.
rangeNoSearch radius in blocks. Default 16.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. Discloses exclusion of plain terrain, return fields, and that it is for debugging. Does not mention read-only nature or performance, but covers key behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise paragraphs: first states purpose and exclusion, second details return fields and suggests follow-up tool. No fluff, well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, description explains all returned fields (x,y,z, blockId, type, distance). Mentions sibling tool for deeper investigation. Complete for a simple query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The tool description adds no additional meaning beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Get nearby' with specific resource 'block-entities', lists examples (signs, chests, etc.), and explicitly states plain terrain is excluded. Distinguishes from sibling mc_nearby_entities by focusing on blocks versus entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States use for debugging and points to mc_block_details for details. Implicitly excludes plain terrain but does not explicitly contrast with mc_nearby_entities or provide when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_nearby_entitiesA

Get nearby entities in the world (mobs, items, projectiles, players, etc.). Returns id, type (Mojang class name), position, distance, and a primaryEquipment summary (held item / framed item / displayed item) where applicable.

Prefer this over iterating entities via mc_execute — no script round-trip, and the summary shape is already curated. (If you do script it, batch the loop in sync { } .) Use mc_entity_details to drill into a specific entity by id.

Set includeIcons=true to also receive a top-level icons map keyed by itemId ({base64Png, width, height, spriteName}) for every primaryEquipment item — lets you see what entities are holding/displaying without per-entity mc_get_entity_item_texture calls. Deduplicated across entities.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax entries returned. Default 100.
rangeNoSearch radius in blocks. Default 64.
includeIconsNoRender each unique primaryEquipment item's icon. Default false.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that the tool returns curated data and an optional icons map, and clarifies deduplication. Lacks mention of rate limits or performance, but is otherwise transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise paragraphs: first states core purpose and return, second gives usage guidance and optional feature. No redundant sentences, well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description sufficiently explains the return shape and optional icons. Combined with full param coverage, it is complete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters have schema descriptions (100% coverage). The description adds context: includeIcons explanation and deduplication behavior, enhancing beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves nearby entities (mobs, items, etc.) and lists returned fields (id, type, position, distance, primaryEquipment). It distinguishes from sibling tools like mc_execute and mc_entity_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to prefer this over iterating via mc_execute, and directs to mc_entity_details for specific entity details. Also explains the includeIcons option as an alternative to per-entity texture calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_quit_clientA

Gracefully shut down the entire Minecraft client. This tears down the user's whole play session, including any world or server they're in — only do it when asked, or as part of a dev loop the user set up (typically the quit step of build → deploy → quit → launch → mc_wait_for_bridge; see the mcdev://guides/dev-loop resource).

Fire-and-acknowledge: the WebSocket is expected to drop moments after the ack (that counts as success). By default the tool then waits for the client to be truly gone: it resolves the PID listening on the bridge port before quitting, polls until the port stops listening, then until that process exits — so on success it's safe to relaunch immediately, even through launchers that track the instance (Prism silently ignores --launch while the old process lives). When the PID can't be resolved (no lsof, permissions), it falls back to port-close-only and the result says so — the JVM can outlive the port by a few seconds, so in that case confirm the process exited yourself (pgrep / kill -0) before relaunching. Requires session_control_enabled=true in the DebugBridge config.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitForExitNoWait until the client is actually gone — bridge port closed, then the client process exited (when its PID could be resolved) — before returning. Default true.
timeoutSecondsNoHow long to wait for the whole shutdown (port close + process exit). Default 30.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully covers behavioral traits: the graceful shutdown process, fire-and-acknowledge mechanism, wait fallbacks, PID resolution, and requirement for session_control_enabled=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet comprehensive, with the core purpose front-loaded and all necessary details included without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and two parameters, the description is complete: it covers shutdown process, wait behavior, fallbacks, requirements, and references a guide for deeper context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the schema by explaining the wait mechanism, fallback behavior, and recommendations when PID cannot be resolved, enhancing the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Gracefully shut down the entire Minecraft client.' This distinguishes it from siblings like mc_leave_server, which only leaves a server without quitting the client.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: 'only do it when asked, or as part of a dev loop...' and references a guide. It implies not to use it casually but does not explicitly name alternatives like mc_leave_server.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_record_videoA

Capture a short burst of the Minecraft client framebuffer for debugging temporal rendering issues — animation glitches, shader bugs, particles, sub-tick artifacts that mc_screenshot can't resolve. Use the Read tool to view the result.

Two output modes:

  • "grid" (default): one composed JPEG laid out as a frame grid. Best for Claude — the whole recording in a single Read.

  • "frames": N separate JPEGs. Use only when you need to inspect individual frames closely.

Caps (validated mod-side, request rejected if exceeded):

  • frames: 1..300 (≈5 s at 60 Hz)

  • interval: "frame" (every render tick) or milliseconds >= 1

  • downscale: integer >= 1 (default 2)

  • quality: [0.05, 1.0] (default 0.75)

Pick interval deliberately. Default to a numeric ms (50–100 ms is usually right) — smooth motion, never drops frames. Use "frame" only when sub-tick detail matters; at that cadence the encoder may fall behind and the response's "dropped" count tells you how many frames were skipped.

The mod and the MCP server must run on the same machine for the returned paths to be readable here. Files land under /debugbridge-recordings//.

ParametersJSON Schema
NameRequiredDescriptionDefault
framesYesNumber of frames to capture, 1..300. Required.
outputNo"grid" (one composed JPEG, default) or "frames" (N separate JPEGs).
qualityNoJPEG quality in [0.05, 1.0]. Default 0.75. In "grid" mode applies once to the composed image.
gridColsNoColumns in grid layout. Default ceil(sqrt(frames)). Only used in "grid" mode.
intervalNo"frame" for every render tick (~60 Hz), or milliseconds (number, >= 1). Default "frame". Recommended: 50–100 ms unless you specifically need sub-tick detail.
downscaleNoInteger downscale factor. Default 2 (half each axis).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: output modes, caps (frames, interval, downscale, quality), that request is rejected if caps exceeded, that 'frame' may drop frames and the 'dropped' response field, and file storage location.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections and front-loads the purpose. It is slightly lengthy but every sentence is informative; minor redundancy in caps listing could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no output schema, no annotations), the description covers all necessary aspects: purpose, parameter behavior, output modes, usage guidance, technical constraints, and differential from siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant value beyond the schema: recommended interval values, default for downscale (2), default quality (0.75), default gridCols calculation, and that quality applies once in grid mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool captures a short burst of the Minecraft framebuffer for debugging temporal rendering issues, explicitly distinguishing it from mc_screenshot for static captures.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when to use (temporal issues), when not to (use mc_screenshot instead), and provides concrete recommendations like defaulting to 50-100 ms interval rather than 'frame', and notes the requirement for mod/server on the same machine.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_screen_inspectA

Snapshot the screen the player currently has open. Returns {open: false} if no screen is displayed; otherwise {open, type, title, ...}.

For container screens (chests, anvils, brewing stands, etc.) also returns {menuClass, slots: [{idx, container, item:{itemId, count, damage, maxDamage, name}}]} in a single native pass — cheaper than iterating slots from a script (one bridge call instead of per-slot traffic).

Set includeIcons=true to also receive a top-level icons map keyed by itemId ({base64Png, width, height, spriteName}) — lets you see every item in the container in one call. Deduplicated across slots so a chest of stone+dirt only renders two icons. Adds a few KB to the response per unique item.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeIconsNoRender each unique item's icon and attach as an icons map. Default false.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses return structure, special handling for containers, and parameter behavior. No destructive or auth details are needed based on tool nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet comprehensive. Every sentence serves a purpose, and the most important information (core function) is front-loaded. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single optional parameter and no output schema, the description covers all essential aspects: what it returns, special cases, and parameter effects. It's complete for an AI agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant value beyond the schema's parameter description. It explains the icons map format, deduplication, and response size impact, giving the agent a clear understanding of what includeIcons does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool takes a snapshot of the currently open screen, distinguishing between no screen, container screens, and others. It uses specific verbs and resource context, and is distinct from sibling tools like mc_screenshot and mc_snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use: to inspect open screens, especially containers where it's cheaper than iterative slot reading. It could be more explicit about when not to use, but overall it's helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_screenshotA

Capture the current Minecraft client framebuffer as a JPEG file on the machine running the mod, and return its absolute path. Use the Read tool to view the image.

The capture runs on the render thread and pauses for at most one frame; the game otherwise continues. Works while the game is paused (returns the last rendered frame).

Defaults are tuned for low-bandwidth visual inspection: downscale=2, quality=0.75. Override only if you specifically need higher fidelity.

The mod and the MCP server must run on the same machine for the returned path to be readable here.

ParametersJSON Schema
NameRequiredDescriptionDefault
qualityNoJPEG quality in [0.05, 1.0]. Default: 0.75.
downscaleNoInteger downscale factor. 1 = full window resolution. 2 = half each axis (default).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that capture runs on the render thread, pauses for at most one frame, works while paused, and requires mod and MCP server on the same machine. No annotations are provided, so the description carries full burden and covers it well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, each adding essential information. Front-loaded with core purpose, then behavior, defaults, and requirement. No redundant or unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple input schema (two optional params, no output schema), the description is fully complete. It explains capture behavior, usage path, and default rationale. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes both parameters with coverage. Description adds value by explaining the defaults and suggesting when to override (higher fidelity). This helps the agent choose appropriate values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it captures the Minecraft client framebuffer as a JPEG and returns its absolute path. Distinguishes from sibling tools like mc_screen_inspect and mc_snapshot by specifying the exact operation and output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on using the Read tool to view the image and notes defaults tuned for low-bandwidth inspection. However, it does not explicitly differentiate when to use this tool over related siblings like mc_snapshot or mc_screen_inspect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_set_block_glowA

Highlight a block in-world (yellow outline on 1.19, vanilla test-highlight on 1.21.11) or remove the highlight. Useful for pointing a specific sign / chest / etc. out to the user. Pair with mc_nearby_blocks to find positions; use mc_clear_block_glow to clear all highlights at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
zYes
glowYestrue to highlight, false to remove this position.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It reveals version-specific behavior (1.19 vs 1.21.11) and the ability to add or remove highlights. Lacks details on persistence or side effects, but sufficient for a simple highlight tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with core purpose, efficient. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and 4 parameters, description covers purpose, usage, version-specific behavior, and cross-tool references. Complete and self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only glow described). Description mentions position parameters implicitly via 'block in-world' and cross-reference to mc_nearby_blocks, but does not add detailed parameter semantics. Some compensation but not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool highlights a block in-world or removes the highlight, specifying version-dependent visual behavior. It distinguishes itself from sibling mc_clear_block_glow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance: useful for pointing out specific blocks, recommends pairing with mc_nearby_blocks for position finding, and directs to mc_clear_block_glow for clearing all highlights.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_set_entity_glowA

Make an entity render with the team-color outline so the user can spot it in-world (or remove the outline). Client-side only — no server authority needed. Pair with mc_nearby_entities to find ids.

Glow may "stick" to a stale id if the entity's chunk unloads; harmless.

ParametersJSON Schema
NameRequiredDescriptionDefault
glowYestrue to outline, false to remove.
entityIdYesEntity id from mc_nearby_entities.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses a key side effect: glow may 'stick' to a stale entity ID if its chunk unloads, but states it is harmless. Also clarifies client-side nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence adds value: purpose, usage context, and a harmless side effect. No redundant or wasteful phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately covers purpose, usage, and side effects for a simple set toggle tool. It could mention return behavior but is not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters. The description adds context for entityId by referencing mc_nearby_entities, but does not provide additional semantic depth beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool makes an entity render with a team-color outline or removes it. This is distinct from sibling tools like mc_set_block_glow which handle block glows, not entity glows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description recommends pairing with mc_nearby_entities to find entity IDs and notes that the tool is client-side only with no server authority needed. This provides clear context but does not explicitly exclude alternative usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_snapshotA

Get a structured snapshot of the current game state. Returns player position, health, food, dimension, game mode, time of day, weather, etc. No scripting needed - quick overview of current state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It describes the return data but does not explicitly state whether the tool is read-only or has side effects. However, it implies a safe read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the main purpose and adding useful details without any redundant or unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description adequately covers the return data but uses 'etc.' which implies incompleteness. Still, it provides sufficient context for an agent to understand the tool's output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the schema coverage is 100% by default. The description adds value by listing expected return fields, providing context beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides a structured snapshot of the game state, listing specific data like player position, health, and weather. It distinguishes from siblings by focusing on a broad overview rather than specific details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for a quick overview and mentions no scripting needed, but does not explicitly state when to use it versus alternatives like mc_nearby_blocks or mc_entity_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_versionB

Manage Minecraft versions for static analysis tools.

Actions:

  • "set": Set the active version (required before using other static tools)

  • "list": Show all initialized versions and their status

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
versionNo(set) Minecraft version to activate (e.g., "1.21.11")

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the two actions and the prerequisite for 'set', but does not describe return values, side effects, or behavior when setting multiple times. Without an output schema, the agent lacks information on what 'list' returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and directly states the purpose followed by a bullet list of actions. It is front-loaded with the overall goal and efficiently conveys the core functionality without extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two actions and two parameters, the description is mostly adequate but lacks return value details and prerequisites like needing to connect first (suggested by sibling 'mc_connect'). Without an output schema, the description should have explained what each action returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The tool description adds minimal value beyond the schema—it repeats the action enum and version example. Since the schema already documents the parameters clearly, the description does not significantly enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it manages Minecraft versions for static analysis tools, with two actions 'set' and 'list' that define the resource and verb. The context distinguishes it from sibling tools which deal with blocks, entities, screenshots, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that 'set' is required before using other static tools, giving a clear usage context. However, it does not provide explicit when-not-to-use or alternatives among siblings, leaving some ambiguity about when to use 'list' versus other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_wait_for_bridgeA

Block until a freshly (re)launched Minecraft client's DebugBridge answers, then connect to it. Sweeps ports 9876-9886 once per second, verifying the answering instance is the expected one — by game directory when known from the previous connection, else by Minecraft version — so a second running instance (e.g. a 1.19 client next to the 1.21 one) is never mistaken for it. Read-only; doesn't require session control.

Use this instead of polling mc_connect yourself after launching the client (typically right after mc_quit_client + a detached launch command — see the mcdev://guides/dev-loop resource). On timeout, the likely causes are a launcher login prompt or a crash during startup.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutSecondsNoGive up after this many seconds. Default 120.
expectedVersionNoOnly accept an instance reporting this Minecraft version (e.g. "1.21.11"). Overrides the identity remembered from the previous connection — use when deliberately switching instances.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It states 'Read-only; doesn't require session control', explains port sweeping and verification logic. However, it doesn't fully detail what happens after connection (e.g., return value or state change), though it is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and well-structured: first sentence states main action, then provides verification details, then usage guidelines. No filler, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should clarify return values. It mentions timeout causes but doesn't specify what the tool returns on success or failure. Given two parameters and simple wait, it's mostly complete but missing output specification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters fully. Description adds context for expectedVersion about overriding previous identity and switching instances, providing extra meaning beyond schema. Timeout is mentioned but without default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool blocks until a freshly launched client's DebugBridge answers then connects. It explicitly distinguishes from polling mc_connect and mentions alternatives, making purpose clear and distinctive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this instead of polling mc_connect yourself' and provides context like after mc_quit_client + launch command, referring to a guide. Also mentions timeout causes, offering clear usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mc_wait_until_in_worldA

Poll until the player is in a world (or the join visibly failed). Checks every second: a game snapshot with a player present means in-world; a DisconnectedScreen means the join failed and its title is returned as the reason; anything else keeps waiting until the timeout.

Use after mc_join_server with wait=false, after a relaunch, or whenever you need to confirm the client finished loading into a world. If you fired the join from INSIDE a world (mc_join_server wait=false), pass requireAbsenceFirst=true: on older bridges the ack comes before the old world tears down, so the first polls can still see its player and report in-world for a join that hasn't happened yet (current bridges ack after teardown — the gate is harmless insurance there). Read-only — doesn't require session control to be enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutSecondsNoGive up after this many seconds. Default 60.
requireAbsenceFirstNoOnly count a player snapshot as in-world after the old session visibly dropped (one successful snapshot without a player). Use when a join was issued from inside a world. Default false.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes polling interval (every second), detection logic (player snapshot vs DisconnectedScreen), timeout behavior, and the nuance of requireAbsenceFirst. No annotations, so full burden carried.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with main purpose first, then details. Could be slightly more concise but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Comprehensive for a polling tool with no annotations or output schema. Covers success, failure, timeout, parameter nuances, and read-only nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage 100%, but description adds context: default timeout of 60 seconds and detailed explanation of requireAbsenceFirst's purpose. Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool polls until the player is in a world or join fails, with a specific verb ('poll until') and resource ('player in world'). It distinguishes from siblings by noting usage after mc_join_server.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (after mc_join_server with wait=false, after relaunch) and when to set requireAbsenceFirst. No explicit exclusion of alternatives, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from game state snapshots (mc_snapshot) to entity/block details (mc_entity_details, mc_block_details) and texture rendering (mc_get_item_texture variants). Even similar tools like mc_get_item_texture and mc_get_entity_item_texture differ by target. No ambiguity.

Naming Consistency5/5

All tools follow the consistent pattern 'mc_verb_noun' using snake_case (e.g., mc_block_details, mc_join_server, mc_screenshot). There are no deviations or mixed conventions, making the naming predictable and easy to navigate.

Tool Count4/5

With 31 tools, the set is larger than average, but the server's scope—covering runtime debugging, static analysis, video recording, and connection management—justifies the count. Each tool earns its place, though a few could potentially be merged without loss of clarity.

Completeness4/5

The toolset covers the core Minecraft development and debugging workflow comprehensively, including player state, entity/block interaction, inventory inspection, item textures, chat history, video capture, class browsing, and version management. Minor gaps exist, such as no direct tool for reading player inventory without scripting, but these are manageable.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A lightweight MCP server that enhances AI agents with tools for codebase analysis, task delegation to sub-agents, multi-agent coordination through chatrooms, and project todo management.
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that gives AI agents structured code understanding and precise code intelligence via local indexing of AST, call graphs, and semantic search.
    76
    4
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    A Model Context Protocol server that gives AI assistants native access to Minecraft mod development tools — decompile, remap, search, and analyze Minecraft source code directly from your AI workflow.
    85
    35
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/use-ai-for-mc/mcdev-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server