Skip to main content
Glama

jsonui-render-mcp

An MCP server that draws Minecraft Bedrock JSON UI screens, so a resource pack's layout can be looked at without a device.

It reads the pack you produced and Mojang's real UI files, expands @ inheritance and $variables, and reports anything it does not implement instead of guessing.

Setup

pip install mcp pillow

Then call the setup_samples tool once. It sparse-clones Mojang/bedrock-samples for the vanilla UI definitions and textures. Nothing from Mojang is bundled here.

Environment:

Variable

Default

What

BEDROCK_SAMPLES

~/.cache/bedrock-samples

the clone above

MINECRAFT_FONT

~/.aseprite-mcp/fonts/minecraft

a folder with font.json, ascii.png

Register it:

{
  "mcpServers": {
    "jsonui-render": {
      "command": "python3",
      "args": ["/path/to/jsonui-render-mcp/server.py"]
    }
  }
}

Related MCP server: mcp-sketch

Tools

Tool

What

setup_samples

clone Mojang's UI files

list_screens

the screens a pack dump defines

render_screen

draw one, with the form's captions and icons

render_control

draw any control by name, including Mojang's own

check_anchors

hold the anchor rule to Mojang's dialogs

The pack dump

render_screen reads a directory your build writes:

controls.json          name -> control
screens.json           [{name, width, height, body, title, background, marker}]
textures/*.png         your own textures, flat
textures/nineslice.json   name -> border, as an int or [l, t, r, b]

Two things worth knowing

  • layer orders a sibling group and nothing wider. A screen-wide depth and an accumulating one both look plausible and both contradict a device. What a sibling is ordered by is its subtree's deepest layer, not the number on its own root: a plate whose recess carries 20 sits behind a figure whose panel carries nothing, and by their own numbers the recess would paint over it.

  • The anchor rule is: the child's anchor_to point lands on the parent's anchor_from point, then the offset applies. check_anchors holds the renderer to it.

What it does not do yet

  • clips_children is honoured, but only where the window measures: fill and common.scrolling_panel's own internals are not modelled, so a scroll view port comes out nought by nought. Those are reported and drawn unclipped — the content appears at full height, over whatever is beneath it.

  • Bindings other than a form's caption and texture.

  • %cm is read as the content size, not the largest child.

  • Item pictures come from vanilla paths only.

A device is still ground truth. When the two disagree, this is wrong.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Deichor/jsonui-render-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server