01 — WHAT IT IS
An MCP server that checks whether Bedrock content will actually load.
You bring the model. It runs in your own Claude client, on your own subscription. CodeCraft never sits in between and never generates content.
The one thing it does: measure whether the thing that was generated is going to work.
9
read-only tools
60
document types
5
version numbers
0
stored requests
WHAT THE MODEL WROTE
{
"format_version": "1.26.40",
"minecraft:spawn_rules": {
"description": { "identifier": "ex:guardian" }
}
}Loads in the game with no error and no entity.
VALIDATE
WHAT CODECRAFT RETURNS
"ok": false
"pointer": "/format_version"
"rule": "enum"
"allowed": ["1.8.0", "1.10.0", "1.12.0"]
"version": "1.26.40.5"Pointer, rule, and the values the schema accepts.
02 — THE PROBLEM
Bedrock fails silently.
A general model invents a format_version, references a minecraft: identifier that does not exist, calls an API that is not in @minecraft/server — and none of it raises an error until the pack is loaded in the game.
"format_version": "1.26.40"The schema rejected it: a spawn rule accepts only 1.8.0, 1.10.0 or 1.12.0.
feature rule filename ≠ identifierThe game rejected it: “Feature rule identifier ‘ruby_ore_feature’ does not match filename ‘ruby_ore’”.
recipe with no unlock fieldThe game never loaded the recipe: “1.20+ Recipes require unlock data”.
query.is_babyyThe entire block definition was dropped. The block never registered in the game.
03 — HOW IT WORKS
1
You add the MCP endpoint to your own Claude client.
2
While working on a Bedrock task, the model calls the tools by itself: which field is required, which identifier exists, is this line valid.
3
The generated files are validated against the official schema, the command grammar, and real tsc.
Values are read from version-pinned data, not recalled.
What it guarantees
The validator catches things the game will reject. It does not say your content will behave the way you wanted.
Read the limits →Quick setup
- Endpoint:
https://codecraft-ashy-seven.vercel.app/mcp - In Claude: Customize > Connectors (not Settings) → custom connector → paste the address
- Once connected, 9 tools should appear — all nine read-only
04 — NINE TOOLS, ALL READ-ONLY
The server writes nothing, anywhere.
check_feasibilityCan Bedrock do this at all; if not, why, and what the alternative is
get_version_infoWhich version number goes where
get_schemaWhich fields this document type requires, and which format_version is valid
lookup_idDoes this minecraft: identifier exist in this version, what type is it, what block states does it have
validate_jsonDoes this file match the official schema
validate_commandIs this command line valid, does it require cheats
validate_scriptDoes the script compile with real tsc and real @minecraft/server types
validate_pythonIs this out-of-game automation script and the commands inside it valid
review_packThe whole pack: the right validator per file, plus the checks a schema structurally cannot see
05 — PRIVACY
- No authentication, no accounts, no sessions.
- No user data is stored. The server is stateless; every request is discarded.
- All nine tools are read-only. The server sends data nowhere.
- The validation layer connects to no LLM — that is not a promise, it is a test.
- Source is open, Apache-2.0.