You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every tool registered by this mod, grouped by domain. For the canonical JSON Schema of each
tool's input, query tools/list against your running server — the schemas are emitted by the
mod itself from the same code that validates incoming arguments.
Tool names are snake_case and start with the class / concept they operate on
(level_set_time, not mc_world_set_time — Java mod readers will recognize the lineage).
Tools that need a specific Fabric API module declare it in their @McpTool annotation. The
registration filter drops tools whose dependencies aren't loaded, so the tool list returned to
clients always reflects what is actually callable.
"Version range" columns: empty means "no constraint". Compared via Fabric Loader's semantic
version logic — 1.21.11 < 26.1.1.
Threading: every tool's handler submits its Minecraft-API work through the main-thread
executor. From the client's perspective every call is fire-and-forget request/response over
HTTP; the timeout is command_timeout_ms from the config (default 15s).
Grows a vanilla worldgen feature at a position (/place feature) — trees, vegetation, ore veins, geodes, dripstone. Adds natural detail without stamping identical copies.
—
level_place_features_batch
Grows many vanilla worldgen features in one call — the batch form of level_place_feature and the throughput path for a vegetation/detail scatter (features[] of {feature, x, y, z}, optional stop_on_error). One main-thread submission, one rate-limit slot for the whole list. Capped at 4096 entries/call; reports per-entry placed/failed.
—
level_fill_biome
Paints the biome of a region (/fillbiome) — foliage/water tint, mob spawns, climate; optional replace_filter.
Place a single block with optional state properties / NBT.
block_fill_region
Bulk fill (replace, destroy, hollow, outline, keep modes). Auto-tiles any volume past the vanilla 32,768 /fill cap server-side (so large fills never silently no-op); hollow/outline are decomposed into faces. Returns total blocks changed.
block_fill_batch
Apply many fills in one call — the efficient way to place a generated/voxelized build. Each entry is {from:[x,y,z], to:[x,y,z], block:"id[state]", mode?}; each is auto-tiled. Bounded to 8192 entries/call.
block_fill_columns
Materialise a per-column heightmap into terrain in one call — send a compact height grid + small palette instead of thousands of box fills (no 8192-entry cap). Fills stone → subsurface → surface and floods to sea_level. Columns capped at 65,536/call.
block_fill_columns_strata
Like block_fill_columns but bands the deep mass below the subsurface into geological strata (the canyon / mesa / badlands signature) instead of one stone block: strata[] of {block, thickness} top→bottom, base_stone below the deepest band, optional jitter_amplitude/jitter_freq for smooth non-flat band boundaries. Same 65,536-column cap.
block_erode_region
Thermal-erode an existing terrain region (synchronous): reads the live surface, runs talus collapse, then re-materialises surface + subsurface to the new profile. protect_box (with a smoothstep apron) shields built structures so terrain naturalises into them; dry_run reports max/mean height delta with no writes. Same 65,536-column cap.
Async hydraulic (rain-droplet) erosion on the job engine: _start surveys the surface, simulates droplets carving channels/valleys on a worker thread, then (unless dry_run) writes the result back chunked across server ticks, returning a job_id; poll _status for state (ERODING/WRITING/DONE/FAILED) + progress, then read _result once DONE. protect_box + apron shield built structures. Region default 256×256, hard cap 512×512.
block_clone_region
Copy blocks from one box to another (cross-dimension supported).
block_replace_in_region
Replace matching blocks within a box.
block_get_top_y
Highest Y at an (x, z) column for a heightmap (WORLD_SURFACE default, OCEAN_FLOOR, MOTION_BLOCKING, …).
block_scan_region
Scan a bounded region for matching blocks (volume capped at 65,536).
block_scan_summary
Aggregate scan of a box (≤ 1,048,576): material histogram, non-air count, and non-air bounding box — server-side, so no per-block rows flood the client.
block_get_map_color
Base map colour of a block: packed rgb, #RRGGBB hex, r/g/b, palette id.
block_render_region
Render a region to a PNG (iso/side/front/top/hillshade) from block map colours — server-side, no client needed. hillshade is a relief-shaded plan view for terrain (terraces/ziggurats show as flat bands). step downsamples; scale is pixels per voxel. Returns an image content block.
BlockEntity
Name
Description
block_entity_get_nbt
Read block-entity NBT as SNBT.
block_entity_set_nbt
Merge SNBT into a block entity.
block_entity_clear_inventory
Clear container block contents.
Entity
Name
Description
entity_summon
Summon an entity at a position with optional SNBT.
entity_get
Look up an entity by UUID.
entity_query
Query entities by selector.
entity_get_components
Return the entity's component map.
entity_get_nbt / entity_set_nbt
NBT read/write.
entity_teleport
Teleport (cross-dimension; optional facing target). Uses fabric-dimensions-v1 for cross-dimension teleports.
Event payloads are domain-specific JSON objects with at minimum the keys type (matching the
subscribed event type) and timestamp (ISO-8601). See the wire-shape documented at the call
site of each event-type publisher in tools/events/EventWiring.java.
Filters on events_subscribe
The optional filters object on events_subscribe is an exact-match map applied to the event
payload. Example: subscribe to chat messages from one player only:
Filters use direct JsonNode.equals semantics — typed values must match exactly. Use no filters
to receive all events of the subscribed types.
Client (inspection — minecraft-java-client server only)
These tools belong to the client category and are registered only by the client-side
entrypoint (McpClientMod), which runs inside a real, rendered Minecraft client. They are not
present on a dedicated/headless server's minecraft-java endpoint (they are not in
ToolRegistration.ALL_TOOL_CLASSES). They let Claude SEE and INSPECT the world the way a player
does — the actual rendered frame, plus client-side perception the headless server cannot provide.
See configuration.md for how to run the
world (server) and inspection (client) endpoints together.
They are deliberately read-only: they do not move or aim the player. Position and aim the
camera from the server surface (entity_teleport, or command_execute with
tp <player> <x> <y> <z> <yaw> <pitch>), then capture here. Full player agency is a separate,
future scope.
Name
Description
view_capture
Capture the local player's current first-person frame as a PNG image content block — the real client render (textures, lighting, sky, fog, water, entities). Optional downscale (1–8, default 1) shrinks the frame to keep the inline image small. close_screen (default true) dismisses any open GUI — notably the pause/Esc menu that opens when the window loses focus — and lets a clean frame render before capturing, so the shot shows the world; set false to capture the current GUI. (To stop the menu opening on focus loss at all, toggle Pause on Lost Focus off in-game with F3 + P.) Large windows make large PNGs — for the inline-image path (~1 MB cap in some clients) raise downscale or use a smaller window. Returns an error if the client is not in a world (window must not be minimized).
client_status
Local player + session status: in_game, dimension, position, facing (yaw/pitch), health, hunger, held item, and the connected server (or singleplayer).
sense_crosshair
What the crosshair points at right now: NONE/MISS, a block (position, face, block id), or an entity (type, name).
sense_raycast
Raycast from the eye along the current facing; first hit (block or entity) within max_distance (default 20), include_fluids optional.
sense_entities
Entities the client renders within radius (default 16) of the player, with type, name, position, distance; optional type substring filter.
sense_screen
Current GUI state: open screen (class + title) and, when a container other than the inventory is open, a summary of its slot contents.
Known limitations
All 183 registered tools have working adapter implementations against the live Minecraft
server. The notable nuances:
entity_get_components returns an empty map. Vanilla Entity doesn't expose a typed
component view the way ItemStack does in modern Minecraft; a future revision will surface
the Fabric data-attachment map here.
command_register accepts the call but does not actually register a runtime command — the
v0.2.0 wire schema doesn't carry a webhook target. Custom commands will arrive in a later
revision via a command.* event channel.
level_set_time / level_set_weather dispatch through /time set … / /weather … on
the 26.1.x targets because the typed setters were removed from ServerLevel in 26.1
(state moved to ServerClockManager and WeatherData). Functionally identical to the
typed path on 1.21.11.