BlockHand
NPM · @GJLMOTEA/BLOCKHAND-MCP
Minecraft Education Edition MCP server: Agent robot, 24 build shapes, events. No add-on needed.
Available components
Last scanned (7 hours ago)
Scores higher than 72% of npm servers
Category Entertainment and Games
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 30 of 94 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to gjlmotea/blockhand-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 16 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability76
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 6018 tokens (~130/item across 46 items; 44 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management57
- Stability observed for 17 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage84
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 43% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 46 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 −5
- CVE-2023-54404 affects this package: high ▼ security
- Known CVEs: pass → fail ▼ security
- 22 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/@gjlmotea/blockhand-mcp@0.1.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | gjlmotea/blockhand-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/gjlmotea/blockhand-mcp/.github/workflows/release.yml@refs/tags/v0.1.1 |
| Rekor log index | 3319762071 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:b5d19f71b5a64b22f476db48cd322b27e77e977e64654a91716ffd5d5848b4acd1829c7a1bad7912ee92bd6eeafec1a2d1123e43cc839c096752c1ee3 |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 94 packages
| Packages resolved | 94 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
mc_agent_act Agent attack / destroy / till ~107
Act in a direction: attack hits a mob, destroy breaks a block and puts it in the inventory, till turns dirt into farmland. repeat runs it several times in a row. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| delayMs | integer | – | – |
| direction | string | – | – |
| repeat | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_collect Agent collect items ~75
Pick up dropped items near the Agent. Leave item empty to pick up everything. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
| Name | Type | Req | Description |
|---|---|---|---|
| item | – | – | Block ID, for example stone or minecraft:oak_planks |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_create Summon the Agent ~61
Spawn the Agent next to the player. Calling it again when the Agent already exists is safe. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_inventory Agent inventory ~147
Do one thing with the Agent inventory: count reads the amount in a slot, space reads the room left, detail reads item details, drop drops a quantity, dropAll drops everything in a direction, transfer moves items between slots. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| destinationSlot | integer | – | Required for transfer |
| direction | string | – | Required for drop / dropAll |
| quantity | integer | – | Required for drop / transfer |
| slot | integer | – | Required for count / space / detail / drop |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_move Move the Agent ~103
Move the Agent steps blocks in a direction, one command per block. A step blocked by a block fails without stopping the rest. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
| Name | Type | Req | Description |
|---|---|---|---|
| delayMs | integer | – | Delay between steps, so the game has time to finish each move |
| direction | string | yes | – |
| steps | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_place Agent place block ~98
Take a block from an inventory slot (1-27) and place it in a direction. Fails when the slot is empty. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
| Name | Type | Req | Description |
|---|---|---|---|
| delayMs | integer | – | – |
| direction | string | – | – |
| repeat | integer | – | – |
| slot | integer | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_program Run an Agent program ~101
Run a sequence of Agent actions in order as one program. This is the main tool for getting real work done with the Agent: laying a path as it walks, digging a tunnel, tilling a whole field. Each step is reported separately, and it can stop at the first failure.
| Name | Type | Req | Description |
|---|---|---|---|
| delayMs | – | – | Delay between steps; null uses the default of 100 ms |
| steps | array | yes | – |
| stopOnError | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commands | array | yes | – |
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_sense Agent sense surroundings ~82
Read what is around the Agent without changing the world: inspect reads the block type, inspectData reads the block data value, detect checks whether there is a solid block in that direction, detectRedstone checks for a redstone signal. These are the Agent's eyes; look before acting.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | – |
| mode | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_teleport Teleport the Agent to the player ~70
Bring the Agent to the player. Use it to recover the Agent when it is lost, stuck or has fallen into a hole. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_agent_turn Turn the Agent ~78
Turn the Agent left or right in place, 90 degrees each time. times=2 turns it around. The Agent is the robot found only in Education Edition; summon it with mc_agent_create first. Directions are relative to the way the Agent faces, not world directions.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | yes | – |
| times | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_analyze_symmetry Analyze how mirror-symmetric a build is ~286
Check whether a region is symmetric left to right (or front to back), and when it is not, point out **which parts** are not. Use it to grade student builds: the score is the share of symmetric cells, not a gut feeling. How it works: testforblocks only compares by translation, never mirrored, so a mirrored copy is made first with the mirror option of structure save / load and then compared with the original. Warning: this **temporarily writes** to the scratch area: its contents are always backed up first and restored right after the comparison; if the backup fails, it stops without touching the world. scratch must not overlap the analyzed region, or the mirrored copy overwrites the original build. The region is limited by the structure command (64x384x64).
| Name | Type | Req | Description |
|---|---|---|---|
| cellsPerAxis | integer | – | Subdivision when the whole region is not symmetric: n parts per axis, n^3 cells, one command per cell |
| from | object | yes | One corner of the analyzed region |
| mirror | string | – | Mirror axis: x checks left-right symmetry, z checks front-back symmetry, xz requires both |
| scratch | object | yes | Minimum corner of the scratch area; it is overwritten and then restored, and must not overlap the analyzed region |
| to | object | yes | The opposite corner of the analyzed region |
| Name | Type | Req | Description |
|---|---|---|---|
| asymmetricCells | array | yes | – |
| commandsIssued | number | yes | – |
| matchedCells | number | yes | – |
| mirror | string | yes | – |
| score | number | yes | 0-100, the share of symmetric cells |
| scratchRestored | boolean | yes | false means the scratch area was not restored and the world was left changed |
| symmetric | boolean | yes | – |
| totalCells | number | yes | – |
No examples provided.
mc_await_connection Wait for Minecraft to connect ~58
Block until the game connects to the bridge, for at most timeoutSeconds seconds. A timeout is not an error; it just reports connected=false. Call it after asking the user to type /connect.
| Name | Type | Req | Description |
|---|---|---|---|
| timeoutSeconds | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| bufferedEvents | number | yes | – |
| commandState | string | – | – |
| commandsIssued | number | yes | – |
| connectCommand | string | yes | – |
| connected | boolean | yes | – |
| connectedAt | string|null | yes | – |
| connectionCount | number | yes | – |
| encrypted | boolean | yes | – |
| host | string | yes | – |
| inFlightCommands | number | – | Commands sent to the game and still waiting for a reply; the bridge sends one at a time |
| lastCommandResponseAt | string|null | – | – |
| lastCommandTimeoutAt | string|null | – | – |
| listening | boolean | yes | – |
| port | number | yes | – |
| queuedCommands | number | – | Commands queued and not yet sent; greater than 0 means the backlog comes from concurrent calls on the client side, not from the game |
| savedStructures | array | yes | Structures saved during this connection; the game has no command to list structures, so the bridge keeps its own record |
| subscribedEvents | array | yes | – |
| undo | object | – | – |
No examples provided.
mc_blueprint_preview Preview a blueprint build ~46
Compute only, build nothing: group a block-by-block blueprint by block type and report the total block count and the number of merged fill batches.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | – |
| blockCount | number | yes | – |
| blockStates | string|null | yes | – |
| bounds | object | yes | – |
| fillBatches | number | yes | – |
| savedCommands | number | yes | – |
| shape | string | yes | – |
No examples provided.
mc_build_blueprint Build a block-by-block blueprint ~68
Build any form from a list of coordinate -> block entries; identical blocks are merged into the fewest fill commands automatically. Prefer mc_build_shape for geometric shapes; this tool is for pixel art, text, irregular forms, or models converted from external data.
| Name | Type | Req | Description |
|---|---|---|---|
| entries | array | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| plan | object | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_build_preview Preview a shape build ~126
Compute only, build nothing: report how many blocks the shape uses, where its bounding box is, and how many fill commands it splits into. All coordinates are absolute world coordinates; if you do not know where the player is, call mc_query_target first. Building changes the world directly, so check the block count and bounding box with the matching preview tool before you build.
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | Block ID, for example stone or minecraft:oak_planks |
| blockStates | – | – | Optional block states, for example ["stone_type":"granite"] |
| shape | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | – |
| blockCount | number | yes | – |
| blockStates | string|null | yes | – |
| bounds | object | yes | – |
| fillBatches | number | yes | – |
| savedCommands | number | yes | – |
| shape | string | yes | – |
No examples provided.
mc_build_shape Build a shape ~492
Build a shape directly in the world. Block coordinates are merged into the fewest fill commands automatically, so a sphere of radius 20 takes a few hundred commands instead of thirty thousand. [Choose a shape by intent] Basic volumes: box, sphere, ellipsoid, cylinder, cone (topRadius>0 makes a truncated cone), pyramid (sides sets the number of sides, topRadius>0 makes a frustum), prism (regular n-sided prism). Lines and surfaces: line (straight line), curve (smooth curve), disk (disk / ring), tube (cylinder in any direction). Building parts: wedge (single slope), roof (gable / hip), arch, stairs (straight stairs), spiralStairs, polywall (polyline wall / city wall). Terrain and paths: heightfield (rolling ground), ribbon (road / bridge deck). Decoration and forms: torus (ring), helix, cross (plus-shaped column), star (star-shaped column), revolution (solid of revolution). [Easy to confuse; read this first] Slanted columns, beams, pipes -> tube, not cylinder (cylinder only aligns with x / y / z). Walls or fences with right-angle turns -> polywall, not curve (curve is smooth and rounds off right angles). A roof with a ridge -> roof; a single slope or ramp only -> wedge. Stairs that wind around a tower -> spiralStairs; straight up and down -> stairs. Tower bodies, bases or chimneys that are wider at one end -> cone or pyramid with topRadius, not stacked layers of box. Domes, vases, paraboloids, cooling towers and other round forms whose width changes -> revolution with a different profile; no other shape is needed. A stretch of rolling ground -> heightfield; a flat road with a width -> ribbon. If unsure, check the block count and bounding box with mc_build_preview first; it does not touch the world. All coordinates are absolute world coordinates; if you do not know where the player is, call mc_query_target first. Building changes the world directly, so check the block count and bounding box with the matching preview tool before you build.
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | Block ID, for example stone or minecraft:oak_planks |
| blockStates | – | – | Optional block states, for example ["stone_type":"granite"] |
| shape | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| plan | object | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_clone Clone a region ~69
Copy the region from begin to end to destination. cloneMode="move" clears the original. Good for mass-producing a hand-built template.
| Name | Type | Req | Description |
|---|---|---|---|
| begin | object | yes | – |
| cloneMode | – | – | – |
| destination | object | yes | – |
| end | object | yes | – |
| maskMode | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_compare_regions Compare two regions of equal size ~154
Compare a whole region with one command; good for checking whether a student build matches a reference. Comparing block by block hits the MCP host timeout beyond a few hundred blocks; this does not. masked=true ignores air in the source region and only checks that what should be there is there, regardless of anything extra around it; masked=false requires an exact match. Both regions must be the same size; destination is the minimum corner of the target region.
| Name | Type | Req | Description |
|---|---|---|---|
| begin | object | yes | One corner of the source region |
| destination | object | yes | Minimum corner of the target region |
| end | object | yes | The opposite corner of the source region |
| masked | boolean | – | When true, air in the source is ignored |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| identical | boolean | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_effect Apply or clear status effects ~98
action="apply" applies a potion effect; "clear" removes all effects.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | – |
| amplifier | integer | – | – |
| effect | string | – | Required for apply, for example speed or night_vision |
| hideParticles | boolean | – | – |
| seconds | integer | – | – |
| target | string | – | Target selector (@a/@p/@s/@e/@r, optionally with []) or a player name |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_events_catalog List subscribable event names ~47
Return the event names known to work. Mojang does not formally document this list, so subscribing to a name outside it is allowed; it is just marked unverified. No side effects.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| eventNames | array | yes | – |
No examples provided.
mc_events_poll Read received events ~92
Return the events after a cursor. Use afterCursor=0 the first time, then pass back the nextCursor from the previous call to keep reading. dropped greater than 0 means the buffer wrapped around and some events are lost for good; poll more often. No side effects.
| Name | Type | Req | Description |
|---|---|---|---|
| afterCursor | integer | – | – |
| eventName | – | – | Only return this kind of event |
| limit | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| dropped | number | yes | – |
| events | array | yes | – |
| nextCursor | number | yes | – |
No examples provided.
mc_events_subscribe Subscribe to game events ~82
Start receiving a kind of game event (for example PlayerMessage for chat, BlockPlaced for placed blocks, PlayerTravelled for movement). Events go into a ring buffer; read them later with mc_events_poll. This is how the AI perceives what the player is doing. Subscriptions are renewed automatically after a reconnect.
| Name | Type | Req | Description |
|---|---|---|---|
| eventName | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| eventName | string | yes | – |
| subscribedEvents | array | yes | – |
| verified | boolean | yes | – |
No examples provided.
mc_events_unsubscribe Unsubscribe from game events ~33
Stop receiving a kind of event. Events already in the buffer are kept.
| Name | Type | Req | Description |
|---|---|---|---|
| eventName | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| eventName | string | yes | – |
| subscribedEvents | array | yes | – |
No examples provided.
mc_feedback Play a sound or particle ~75
Play a sound or spawn a particle effect at a coordinate, to give players immediate sensory feedback.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Sound or particle ID, for example random.levelup or minecraft:heart_particle |
| kind | string | yes | – |
| position | – | – | – |
| target | string | – | Who hears it when kind="sound" |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_fill Fill a box ~166
Fill the box from from to to with one kind of block. Bedrock allows at most 32768 blocks per fill; beyond that use mc_build_shape, which splits the work into batches automatically. mode=hollow fills the six outer faces and clears the inside to air; mode=outline replaces only the six outer faces and leaves the inside as it is.
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | Block ID, for example stone or minecraft:oak_planks |
| blockStates | – | – | Optional block states, for example ["stone_type":"granite"] |
| from | object | yes | – |
| mode | – | – | – |
| replaceBlock | – | – | Only used when mode="replace" |
| replaceStates | – | – | Optional block states, for example ["stone_type":"granite"] |
| to | object | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_gamemode Change game mode ~56
Switch the target to survival, creative, adventure or spectator.
| Name | Type | Req | Description |
|---|---|---|---|
| mode | string | yes | – |
| target | string | – | Target selector (@a/@p/@s/@e/@r, optionally with []) or a player name |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_give Give items ~97
Give a target a number of items. To give the Agent something to place, give it to the player first and then hand it to the Agent.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | – | – |
| data | – | – | – |
| item | string | yes | Block ID, for example stone or minecraft:oak_planks |
| target | string | – | Target selector (@a/@p/@s/@e/@r, optionally with []) or a player name |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_message Show a message in the game ~86
say posts to everyone in chat, tell sends a private message, title / subtitle / actionbar show large text on screen. Use it to talk to players while teaching or reporting progress.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | – | – |
| message | string | yes | – |
| target | string | – | Target selector (@a/@p/@s/@e/@r, optionally with []) or a player name |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_player_action Miscellaneous player actions ~118
kill kills the target, clear empties the inventory (optionally one item only), xp gives experience, ability turns the worldbuilder / mayfly / mute abilities on or off.
| Name | Type | Req | Description |
|---|---|---|---|
| ability | string | – | – |
| action | string | yes | – |
| amount | integer | – | Required for xp |
| enabled | boolean | – | – |
| item | – | – | Optional for clear |
| target | string | – | Target selector (@a/@p/@s/@e/@r, optionally with []) or a player name |
| unit | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_query_target Query entity position and facing ~118
Query the coordinates, facing and unique ID of entities by selector, returned as parsed JSON. This is the standard way to get the current position of the player or the Agent; ask this before building so you know where to build. It defaults to @p (the nearest player) rather than @s: commands sent over the WebSocket have no entity identity, so @s cannot be resolved in some cases.
| Name | Type | Req | Description |
|---|---|---|---|
| target | string | – | Target selector (@a/@p/@s/@e/@r, optionally with []) or a player name |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| details | – | – | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_read_block Read which block is at a coordinate ~149
Report what is actually at a coordinate, without you having to guess first. Education has no command to read a block, so this runs testforblock with air as a sentinel; when the guess is wrong, the game message names the actual block. Note: it returns the **localized display name** (for example "Dirt", or "泥土" in a Chinese game), not the block ID (dirt), so it cannot be fed back to mc_set_block; to check by ID, use mc_test_block. The message format has no official guarantee; when it cannot be parsed, this tool returns an error with the raw message instead of guessing.
| Name | Type | Req | Description |
|---|---|---|---|
| position | object | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | Localized display name; when it cannot be parsed, this tool returns an error instead of null |
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| isAir | boolean | yes | – |
| ok | boolean | yes | – |
| raw | string|null | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_run_command Run one slash command ~84
Send one raw slash command, for anything this server has no dedicated tool for. Single line only, no newline chaining. Refuses wsserver / connect / closewebsocket, including when wrapped in execute (that would cut this bridge). The leading slash is optional.
| Name | Type | Req | Description |
|---|---|---|---|
| command | string | yes | For example "time set day" or "/give @s diamond 1" |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| risk | string | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_run_commands Run several slash commands in order ~157
Send several raw commands in order; each one passes the command policy on its own. Good for hand-written macros; for many blocks use mc_build_shape or mc_build_blueprint, which merge them into the fewest fill commands automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| commands | array | yes | – |
| delayMs | integer | – | – |
| reportFailuresOnly | boolean | – | Return only the failed commands and skip the successful ones. Per-command results of a large batch (for example 200 fill commands) easily run past ten thousand tokens, and most of them just say "N bl… |
| stopOnError | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| elapsedMs | number | yes | – |
| failed | number | yes | – |
| firstFailure | – | yes | – |
| issued | number | yes | – |
| ok | boolean | yes | – |
| outcomes | array | yes | – |
| succeeded | number | yes | – |
| undo | object | – | – |
No examples provided.
mc_set_block Place one block ~87
Place one block at a coordinate. For many blocks use mc_fill or mc_build_shape instead; calling this tool block by block is very slow.
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | Block ID, for example stone or minecraft:oak_planks |
| blockStates | – | – | Optional block states, for example ["stone_type":"granite"] |
| handling | – | – | – |
| position | object | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_status Read bridge and connection status ~72
Report the WebSocket bridge, whether the game is answering commands (commandState), the last reply and timeout times, the /connect command and subscribed events. connected only means the network link is up; timed-out means a recent command got no reply, so do not assume the game can still act. No side effects.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| bufferedEvents | number | yes | – |
| commandState | string | – | – |
| commandsIssued | number | yes | – |
| connectCommand | string | yes | – |
| connected | boolean | yes | – |
| connectedAt | string|null | yes | – |
| connectionCount | number | yes | – |
| encrypted | boolean | yes | – |
| host | string | yes | – |
| inFlightCommands | number | – | Commands sent to the game and still waiting for a reply; the bridge sends one at a time |
| lastCommandResponseAt | string|null | – | – |
| lastCommandTimeoutAt | string|null | – | – |
| listening | boolean | yes | – |
| port | number | yes | – |
| queuedCommands | number | – | Commands queued and not yet sent; greater than 0 means the backlog comes from concurrent calls on the client side, not from the game |
| savedStructures | array | yes | Structures saved during this connection; the game has no command to list structures, so the bridge keeps its own record |
| subscribedEvents | array | yes | – |
| undo | object | – | – |
No examples provided.
mc_structure Save or load a structure ~354
Save a region as a named structure, or place a saved structure back into the world. This is the official way to keep what the AI built, mass-produce it, or take it to another world. **Choose saveMode by what the user wants; do not always use the same one:** - `memory` (default) = temporary storage for this connection. Use it while the AI keeps revising the same build: save a version to keep a way back, and load it if a change goes wrong. It disappears when the game closes and leaves no files on disk. - `disk` = only when **the user explicitly says to keep it** ("remember this building", "save it so I can use it next time"). It is written as a file into the game world folder and survives closing the game, which really leaves something on the user disk, so do not write it when they did not ask to keep it. Versioning is **naming**: `castle_v1`, `castle_v2`. The same name overwrites without warning, so change the name before saving a new version. The game has no command to list saved structures, so names are the only record; mc_status lists the ones saved during this connection.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| destination | object | – | Required for load |
| from | object | – | Required for save |
| includeEntities | boolean | – | – |
| name | string | yes | Versions are told apart by this; the same name overwrites |
| saveMode | string | – | memory = temporary (default); disk = written to disk, only when the user explicitly says to keep it |
| to | object | – | Required for save |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_summon Summon a mob or entity ~63
Spawn one entity at a coordinate, optionally with a name tag. Leave position empty to spawn it where the command runs.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | Entity ID, for example cow or minecraft:villager |
| nameTag | – | – | – |
| position | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_teleport Teleport a player or entity ~67
Teleport the targets of a selector to a coordinate. target defaults to @s, the player running the commands.
| Name | Type | Req | Description |
|---|---|---|---|
| destination | object | yes | – |
| target | string | – | Target selector (@a/@p/@s/@e/@r, optionally with []) or a player name |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_test_block Test whether a coordinate holds a block ~83
Report whether a coordinate holds the given block, without changing the world. Use it to check the terrain before building or to verify what was just built.
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | yes | Block ID, for example stone or minecraft:oak_planks |
| blockStates | – | – | Optional block states, for example ["stone_type":"granite"] |
| position | object | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| matches | boolean | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_ticking_area Add a ticking area ~54
Keep a region loaded so its mechanisms keep running after the player leaves. Needed when the Agent works on its own far away.
| Name | Type | Req | Description |
|---|---|---|---|
| from | object | yes | – |
| name | – | – | – |
| to | object | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| commandLine | string | yes | – |
| data | – | yes | – |
| elapsedMs | number | yes | – |
| ok | boolean | yes | – |
| statusCode | number|null | yes | – |
| statusMessage | string|null | yes | – |
| undo | object | – | – |
No examples provided.
mc_undo Undo the last build ~154
Undo the last protected setblock/fill or build tool call; several build commands count as one step. All target blocks are checked first, then each region is restored with conditional commands so later changes are not overwritten. operationId guards against undoing the wrong version. Use overwriteChanges only when the user explicitly asks to overwrite conflicts, or accepts restoring the site after an operation whose outcome is uncertain; never set it to true on your own. This first version covers basic Overworld building blocks only: no mobs, inventories, water flow or redstone chains outside the region, and no Redo. Do not switch worlds or dimensions while it runs.
| Name | Type | Req | Description |
|---|---|---|---|
| operationId | string | – | – |
| overwriteChanges | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| available | boolean | yes | – |
| backupMs | number | yes | – |
| busy | boolean | yes | – |
| checkMs | number | yes | – |
| enabled | boolean | yes | – |
| maxBlocks | integer | yes | – |
| maxRegions | integer | yes | – |
| operationId | string|null | yes | – |
| reason | string|null | yes | – |
| restoreMs | number | yes | – |
| restoredRegions | integer | yes | – |
| snapshotCount | integer | yes | – |
| state | string | yes | – |
| storedBlocks | integer | yes | – |
No examples provided.
How do I install the BlockHand MCP server?
BlockHand runs locally as an npm package, launched with npx -y @gjlmotea/blockhand-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @gjlmotea/blockhand-mcp
claude mcp add gjlmotea-blockhand-for-minecraft-education-mcp -- npx -y @gjlmotea/blockhand-mcp
What is the BlockHand MCP server?
BlockHand is an MCP server listed in the public MCP registry as io.github.gjlmotea/blockhand-for-minecraft-education-mcp. Minecraft Education Edition MCP server: Agent robot, 24 build shapes, events. No add-on needed. This page covers its npm package (@gjlmotea/blockhand-mcp).
Is the BlockHand MCP server safe to use?
BlockHand scores 82 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the BlockHand MCP server expose?
BlockHand exposes 44 tools: mc_undo_control, mc_undo, mc_status, mc_await_connection, mc_run_command, and 39 more. Their descriptions and schemas cost roughly 5,083 tokens of context every time the server is loaded.
Is the BlockHand MCP server still maintained?
BlockHand is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the BlockHand MCP server under?
BlockHand declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.