minecraft-modding-workbench — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited minecraft-modding-workbench (Agent Skill) and scored it 91/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} is the classic direct prompt-injection phrasing. Placed in a skill body that the agent reads as trusted instructions, it tries to make the agent abandon its prior rules and follow whatever comes next — a full system-prompt override.
ignore/disregard/forget … previous instructions sentence.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Support fast, version-aware Minecraft modding. Treat the minecraft-modding MCP server as the primary source of truth, then turn verified findings into working code and assets.
minecraft-modding MCP server from @adhisang/minecraft-modding-mcp.projectPath.inspect-minecraft,analyze-symbol, compare-minecraft, validate-project, analyze-mod, and manage-cache.
validate-project (task access-transformer) for NeoForge, in addition to Fabric-style access wideners.nbt-to-json, json-to-nbt, nbt-apply-json-patch) when working with level.dat, chunk, playerdata, or command-driven NBT. Stay in typed JSON while editing and re-encode once at the end.implementation: Verified by MCP, Verified by workspace/source jar fallback, Runtime/user-observed, and Unverified.
For plans, debugging explanations, MCP payload/error-recovery answers, eval answers, and handoffs that guide later implementation, make the provenance visible before giving version-sensitive recommendations:
Project profile: record confirmed workspace root, loader(s), Minecraftversion, mapping namespace, Java version, modid, and base package when they matter. If no workspace or file evidence is available, explicitly mark the missing or assumed fields before using prompt-provided versions as examples.
MCP status: record preflight/schema status before MCP-dependent claims. Iftools have not actually run, call the MCP step planned or unverified instead of writing as if results are known.
Verification sources: separate implementation facts under `Verified byMCP, Verified by workspace/source jar fallback, Runtime/user-observed, and Unverified. For fallback/error-recovery tasks or eval-style answers, include empty categories as none yet` when omitting them would blur the source boundary.
Reference route: for substantial plans or debugging routes, name theloaded references and the relevant skipped categories briefly.
version, mapping, Java version, modules, and normal verification commands. If the workspace is absent, record the missing profile facts before making version-, loader-, mapping-, or Java-sensitive claims.
minecraft-modding tools are callable.task shape is known, start with its checklist section and add loader, MCP recipe, fallback, or task-specific references only when their conditions match.
narrower high-level payload, then switch to the matching fallback playbook.
references/mcp-recipes.mdrecipe, correct the shape once, and retry the same high-level tool before changing tools.
descriptor, namespace, config declaration, and side before editing.
hooks, run the task-specific checklist instead of treating build as proof of runtime behavior.
Run this once near the start of a Minecraft modding task, before the first MCP-dependent claim:
minecraft-modding tools and inspect thecallable schema before the first request, especially inspect-minecraft, analyze-symbol, and their transformed callable names.
projectPath, detected Minecraft version, loader, mapping, and Java version.
inspect-minecraft nor analyze-symbol is available, sayminecraft-modding MCP unavailable once and switch to references/mcp-unavailable-fallback.md.
the installed MCP as older than these recipes or version-skewed and use the nearest older-compatible path or workspace fallback. Do not keep guessing tool names.
projectPath,preferProjectVersion, and preferProjectMapping when the current tool accepts those fields.
gradle.properties, build.gradle, build.gradle.kts, settings.gradle, fabric.mod.json, neoforge.mods.toml, mixin configs, and nearby registration classes.projectPath to MCP tools.inspect-minecraft or analyze-symbol.If no project exists yet, ask only for loader, Minecraft version, modid, and package name. For explanation-only tasks with no workspace access, list those facts as missing or assumed before giving examples. If the task depends on an external generator or template that is not present, say so explicitly instead of fabricating generated files.
Bundled references are optional, conditional context. Do not read or restate the whole reference bundle just because this skill triggered.
SKILL.md, the project profile, MCP preflight, and one high-level MCPlookup when available.
references/task-checklists.md once thetask shape is known.
references/fabric.md only for Fabric project structure,registration, APIs, entrypoints, datagen, networking, Mixins, or pitfalls.
references/neoforge.md only for NeoForge project structure,DeferredRegister, events, capabilities, access transformers, datagen, networking, sided access, or pitfalls.
references/architectury.md only for Architectury multi-moduleplacement or a slice that crosses common/platform boundaries.
the changed slice touches those loaders.
references/mcp-recipes.md only for payload shape, high-level toolerror recovery, ERR_INVALID_INPUT, old-shape/current-shape mismatch, or a supporting utility not covered by the high-level call.
references/mcp-unavailable-fallback.md only after preflight shows noMCP tools, a named tool or argument is rejected as older MCP, or the failure budget routes to fallback.
references/validator-fallbacks.md only after validate-project,validate-mixin, validate-access-widener, or validate-access-transformer is unavailable, restarts, times out, or cannot answer.
references/dependency-jars.md for dependency API source lookup.references/rendering-hud.md for HUD overlays, screens, projection,GUI scale, FOV, or client rendering.
references/gametest.md for GameTest or test-harness wiring.references/bootstrap-from-template.md only for sparse templates.references/project-profile-template.md when a durable project profileis useful.
references/subagent-mcp-contract.md only when delegating Minecraftwork to another agent.
For substantial plans, debugging explanations, eval outputs, or handoffs where reference choices affect implementation facts, include a brief reference-route record: loaded references with reasons, plus skipped reference categories with reasons. Keep it short; it is provenance, not a summary of every skipped file.
inspect-minecraft: versions, artifacts, vanilla classes, source search, raw files.analyze-symbol: existence, mappings, lifecycle, workspace compile-time names, API overview.compare-minecraft: migration and registry/class diffs.validate-project: workspace, Mixin, access widener, and Forge-style access transformer validation.analyze-mod: mod JAR summary, search, decompile, remap preview/apply.manage-cache: stale cache or index diagnosis, including the verify action and preview-then-apply maintenance.get-registry-data: structured registry bodies (blocks, items, biomes, …) via the server data generator for one version.get-runtime-metrics: service counters and latency snapshots when cache, search, or index behaviour looks off.nbt-to-json, json-to-nbt, nbt-apply-json-patch: typed-JSON round-trip and RFC6902-style in-place edits for Java Edition NBT payloads.prefer detail: "summary" | "standard" | "full" plus include[]; treat compact as an old-shape migration hint, not a current expert-tool argument.
inspect-minecraft request echo lives attop-level subject.requested / subject.resolved, not summary.subject; meta.warningDetails[] points to meta.warnings[] by index, not by a duplicated message.
get-class-source and get-class-members usetarget: { kind, value } or target: { kind: "artifact", artifactId }. Do not use the removed target: { type: "artifact", artifactId } shape.
follow nextCursor when needed. Read the shared owner from members.ownerFqn when present, derive modifiers from javaSignature, and request include: ["descriptors"] when field jvmDescriptor values are required for Mixins or access entries.
answer narrow: record project profile, MCP status, all four verification source labels, and the reference route; say that callable schema must be inspected before sending corrected payloads; include the get-class-members pagination, owner, modifier, and descriptor cautions together with the target shape; and only name the fallback gate unless MCP has actually failed in the current task.
resolvedMembers, toolHealth, or resolutionTrace is not proof that the detail does not exist; pass reportMode: "full" or explain: true before falling back when exact validator detail matters.
fromVersion, toVersion,maxVersions, includeTimeline, and includeSnapshots when the task needs a narrow history. The v5 default scan is broad enough that old implicit five-version assumptions are unsafe.
projectPath, preferProjectVersion=true, and preferProjectMapping=true when supported.version to tools that require it, such as validate-mixin, validate-access-widener, and resolve-workspace-symbol.resolve-artifact first, then find-class, search-class-source, get-artifact-file, or list-artifact-files.projectPath, loader, version, and mapping are known.manage-cache, index-artifact, or remap/mutating flows in parallel with calls that depend on the same cache or JAR.references/mcp-recipes.md before inventing fields or dropping to a lower-level tool.error, retry once with a narrower high-level payload.
the relevant workspace, source jar, Gradle, or log fallback.
validate-project, validate-mixin, validate-access-widener, orvalidate-access-transformer restarts once, do not loop. Record the validator as unavailable for this task and run references/validator-fallbacks.md.
ERR_INVALID_INPUT occurs, read the reported field errors, correct thepayload once using references/mcp-recipes.md, and retry the same high-level tool before changing tools. When explaining this route without actually running the corrected call, record profile assumptions, MCP status, and verification-source labels first; target class, API, version, mapping, and workspace facts remain unverified until the corrected call succeeds.
retryClass: "server" such asERR_INTERNAL or ERR_DB_FAILURE, do not retry the identical call as a transient failure. Record MCP as unable to verify that fact and use the relevant fallback path.
detail / include[], manage-cache action: "verify", validate-project task access-transformer, analyze-symbol lifecycle range controls, get-class-source / get-class-members target.kind, or the NBT helpers) is rejected as unknown, treat it as evidence that the installed MCP is older than what this skill's recipes target, say so explicitly, and route the request through the nearest older-compatible tool or a workspace-only fallback rather than fabricating a different payload shape.common and loader-specific wiring in platform modules unless the workspace already uses another verified pattern.common by default and move only loader-bound code to fabric or neoforge.@ExpectPlatform, Architectury abstractions, or a plain Java interface/service split only when the code truly needs platform-specific behavior.Run verification as part of the default workflow, not as an optional extra.
./gradlew build after structural code changes../gradlew runDatagenserializers, registry resources, access wideners, and access transformers, do not mark the work as working from build alone.
compare against at least one vanilla resource from the same Minecraft version, then use the lightest resource-load path available: focused GameTest, configured datagen/resource validation, platform run task, or runClient.
runClient task or equivalent.check center, edge, behind-camera, close/far target, GUI scale, and bow/FOV states.
GRADLE_USER_HOME before treating home-directory lock or cache failures as project issues.At minimum, aim to leave the project in a state that passes build or has a concrete, localized reason why it cannot.
validate-project, then validate-mixin if you need exact issue detail. Use reportMode: "full" or explain: true before deciding validator detail is unavailable. Confirm the owner, method name, descriptor, and mapping namespace before patching code.validate-project, then validate-access-widener with an explicit version. Confirm that the header namespace matches the entry names. If Fabric GameTests fail before discovery because a common access widener is not found, treat it as test runtime wiring first: record the loader runtime, GameTest source set, fabric-gametest entrypoint/discovery path, Loom mods sourceSet grouping, and common resource visibility before changing feature code.validate-project (task access-transformer), then validate-access-transformer with an explicit version and atNamespace. Confirm the file's entry namespace matches what the workspace expects (usually mojang on modern NeoForge, srg on legacy projects).get-registry-data returns the vanilla-version entry list only; absence from its output is not evidence of a missing modded, dependency, or datapack entry, so fall back to workspace registration code, dependency metadata, and datagen output for those cases.Failed to parse either, No key ..., andUnknown registry key ... as resource codec or schema mismatch until proven otherwise. For worldgen JSON, compare against one same-version vanilla configured feature and one same-version vanilla placed feature even when the log names only configured_feature, then record which fields were intentionally changed before broad edits or replacement JSON examples.
references/dependency-jars.md before manualcache scanning.
references/rendering-hud.md before changing math or render registration.nbt-to-json, edit in typed JSON (or nbt-apply-json-patch), preserve DataVersion, then re-encode with json-to-nbt using matching compression.get-runtime-metrics before mutating anything, then run manage-cache with action: "verify" in preview mode before prune, rebuild, or delete.level.isClientSide() or equivalent boundaries.compare-minecraft, then diff the affected class signatures, then update mappings and loader-specific APIs.When one of these categories matches, read the corresponding section in references/task-checklists.md and the loader-specific Common Pitfalls section before broad rewrites.
references/fabric.mdreferences/neoforge.mdreferences/architectury.mdreferences/bootstrap-from-template.mdreferences/task-checklists.mdreferences/mcp-recipes.mdreferences/mcp-unavailable-fallback.mdreferences/dependency-jars.mdreferences/rendering-hud.mdreferences/validator-fallbacks.mdreferences/gametest.mdreferences/project-profile-template.mdreferences/subagent-mcp-contract.md~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.