mcdev-mcp
Allows executing Groovy scripts inside a running Minecraft instance for live game interaction, including state snapshots, screenshots, world introspection, and more.
Provides a Python scripting guide and wire-protocol reference for driving the DebugBridge mod directly from Python, enabling programmatic control of the Minecraft client.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcdev-mcpshow me the source of EntityPlayer class"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcdev-mcp
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 mappingsSymbol 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-2026Game 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 bysession_control_enabledin the DebugBridge config). Build/launch orchestration is the coding agent's job, guided by themcdev://guides/dev-loopresource and theminecraft-dev-loopskill.Slash Commands — Execute in-game commands (
mc_run_command, opt-in dev tool)Script Execution Logs — Review past
mc_executeruns 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 MCPresources/list+resources/read, with a pointer in the server'sinstructionsso agents know to look.
Related MCP server: MCP Plus
Quick Start
Security note —
initis 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 triggerinit,rebuild,clean, orcallgraph.
1. Initialize in your terminal
# Download, decompile, and index Minecraft sources (~2-5 minutes)
npx mcdev-mcp init -v 1.21.11This command:
Downloads the Minecraft client JAR
Decompiles using Vineflower (pure Java, 8 threads)
Builds the symbol index (classes, methods, fields, inheritance)
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 serveIf 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-mcpRestart 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 ( |
| Recommended. Ships pre-unobfuscated; no ProGuard mapping step. |
Releases |
| Supported. Mojang's official ProGuard mappings are required (downloaded automatically). |
Older releases ( |
| 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.11Verify Installation
npx mcdev-mcp statusNote:
mc_version(withaction: "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 runinit.
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 thisUpgrading from an older version? If you have a previous installation using DecompilerMC, run
npx mcdev-mcp clean --allfirst 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 | Requires |
| - | - |
| ✓ | - |
| ✓ | - |
| ✓ | - |
| ✓ | - |
| ✓ | - |
| ✓ | - |
| ✓ | ✓ |
mc_search
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 |
| Find methods that call this method |
| Find methods this method calls |
Note: Requires callgraph to be generated (included in
initby 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 client classes |
| 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 |
| Classes that extend this class |
| 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_clientshuts down the whole Minecraft client, andmc_join_server/mc_leave_serverchange 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 (runCommandEnabledinBridgeConfig) 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 |
| The most recent failed |
| Aggregate error patterns (which messages recur) |
| 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 |
|
|
| Not exposed via the MCPB user_config — set the env explicitly when launching the server. |
|
| (server-side only) | "Log script executions" toggle in the MCPB extension settings (also enables file logging of every |
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/staticinterface 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-callgraphThe 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
callgraphcommand due to Gradle compatibility.
CLI Commands
Invoke via npx mcdev-mcp <command> (or node dist/cli.js <command> from a source checkout).
Command | Description |
| Start the MCP server over stdio (launched by MCP clients — not run by humans) |
| Download, decompile, index Minecraft sources, and generate callgraph |
| Same as above but skip callgraph generation |
| Generate call graph for |
| Show all initialized versions and what stage each one is at |
| Rebuild the symbol index from already-cached sources |
| Also regenerate the callgraph in the same run |
| Remove cached data for one version |
| 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.11Architecture
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 outputHow 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 |
|
Linux |
|
Windows |
|
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 runinitagain — 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 platformReleasing
Releases are tag-driven. Pushing a v* tag triggers GitHub Actions to:
Run the full test matrix and TypeScript checks
Build a single universal MCPB bundle on
ubuntu-latestPublish the package to npm
Create a GitHub Release with the
.mcpbattached
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-tagsThat'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>.mcpbThe 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_refscannot trace calls through reflection, JNI callbacks, or lambda/method references created dynamicallyClient Only: Server-side classes are not included in static analysis
Runtime Tools: Require Minecraft running with the DebugBridge mod installed
Legal Notice
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 toolsmc_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).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| z | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages returned. Default 50. | |
| includeJson | No | Include the Component as JSON for each message. Default false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | WebSocket port. Default: scan 9876-9886 | |
| reset | No | Disconnect and clear state before connecting (for switching instances) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entityId | Yes | Entity id from mc_nearby_entities or mc_looked_at_entity. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Groovy code to execute | |
| timeoutMs | No | Optional 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional: max results to return (default 200, ceiling 5000). Non-positive or non-finite values fall back to the default. | |
| version | No | Optional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version. | |
| className | Yes | Fully qualified class or interface name (e.g., "net.minecraft.world.entity.Entity", "net.minecraft.world.item.Item") | |
| direction | Yes | subclasses = classes that extend this class, implementors = classes that implement this interface |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional: max results to return (default 100, ceiling 5000). Non-positive or non-finite values fall back to the default. | |
| version | No | Optional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version. | |
| className | Yes | Fully qualified class name (e.g., "net.minecraft.client.MinecraftClient") | |
| direction | Yes | callers = who calls this method, callees = what this method calls | |
| methodName | Yes | Method name to find references for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | How much to return. Default "summary". | |
| version | No | Optional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version. | |
| className | Yes | Fully qualified class name (e.g., "net.minecraft.client.MinecraftClient") |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | ||
| entityId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | Inventory slot index (0-35 main inv, 36-39 armor, 40 offhand). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Registry id like "minecraft:diamond". |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Optional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version. | |
| className | Yes | Fully qualified class name (e.g., "net.minecraft.client.MinecraftClient") | |
| methodName | Yes | Method name (e.g., "tick", "render", "onUse") |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Poll until in-world / disconnected before returning. Default true. | |
| address | Yes | Server address, "host" or "host:port" (e.g. "localhost:25565") | |
| timeoutSeconds | No | How long to wait for the join to complete. Default 60. | |
| acceptResourcePacks | No | Pre-accept the server resource pack. Default true. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional: max results to return (default 200, ceiling 5000). Non-positive or non-finite values fall back to the default. | |
| version | No | Optional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version. | |
| packagePath | Yes | Package path to list classes from (e.g., "net.minecraft.client", "net.minecraft.world.entity"). Matches exact package and all subpackages. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional: max results to return (default 500, ceiling 5000). Non-positive or non-finite values fall back to the default. | |
| version | No | Optional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version. | |
| namespace | No | Optional: filter by namespace (minecraft or fabric) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Raycast distance in blocks. Default 64. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries returned. Default 100. | |
| range | No | Search radius in blocks. Default 16. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries returned. Default 100. | |
| range | No | Search radius in blocks. Default 64. | |
| includeIcons | No | Render each unique primaryEquipment item's icon. Default false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| waitForExit | No | Wait until the client is actually gone — bridge port closed, then the client process exited (when its PID could be resolved) — before returning. Default true. | |
| timeoutSeconds | No | How long to wait for the whole shutdown (port close + process exit). Default 30. |
TDQS
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.
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.
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.
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.
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.
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//.
| Name | Required | Description | Default |
|---|---|---|---|
| frames | Yes | Number of frames to capture, 1..300. Required. | |
| output | No | "grid" (one composed JPEG, default) or "frames" (N separate JPEGs). | |
| quality | No | JPEG quality in [0.05, 1.0]. Default 0.75. In "grid" mode applies once to the composed image. | |
| gridCols | No | Columns in grid layout. Default ceil(sqrt(frames)). Only used in "grid" mode. | |
| interval | No | "frame" for every render tick (~60 Hz), or milliseconds (number, >= 1). Default "frame". Recommended: 50–100 ms unless you specifically need sub-tick detail. | |
| downscale | No | Integer downscale factor. Default 2 (half each axis). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| includeIcons | No | Render each unique item's icon and attach as an icons map. Default false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| quality | No | JPEG quality in [0.05, 1.0]. Default: 0.75. | |
| downscale | No | Integer downscale factor. 1 = full window resolution. 2 = half each axis (default). |
TDQS
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.
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.
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.
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.
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.
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_searchA
Search decompiled Minecraft or Fabric API source code for classes, methods, or fields by name pattern.
Each hit returns enough context to make follow-up mc_get_class / mc_get_method calls unnecessary in trivial cases:
class hits: kind (class/interface/record/enum), extends, implements, field/method counts
method hits: full signature including modifiers (public/static/etc.) plus line number
field hits: full declaration including modifiers and type
Pass type="class"/"method"/"field" to filter; defaults to all three.
Results are capped (default 50, max 1000). Pass limit to widen.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional: filter by type (class, method, or field) | |
| limit | No | Optional: max results to return (default 50, ceiling 1000). Non-positive or non-finite values fall back to the default. | |
| query | Yes | The search query - class, method, or field name (or partial name) | |
| version | No | Optional: Minecraft version to use (e.g., "1.21.1"). If not provided, uses the active version set by mc_version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses result capping, default/max limits, and details what each hit returns (class hits: kind, extends, etc.; method hits: signature, line number; field hits: declaration). This is thorough behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose first, then return details, then filtering, then limits. Each sentence adds necessary information without redundancy. It is concise yet comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains return values for all result types. All parameters are covered, and the description provides enough context for an AI agent to use the tool correctly. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 4 parameters. The description adds value by specifying defaults ('defaults to all three') and behavior for non-finite limit values ('Non-positive or non-finite values fall back to default'), which enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb+resource: 'Search decompiled Minecraft or Fabric API source code for classes, methods, or fields by name pattern.' It distinguishes from siblings like mc_get_class and mc_get_method by implying this is for searching by pattern, not for fetching specific items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that type filter defaults to all three and that limit can be widened, providing clear context for usage. However, it does not explicitly state when to use this tool versus alternatives like mc_find_refs or mc_find_hierarchy, though the context of searching by name pattern is implied.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| z | Yes | ||
| glow | Yes | true to highlight, false to remove this position. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| glow | Yes | true to outline, false to remove. | |
| entityId | Yes | Entity id from mc_nearby_entities. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform | |
| version | No | (set) Minecraft version to activate (e.g., "1.21.11") |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutSeconds | No | Give up after this many seconds. Default 120. | |
| expectedVersion | No | Only 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutSeconds | No | Give up after this many seconds. Default 60. | |
| requireAbsenceFirst | No | Only 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
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
An MCP server that gives your AI access to the source code and docs of all public github repos
An MCP server that integrates with Discord to provide AI-powered features.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that supercharges AI assistants with powerful tools for software development, enabling research, planning, code generation, and project scaffolding through natural language interaction.1167101MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents structured code understanding and precise code intelligence via local indexing of AST, call graphs, and semantic search.764Apache 2.0
- AlicenseNot gradedqualityAmaintenanceA 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.8535MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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