MCP server · Audited from source
blockbench-mcp-plugin
by jasonjgardner/blockbench-mcp-pluginGPL-3.0 licenceAudited 25 Oct 2026 · source 7b761ae98242
Is it safe? No — BLOCK, grade D (66/100). It exposes 51 tools: 38 read, 12 write and 1 destructive. The audit recorded 31 findings (0 critical, 2 high, 3 medium, 22 low). Maintainer's description: Adds MCP server to Blockbench
Cite
Cite this page
ModelsAtlas. “blockbench-mcp-plugin (jasonjgardner/blockbench-mcp-plugin)”. Retrieved 25 Oct 2026. https://modelsatlas.com/mcp/jasonjgardner/blockbench-mcp-plugin
Why this is BLOCK. The audit found 0 critical and 2 high findings; the most severe is Code injection at server/tools/ui.ts:218. Each finding is listed below with its file and line.
Why this page is still public. People search for this server by name. Hiding it would leave them with the README's word alone; here they see what the code does. We list it so you can decide, and we do not show connect commands for BLOCK servers.
Trust audit
Audit 0.4.1 · full source read 25 Oct 2026
31 findings, listed below with the file and line each was found on. Grade A needs a sandboxed behavioural run too; this audit read the source only.
What the source does
- FilesystemDeclared2 observations
- NetworkDeclared2 observations
- ShellDeclared2 observations
- DependenciesNot pinnedSome ranges float
- SecretsNone foundNo keys in source
Findings (31)
Sorted by severity · the 25 most severe of 31 are listed
HIGHCode injectioncode.eval_exec · server/tools/ui.ts:218
result = await eval(code.trim());
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHPrompt injectionprompt.credential_read · .agents/skills/bun-development/SKILL.md:240
// Access environment variables
- Why
- asks the agent to read credentials
- Fix
- —
MEDIUMInsecure cryptocrypto.weak_random · headless/mesh/draft.ts:26
return Array.from({ length }, () => KEY_CHARS[Math.floor(Math.random() * KEY_CHARS.length)] ?? "a").join("");- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMObfuscation / stealthobf.zero_width · server/tools/texture/texture-set-import.ts:32
const LEADING_BYTE_ORDER_MARK = /^/;
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMFilesystem / pathmcp.destructive_tools
delete_offscreen_view
- Why
- 1 tool(s) can delete or overwrite
- Fix
- prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenanceinv.binary · lib/ai-disclosure.test.ts
ai-disclosure.test.ts
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
LOWFilesystem / pathfs.traversal · benchmarks/harness.test.ts:394
'{"action":"read_context","path":"../../.env"}',- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · headless/render/input.test.ts:35
texture("embedded", { source: embedded, path: secret, relative_path: "../../secret.png" }),- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · headless/server.test.ts:212
const outside = await session.call("bbmodel_info", { file: "../../etc/model.bbmodel" });- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · headless/server.test.ts:382
const outside = await session.call("blockbench_launch", { file: "../../elsewhere/model.bbmodel" });- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · lib/particles/particles.test.ts:257
["../../outside/pwn", "/abs/tex", "C:/tex", "textures\\particle\\x", "textures//x"].forEach((texture) => {- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.metadata_ip · server/net-security.test.ts:127
"127.0.0.1", "0.0.0.0", "10.1.2.3", "100.64.0.1", "169.254.169.254", "172.16.0.1", "172.31.255.255",
- Why
- cloud metadata endpoint: the classic SSRF credential grab
- Fix
- —
LOWNetwork egressnet.metadata_ip · server/tools/import.test.ts:183
"http://169.254.169.254/latest/meta-data",
- Why
- cloud metadata endpoint: the classic SSRF credential grab
- Fix
- —
LOWNetwork egressnet.raw_ip · benchmarks/cli-track.test.ts:178
proxyUrl: "http://127.0.0.1:1234/mcp",
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · benchmarks/cli-track.test.ts:198
mcpServers: { bench: { type: "http", url: "http://127.0.0.1:1234/mcp" } },- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · benchmarks/cli-track.test.ts:315
expect(settings.mcpServers.bench.httpUrl).toBe("http://127.0.0.1:1234/mcp");- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · benchmarks/harness.test.ts:485
const client = await connect(`http://127.0.0.1:${http.port}/mcp`, id);- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · benchmarks/proxy.ts:85
return `http://127.0.0.1:${this.http.port}/mcp`;- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.decode_call · headless/particle.test.ts:18
const PNG_2X4 = Uint8Array.from(atob("iVBORw0KGgoAAAANSUhEUgAAAAIAAAAECAYAAACk7+45AAAAFklEQVR4nGP838Dwn4GBgYEJRGBnAABUcQKGuqbVnwAAAABJRU5ErkJggg=="), (c) => c.charCodeAt(0));- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.decode_call · server/tools/camera.test.ts:73
return { frame: atob(item.data), structured: result.structuredContent };- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.decode_call · server/tools/particle/host.ts:250
return Uint8Array.from(atob(base64), (character) => character.charCodeAt(0));
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.decode_call · tests/particle-tools.test.ts:13
const PNG_2X4 = Uint8Array.from(atob("iVBORw0KGgoAAAANSUhEUgAAAAIAAAAECAYAAACk7+45AAAAFklEQVR4nGP838Dwn4GBgYEJRGBnAABUcQKGuqbVnwAAAABJRU5ErkJggg=="), (c) => c.charCodeAt(0));- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.decode_call · tests/texture-undo.test.ts:71
const encoded = atob(this.source.split(",")[1]);- Why
- No further detail recorded for this rule.
- Fix
- —
LOWSupply chainsupply.unpinned · .agents/skills/mcp-builder/scripts/requirements.txt
anthropic, mcp
- Why
- 2 requirement(s) not pinned with ==
- Fix
- pin exact versions
Tools it exposes
51 declared in source · 1 destructive
1 tool can delete or overwrite. An agent that can be talked into calling a tool can be talked into calling this one, so give it a token scoped to what you need.
| Tool | What it does | Risk |
|---|---|---|
delete_offscreen_view | Disposes an offscreen view and releases its WebGL context. The user | destructive |
add_locator | Adds a locator: a named point on a bone where particle effects (and sounds) spawn and which they follow as the bone animates. Exported as a Bedrock bone locator. Requires a format with locators (Bedrock Entity, GeckoLib, Generic Model). One undo step. | write |
bbmodel_create | Creates a new, empty .bbmodel file (format 5.0). Build it up with bbmodel_edit. Refuses to replace an existing file unless overwrite is true. | write |
bbmodel_import_java_block | Converts a Minecraft Java Edition block/item model .json into a new java_block .bbmodel, porting Blockbench | write |
bbmodel_outline | Returns the group/element tree of a .bbmodel file. Set transforms to include origins, rotations and cube from/to. | write |
create_brush_preset | Creates a custom brush preset with specified settings. Omitted settings are stored as unset so loading the preset keeps the current value. | write |
create_offscreen_view | Creates a private offscreen viewport that renders the current project without moving the user | write |
create_particle_effect | Creates a Bedrock particle effect (the Snowstorm format Blockbench, Minecraft Bedrock and GeckoLib use) from a preset plus design knobs, or from raw JSON. Writes <pack_root>/particles/<name>.json (and an optional custom texture to textures/particle/), validates it, and loads it into Blockbench | write |
create_project | Creates a project with the given name and format, and returns a resource link to its live .bbmodel file. | write |
no_execute | Fine. | write |
set_mode | Switches Blockbench | write |
trigger_action | Triggers an available Blockbench Action and respects its condition. The native action owns Undo; only a newly opened dialog may be auto-confirmed. | write |
update_particle_effect | Changes an existing particle effect file with design knobs (only the components each knob owns are rewritten) or replaces it with raw JSON, validates it, saves it and refreshes the preview. Also loads an effect file from disk that Blockbench has not seen yet. Blockbench desktop only. | write |
Demo | Runs the demo. | read |
Turntable | Reference model | read |
bbmodel_convert_legacy | Writes a copy of a .bbmodel in the 4.10 layout that Blockbench 4.x can open (a 5.0 file opens there as an empty scene). Mirrors Blockbench | read |
bbmodel_export_bedrock_animation | Compiles .bbmodel animations to Bedrock animation JSON (format_version 1.8.0), mirroring position X and rotation X/Y like Blockbench | read |
bbmodel_export_bedrock_geometry | Compiles a .bbmodel to Minecraft Bedrock geometry (.geo.json) using the same conventions as Blockbench | read |
bbmodel_export_java_block | Compiles a .bbmodel to a Minecraft Java Edition block/item model .json the way Blockbench | read |
bbmodel_export_modded_entity | Compiles a .bbmodel to a Java entity model class with the same templates and code generation as Blockbench | read |
bbmodel_find_elements | Finds elements in a .bbmodel file by name, type, containing group or texture. Returns world-space bounds for each match. | read |
bbmodel_get_node | Returns the saved data of one group or element (by UUID or exact name), its parent, and its world-space bounds. Group results list their children. | read |
bbmodel_info | Summarizes a .bbmodel file: format, version, resolution, node counts, world-space bounds and the current revision. Start here before editing. | read |
bbmodel_list_animations | Lists animation clips with length, loop mode and, per animated bone, how many keyframes each channel has. | read |
bbmodel_list_textures | Lists the textures of a .bbmodel file with their index, size, and whether the image is embedded. Image data is not returned. | read |
bbmodel_particle_pack | Delivers the particle effects a .bbmodel | read |
bbmodel_render | Renders a .bbmodel file to a PNG with bb-render (headless three.js WebGPU), without Blockbench. Returns the image and its path. Optionally poses the model at a time in an animation clip. Views are relative to the model | read |
bbmodel_sample_pose | Evaluates an animation at a time and returns each animated bone | read |
bbmodel_web_url | Makes a link that opens a .bbmodel (or a Bedrock/Java .json model) in the Blockbench web app, with the file carried in the URL | read |
blockbench_code_eval_safety | Critical safety guide for agents using code evaluation/execution tools with Blockbench v5.0+. Contains breaking changes, quick reference, common mistakes, and safe code patterns for native module usage. | read |
blockbench_native_apis | Essential information about Blockbench v5.0 native API security model and requireNativeModule() usage. Use this when working with Node.js modules, file system access, or native APIs in Blockbench plugins. | read |
export_model | Compiles the current project through a codec whose native export action is available. Returns JSON metadata and a live .bbmodel resource link; result_format= | read |
export_particle_pack | Delivers particle effects to a Bedrock resource pack: writes particles/<name>.json and copies custom textures to textures/particle/, then returns the particle_effects map to paste into the client entity so animation keyframe names resolve. Defaults to every effect the project | read |
foreign_schema | Uses a foreign schema. | read |
geckolib_list_easings | Lists every easing name GeckoLib accepts on keyframes, which of them read easingArgs, and each argument | read |
get_average_fps | Measures the average frames per second of Blockbench | read |
get_capabilities | Discover Blockbench/plugin versions, desktop or web environment, active project summary, and registered model formats. Returns detailed boolean format features (null means unknown; includes molang and java_cube_shade_direction_override) plus the format | read |
get_project_info | No description in the source | read |
hytale_animation_workflow | Guide for creating animations for Hytale models. Covers 60 FPS timing, quaternion rotations, visibility keyframes, loop modes, and common animation patterns. | read |
hytale_attachments | Guide for creating and managing attachments in Hytale models. Covers attachment collections, piece bones, modular equipment, and best practices. | read |
hytale_model_creation | Comprehensive guide for creating Hytale character and prop models. Covers format selection, node limits, shading modes, stretch, quads, and best practices. | read |
list_export_formats | Lists registered export codecs, file extensions, compile/export support, and availability under the native export action | read |
list_modes | Lists Blockbench editor tabs/modes with IDs, names, native availability, and the current mode. Includes plugin-added modes. Use before set_mode to discover whether Edit, Paint, Animate, or Display is available for the current project. Camera angles are controlled separately by set_camera_angle. | read |
list_particle_effects | Lists particle effects loaded in Blockbench with their file, summary, texture status and validation warnings, every particle keyframe that uses them, keyframes that have no preview file or point at missing locators, and the client-entity particle_effects map a Bedrock pack needs. | read |
list_particle_presets | Lists particle effect presets (smoke, fire, sparks, magic, glow, snow, drip, ...), built-in sprites and textures, materials and facing modes. Every preset uses a texture that ships with Minecraft and Blockbench, so it previews and runs with no image file. Read this before create_particle_effect. | read |
list_views | Lists render targets: the user | read |
manage_particle_keyframes | Adds, removes or lists particle keyframes on an animation | read |
model_creation_strategy | A strategy for creating a new 3D model in Blockbench. | read |
name | Name to greet. | read |
no_description | No description in the source | read |
resize_offscreen_view | Changes the pixel size of an offscreen view. The user | read |
Safer alternatives
We could not match this server to a job, so we cannot suggest a like-for-like alternative. Read-only servers are the least-privilege place to start.
Audit history
- ✕BLOCK D 66 / 100
First audit ·
7b761ae98242
README badge
Badges show the current verdict, BLOCK included
A badge cannot be hidden by the maintainer while the verdict is BLOCK. Fix the findings, push, and the re-audit updates it.
Questions about blockbench-mcp-plugin
What is the blockbench-mcp-plugin MCP server?
What tools does blockbench-mcp-plugin expose?
Is blockbench-mcp-plugin safe to connect to an agent?
What credentials does blockbench-mcp-plugin need?
How does blockbench-mcp-plugin run?
How current is this page?
I already installed blockbench-mcp-plugin. What should I do?
Can the verdict change?
Sources
- jasonjgardner/blockbench-mcp-plugin on GitHub — the source we read, its licence, stars and activityObserved · 25 Oct 2026
- ModelsAtlas trust audit — BLOCK verdict for commit 7b761ae98242Observed · 25 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What is the blockbench-mcp-plugin MCP server?
- What tools does blockbench-mcp-plugin expose?
- Is blockbench-mcp-plugin safe to connect to an agent?