pickaid/mc-developing-mcp

mc-develop-first

Use when working on Minecraft Java mods, NeoForge, Forge, Fabric, KubeJS, ProbeJS, datapacks, resource packs, Minecraft shaders/client visuals, modpack crashes, Gradle mod workspaces, local mod jars, Modrinth/CurseForge metadata, mappings, Minecraft docs, o…

查看源码

使用方法

  1. 复制安装命令,在自己的智能体环境安装前先检查源码包。
  2. 从原始文档核对所需工具、凭据和支持的宿主。
  3. 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/pickaid/mc-developing-mcp --skill mc-develop-first

开始前需了解

  • 安装不包含模型订阅、API 额度或访问文件的权限。
  • 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

mc_develop First

mc_develop is the evidence and capability gateway for Minecraft work. A new agent should not treat it as a keyword search box. Use its structured fields to ask for the exact capability you need, then use normal tools only for file reads, edits, builds, tests, diffs, and commits after MCP evidence points there.

Operating Rule

For Minecraft tasks:

  1. Call mc_develop before technical advice, code edits, datapack JSON edits, crash diagnoses, dependency coordinates, or docs claims.
  2. If you know the desired capability, use operations[].kind plus the matching structured field.
  3. Put exact ids, versions, paths, classes, resource locations, symbols, docs topics, and policies into structured fields, not only into requestText.
  4. Treat requestText as human context and fallback only.
  5. Read the structured result before acting. If evidence is missing, make the next MCP call more specific instead of guessing.

First Call Pattern

Use broad auto-detection only when the task is genuinely unclear:

json
{
  "requestText": "Short exact summary of the Minecraft task.",
  "workspaceRoot": "/absolute/path/to/project-or-modpack"
}

When exact intent is known, make the first call structured:

json
{
  "requestText": "Human context only.",
  "workspaceRoot": "/absolute/path/to/workspace",
  "operations": [
    {
      "kind": "docs_lookup",
      "docsQuery": "NeoForge register event 1.21"
    }
  ]
}

Always include the per-instance roots you know:

json
{
  "workspaceRoot": "/path/to/workspace",
  "runtimeRoot": "/path/to/runtime",
  "mdmSourcesRoot": "/path/to/consumer-mdm-sources",
  "prismRoot": "/path/to/PrismLauncher"
}

Reuse runtimeEnvironment.inputPatch from MCP results in follow-up calls.

Capability Map

Use this table before choosing tools or web search.

NeedMCP operation and structured field
Java source, Gradle files, local classesworkspace_source with workspaceSource.javaSymbols, javaPaths, or buildFiles
Java compile/LSP diagnosticsjava_diagnostics
Gradle deps, repositories, source jars, source acquisition plansource_acquisition_plan with preparationRoutes: ["workspace_gradle"] and optional sourceAcquisition
Vanilla source by class/pathworkspace_source with vanillaSource
KubeJS symbols, ProbeJS declarations, resourcesprobejs_types with probeJs.symbol, resourceOnly, resourceKinds, resourceQueries, resourceLimitPerKind, scope
Crash logslog_files with optional logFiles.paths
Local mod jars, class owners, mixin targets, entries, inventorymod_archive_content with modArchive
Broad local jar indexingpreparationRoutes: ["local_jar"], preparationPolicy.localJarMode: "prewarm_entry_index"
Modrinth, CurseForge, Maven coordinatesexternal_mod_resolution with externalModRequests
Datapack/resource-pack files and resource locationsdatapack_files with datapack.paths, resourceLocations, mode
Docs, schemas, migrations, loader docsdocs_lookup with docsQuery, plus preparationRoutes: ["runtime_cache"] when resources matter

Supported operations[].kind values:

source_acquisition_plan, workspace_source, probejs_types, mod_archive_content, external_mod_resolution, datapack_files, docs_lookup, log_files, java_diagnostics.

Structured Field Templates

Docs:

json
{
  "operations": [
    { "kind": "docs_lookup", "docsQuery": "NeoForge capabilities migration 1.21" }
  ]
}

Workspace source:

json
{
  "operations": [
    {
      "kind": "workspace_source",
      "workspaceSource": {
        "javaSymbols": ["com.example.ExampleMod"],
        "buildFiles": ["build.gradle"]
      }
    }
  ]
}

ProbeJS:

json
{
  "operations": [
    {
      "kind": "probejs_types",
      "probeJs": {
        "symbol": "event.recipes",
        "resourceQueries": ["minecraft:iron_ingot", "#forge:ingots/iron"],
        "scope": "server"
      }
    }
  ],
  "preparationRoutes": ["workspace_probejs"]
}

ProbeJS resource inventory:

json
{
  "operations": [
    {
      "kind": "probejs_types",
      "probeJs": {
        "resourceOnly": true,
        "resourceKinds": ["item"],
        "resourceLimitPerKind": 0
      }
    }
  ],
  "preparationRoutes": ["workspace_probejs"]
}

Use resourceLimitPerKind: 0 for counts-only discovery. Omit it for all matching entries, or set an explicit number when the user wants a bounded export. Use resourceKinds and resourceQueries for filtering; do not hide those controls in requestText.

Local mod jars:

json
{
  "operations": [
    {
      "kind": "mod_archive_content",
      "modArchive": {
        "classOwners": ["com.example.problem.CrashHandler"],
        "inventory": true
      }
    }
  ],
  "preparationRoutes": ["local_jar"],
  "preparationPolicy": { "localJarMode": "prewarm_entry_index" }
}

Datapack/resource-pack:

json
{
  "operations": [
    {
      "kind": "datapack_files",
      "datapack": {
        "mode": "resource_pack",
        "paths": ["assets/example/models/item/demo.json"],
        "traceReferences": true
      }
    }
  ]
}

External mod exact lookup:

json
{
  "operations": [
    {
      "kind": "external_mod_resolution",
      "externalModRequests": [
        {
          "platform": "modrinth",
          "projectId": "AANobbMI",
          "slug": "sodium",
          "loader": "neoforge",
          "minecraftVersion": "26.1.2"
        }
      ]
    }
  ],
  "preparationPolicy": { "remoteMetadataPolicy": "enabled" }
}

Unknown External Mods

If slug/project id is unknown, do not pretend query is exact. Use discovery first:

json
{
  "operations": [
    {
      "kind": "external_mod_resolution",
      "externalModRequests": [
        {
          "platform": "modrinth",
          "query": "Sodium",
          "loader": "neoforge",
          "minecraftVersion": "26.1.2"
        }
      ]
    }
  ],
  "preparationPolicy": { "remoteMetadataPolicy": "enabled" }
}

Then:

  • If one high-confidence candidate remains, retry with returned slug and/or projectId.
  • If multiple candidates remain, report candidates and ask for confirmation or use local Gradle/jar evidence to disambiguate.
  • For CurseForge discovery, credentials are required. If missing, report CURSEFORGE_API_KEY instead of falling back to broad guessing.
  • Maven has no universal name search. Prefer exact coordinate, workspace Gradle dependencies, local jars, or repository metadata.

Read references/external-mod-resolution.md for the full two-phase flow.

Read The Result

Always inspect these before editing or answering:

  • trace.routeSteps: confirms the MCP actually ran the intended capability.
  • executions[].queryHint: should reflect structured fields when exact data was supplied.
  • selectedEvidence: the citation set for claims or edits.
  • workspacePreparation: route readiness, missing prerequisites, next call patterns.
  • runtimeEnvironment.inputPatch: roots to reuse.
  • resourceActions and mdmPackageRecommendations: package proposals, not download consent.
  • Domain summaries: crashSignals, javaDiagnostics, kubeJsQuality, clientVisualVerifier.

If exact constraints appear only in requestText while queryHint is broad, the call is not reliable enough. Retry with structured fields.

Reference Selection

Read only the relevant reference file:

TaskReference
KubeJS/ProbeJSreferences/kubejs-probejs.md
Crashes/logs/local jarsreferences/crash-triage.md
Java/Gradle/mappings/source jarsreferences/java-gradle-mods.md
Datapacks/resource packs/client visualsreferences/datapack-resourcepack.md
Modrinth/CurseForge/Mavenreferences/external-mod-resolution.md
Docs/version/schema/MDM packagesreferences/docs-version-resources.md
Runtime roots/environmentreferences/runtime-environment.md
Reading MCP outputreferences/result-interpretation.md

Normal Tool Boundary

Use normal tools after MCP evidence for:

  • Reading exact files named by MCP.
  • Editing files.
  • Running Gradle, tests, formatters, game/client checks.
  • Inspecting diffs, committing, pushing.

Do not use broad rg, jar inspection, web search, or guessed docs as a substitute for MCP routes when MCP can provide that evidence.

Common Failure Modes

  • Encoding exact ids or versions only in requestText.
  • Treating external query as final resolution.
  • Editing KubeJS before ProbeJS evidence.
  • Guessing a crash owner from one exception class.
  • Mixing Forge/NeoForge/Fabric docs across versions.
  • Editing datapack/resource-pack JSON without schema/version evidence.
  • Downloading MDM packages without explicit user consent or prior authorization.
  • Persisting environment variables globally when runtimeEnvironment.inputPatch is enough.

按任务相关推荐