@adhisang/minecraft-modding-mcp 4.1.1 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/README.md +5 -2
  3. package/dist/entry-tools/analyze-symbol-service.d.ts +12 -0
  4. package/dist/entry-tools/analyze-symbol-service.js +7 -0
  5. package/dist/entry-tools/batch-class-members-service.d.ts +1 -0
  6. package/dist/entry-tools/batch-class-members-service.js +2 -0
  7. package/dist/entry-tools/batch-class-source-service.d.ts +1 -0
  8. package/dist/entry-tools/batch-class-source-service.js +2 -0
  9. package/dist/entry-tools/batch-mappings-service.d.ts +1 -0
  10. package/dist/entry-tools/batch-mappings-service.js +1 -0
  11. package/dist/entry-tools/batch-symbol-exists-service.d.ts +1 -0
  12. package/dist/entry-tools/batch-symbol-exists-service.js +2 -0
  13. package/dist/entry-tools/compare-minecraft-service.d.ts +9 -0
  14. package/dist/entry-tools/compare-minecraft-service.js +3 -1
  15. package/dist/entry-tools/inspect-minecraft/handlers/class-members.js +1 -0
  16. package/dist/entry-tools/inspect-minecraft/handlers/class-overview.js +3 -1
  17. package/dist/entry-tools/inspect-minecraft/handlers/class-source.js +1 -0
  18. package/dist/entry-tools/inspect-minecraft/handlers/list-files.js +1 -0
  19. package/dist/entry-tools/inspect-minecraft/handlers/search.js +2 -1
  20. package/dist/entry-tools/inspect-minecraft/internal.d.ts +17 -0
  21. package/dist/entry-tools/inspect-minecraft/internal.js +10 -0
  22. package/dist/entry-tools/inspect-minecraft-service.d.ts +40 -0
  23. package/dist/entry-tools/validate-project/cases/project-summary.js +8 -3
  24. package/dist/entry-tools/validate-project/internal.d.ts +6 -2
  25. package/dist/entry-tools/validate-project/internal.js +9 -7
  26. package/dist/entry-tools/validate-project-service.d.ts +10 -0
  27. package/dist/entry-tools/validate-project-service.js +1 -0
  28. package/dist/entry-tools/verify-mixin-target-service.d.ts +2 -0
  29. package/dist/entry-tools/verify-mixin-target-service.js +1 -0
  30. package/dist/gradle-paths.d.ts +8 -3
  31. package/dist/gradle-paths.js +34 -5
  32. package/dist/index.js +24 -7
  33. package/dist/mapping/loaders/tiny-loom.d.ts +1 -1
  34. package/dist/mapping/loaders/tiny-loom.js +5 -2
  35. package/dist/mapping/types.d.ts +5 -0
  36. package/dist/mapping-service.d.ts +1 -0
  37. package/dist/mapping-service.js +16 -13
  38. package/dist/mixin-validator.d.ts +1 -1
  39. package/dist/mixin-validator.js +1 -1
  40. package/dist/source/access-validate.js +12 -8
  41. package/dist/source/artifact-resolver.d.ts +5 -0
  42. package/dist/source/artifact-resolver.js +23 -7
  43. package/dist/source/class-source/members-builder.d.ts +1 -0
  44. package/dist/source/class-source/members-builder.js +1 -1
  45. package/dist/source/class-source.d.ts +1 -0
  46. package/dist/source/class-source.js +9 -1
  47. package/dist/source/lifecycle/diff.js +6 -6
  48. package/dist/source/lifecycle/mapping-helpers.d.ts +3 -3
  49. package/dist/source/lifecycle/mapping-helpers.js +17 -9
  50. package/dist/source/lifecycle/trace.js +2 -2
  51. package/dist/source/search.js +1 -0
  52. package/dist/source/symbol-resolver.js +4 -1
  53. package/dist/source/validate-mixin/pipeline/mapping-health.js +2 -1
  54. package/dist/source/validate-mixin/pipeline/resolve.js +1 -0
  55. package/dist/source/validate-mixin/pipeline/target-lookup.js +12 -7
  56. package/dist/source-service.d.ts +18 -1
  57. package/dist/source-service.js +2 -2
  58. package/dist/tool-contract-manifest.d.ts +1 -1
  59. package/dist/tool-contract-manifest.js +2 -2
  60. package/dist/tool-schemas.d.ts +91 -0
  61. package/dist/tool-schemas.js +20 -0
  62. package/docs/README-ja.md +2 -2
  63. package/docs/tool-reference.md +4 -1
  64. package/package.json +1 -1
@@ -16,6 +16,7 @@ export const ENCODE_COMPRESSIONS = ["none", "gzip"];
16
16
  export const nonEmptyString = z.string().trim().min(1);
17
17
  export const optionalNonEmptyString = z.string().trim().min(1).optional();
18
18
  export const optionalPositiveInt = z.number().int().positive().optional();
19
+ export const gradleUserHomeSchema = optionalNonEmptyString.describe("Gradle User Home to use for Loom/Gradle cache lookups instead of the MCP process GRADLE_USER_HOME.");
19
20
  // Optional descriptor: "" and whitespace-only strings are normalized to undefined so that
20
21
  // tools with signatureMode="name-only" can accept "caller omitted descriptor" inputs whether
21
22
  // the caller passed an empty string or omitted the field entirely. Malformed descriptors are
@@ -98,6 +99,7 @@ export const resolveArtifactShape = {
98
99
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
99
100
  allowDecompile: z.boolean().default(true),
100
101
  projectPath: optionalNonEmptyString.describe("Optional workspace root path for Loom cache-assisted source resolution"),
102
+ gradleUserHome: gradleUserHomeSchema,
101
103
  scope: artifactScopeSchema.optional().describe(SOURCE_SCOPE_DESCRIPTION),
102
104
  preferProjectVersion: z.boolean().optional().describe("When true, detect MC version from gradle.properties and override target.value"),
103
105
  strictVersion: z.boolean().optional().describe("When true, reject version-approximated results instead of returning them. Default false."),
@@ -114,6 +116,7 @@ export const getClassSourceShape = {
114
116
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
115
117
  allowDecompile: z.boolean().default(true),
116
118
  projectPath: optionalNonEmptyString.describe("Optional workspace root path for Loom cache-assisted source resolution"),
119
+ gradleUserHome: gradleUserHomeSchema,
117
120
  scope: artifactScopeSchema.optional().describe(SOURCE_SCOPE_DESCRIPTION),
118
121
  preferProjectVersion: z.boolean().optional().describe("When true, detect MC version from gradle.properties and override target.value"),
119
122
  strictVersion: z.boolean().optional().describe("When true, reject version-approximated results instead of returning them. Default false."),
@@ -149,6 +152,7 @@ export const getClassMembersShape = {
149
152
  memberPattern: optionalNonEmptyString,
150
153
  maxMembers: optionalPositiveInt.describe("default 500, max 5000"),
151
154
  projectPath: optionalNonEmptyString,
155
+ gradleUserHome: gradleUserHomeSchema,
152
156
  scope: artifactScopeSchema.optional().describe(SOURCE_SCOPE_DESCRIPTION),
153
157
  preferProjectVersion: z.boolean().optional().describe("When true, detect MC version from gradle.properties and override version"),
154
158
  strictVersion: z.boolean().optional().describe("When true, reject version-approximated results instead of returning them. Default false."),
@@ -174,6 +178,7 @@ export const verifyMixinTargetShape = {
174
178
  mapping: sourceMappingSchema.optional().describe("obfuscated | mojang | intermediary | yarn"),
175
179
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
176
180
  projectPath: optionalNonEmptyString.describe("Workspace root path for target.kind=workspace and Loom cache assistance."),
181
+ gradleUserHome: gradleUserHomeSchema,
177
182
  target: resolveArtifactTargetSchema.describe(RESOLVE_ARTIFACT_TARGET_DESCRIPTION),
178
183
  scope: artifactScopeSchema.optional().describe(SOURCE_SCOPE_DESCRIPTION),
179
184
  preferProjectVersion: z.boolean().optional().describe("When true, detect MC version from gradle.properties and override target.value"),
@@ -196,6 +201,7 @@ export const batchClassSourceShape = {
196
201
  sourcePriority: mappingSourcePrioritySchema.optional(),
197
202
  allowDecompile: z.boolean().optional(),
198
203
  projectPath: optionalNonEmptyString,
204
+ gradleUserHome: gradleUserHomeSchema,
199
205
  scope: artifactScopeSchema.optional(),
200
206
  preferProjectVersion: z.boolean().optional(),
201
207
  strictVersion: z.boolean().optional(),
@@ -250,6 +256,7 @@ export const batchClassMembersShape = {
250
256
  sourcePriority: mappingSourcePrioritySchema.optional(),
251
257
  allowDecompile: z.boolean().optional(),
252
258
  projectPath: optionalNonEmptyString,
259
+ gradleUserHome: gradleUserHomeSchema,
253
260
  scope: artifactScopeSchema.optional(),
254
261
  preferProjectVersion: z.boolean().optional(),
255
262
  strictVersion: z.boolean().optional(),
@@ -278,6 +285,7 @@ export const batchSymbolExistsShape = {
278
285
  sourcePriority: mappingSourcePrioritySchema.optional(),
279
286
  allowDecompile: z.boolean().optional(),
280
287
  projectPath: optionalNonEmptyString,
288
+ gradleUserHome: gradleUserHomeSchema,
281
289
  scope: artifactScopeSchema.optional(),
282
290
  preferProjectVersion: z.boolean().optional(),
283
291
  strictVersion: z.boolean().optional(),
@@ -310,6 +318,7 @@ export const batchMappingsShape = {
310
318
  version: nonEmptyString.describe("Minecraft version shared by every entry. Per-entry version is rejected; this batch shape is intentionally single-version."),
311
319
  sourcePriority: mappingSourcePrioritySchema.optional(),
312
320
  projectPath: optionalNonEmptyString,
321
+ gradleUserHome: gradleUserHomeSchema,
313
322
  concurrency: z.number().int().min(1).max(8).optional(),
314
323
  failFast: z.boolean().optional(),
315
324
  compact: z.boolean().optional(),
@@ -329,6 +338,7 @@ export const searchClassSourceShape = {
329
338
  cursor: optionalNonEmptyString,
330
339
  queryNamespace: sourceMappingSchema.optional().describe("Namespace of the query. When set and intent='symbol' with a fully-qualified class name, the query is translated through find-mapping before searching the artifact namespace. Ignored for text/path intents (warning surfaced)."),
331
340
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first. Used only when queryNamespace triggers translation."),
341
+ gradleUserHome: gradleUserHomeSchema,
332
342
  compact: z.boolean().default(false).describe("When true, strip the artifactContents summary and empty fields from the response. Default false.")
333
343
  };
334
344
  export const searchClassSourceSchema = z.object(searchClassSourceShape).superRefine((value, ctx) => {
@@ -361,6 +371,7 @@ export const traceSymbolLifecycleShape = {
361
371
  toVersion: optionalNonEmptyString,
362
372
  mapping: sourceMappingSchema.optional().describe("obfuscated | mojang | intermediary | yarn (default obfuscated)"),
363
373
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
374
+ gradleUserHome: gradleUserHomeSchema,
364
375
  includeSnapshots: z.boolean().default(false),
365
376
  maxVersions: optionalPositiveInt.default(120).describe("max 400"),
366
377
  includeTimeline: z.boolean().default(false)
@@ -372,6 +383,7 @@ export const diffClassSignaturesShape = {
372
383
  toVersion: nonEmptyString,
373
384
  mapping: sourceMappingSchema.optional().describe("obfuscated | mojang | intermediary | yarn (default obfuscated)"),
374
385
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
386
+ gradleUserHome: gradleUserHomeSchema,
375
387
  includeFullDiff: z.boolean().default(true).describe("When false, omit from/to snapshots from modified entries and keep only key+changed")
376
388
  };
377
389
  export const diffClassSignaturesSchema = z.object(diffClassSignaturesShape);
@@ -384,6 +396,7 @@ export const findMappingShape = {
384
396
  sourceMapping: sourceMappingSchema.describe("obfuscated | mojang | intermediary | yarn"),
385
397
  targetMapping: sourceMappingSchema.describe("obfuscated | mojang | intermediary | yarn"),
386
398
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
399
+ gradleUserHome: gradleUserHomeSchema,
387
400
  signatureMode: z.enum(["exact", "name-only"]).default("name-only")
388
401
  .describe("exact: descriptor required for kind=method; name-only (default): match by owner+name only"),
389
402
  disambiguation: z
@@ -463,6 +476,7 @@ export const resolveMethodMappingExactShape = {
463
476
  sourceMapping: sourceMappingSchema.describe("obfuscated | mojang | intermediary | yarn"),
464
477
  targetMapping: sourceMappingSchema.describe("obfuscated | mojang | intermediary | yarn"),
465
478
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
479
+ gradleUserHome: gradleUserHomeSchema,
466
480
  maxCandidates: optionalPositiveInt.default(5).describe("Limit returned candidates (default 5, max 200). Raise when you need the full candidate list."),
467
481
  compact: z.boolean().default(true).describe("Omit top-level empty arrays, null/undefined values, and empty objects from the response. "
468
482
  + "Also omit redundant candidates array for single full-confidence exact-match resolutions. "
@@ -505,6 +519,7 @@ export const getClassApiMatrixShape = {
505
519
  classNameMapping: sourceMappingSchema.describe("obfuscated | mojang | intermediary | yarn"),
506
520
  includeKinds: classApiKindsSchema.optional().describe("comma-separated: class,field,method"),
507
521
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
522
+ gradleUserHome: gradleUserHomeSchema,
508
523
  maxRows: optionalPositiveInt.describe("Limit returned rows (max 5000)")
509
524
  };
510
525
  export const getClassApiMatrixSchema = z.object(getClassApiMatrixShape);
@@ -517,6 +532,7 @@ export const resolveWorkspaceSymbolShape = {
517
532
  descriptor: optionalDescriptorString.describe("JVM descriptor. Empty strings are treated as omitted."),
518
533
  sourceMapping: sourceMappingSchema.describe("obfuscated | mojang | intermediary | yarn"),
519
534
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
535
+ gradleUserHome: gradleUserHomeSchema,
520
536
  maxCandidates: optionalPositiveInt.default(5).describe("Limit returned candidates for field/method lookups (default 5, max 200). Raise when you need the full candidate list."),
521
537
  compact: z.boolean().default(true).describe("Omit top-level empty arrays, null/undefined values, and empty objects from the response. "
522
538
  + "Also omit redundant candidates array for single full-confidence exact-match resolutions. "
@@ -589,6 +605,7 @@ export const checkSymbolExistsShape = {
589
605
  descriptor: optionalDescriptorString.describe("required for kind=method unless signatureMode=name-only. Empty strings are treated as omitted."),
590
606
  sourceMapping: sourceMappingSchema.describe("obfuscated | mojang | intermediary | yarn"),
591
607
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
608
+ gradleUserHome: gradleUserHomeSchema,
592
609
  nameMode: classNameModeSchema.default("fqcn").describe("fqcn | auto"),
593
610
  signatureMode: z.enum(["exact", "name-only"]).default("exact")
594
611
  .describe("exact: require descriptor for methods; name-only: match by owner+name only"),
@@ -711,6 +728,7 @@ export const validateMixinShape = {
711
728
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
712
729
  scope: artifactScopeSchema.optional().describe(SOURCE_SCOPE_DESCRIPTION),
713
730
  projectPath: optionalNonEmptyString.describe("Optional workspace root path for Loom cache-assisted source resolution"),
731
+ gradleUserHome: gradleUserHomeSchema,
714
732
  preferProjectVersion: z.boolean().optional().describe("When true, detect MC version from gradle.properties and override version"),
715
733
  minSeverity: z.enum(["error", "warning", "all"]).default("all")
716
734
  .describe("'error'=errors only, 'warning'=errors+warnings, 'all'=everything"),
@@ -738,6 +756,7 @@ export const validateAccessWidenerShape = {
738
756
  mapping: sourceMappingSchema.optional().describe("obfuscated | mojang | intermediary | yarn"),
739
757
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
740
758
  projectPath: optionalNonEmptyString.describe("Optional workspace root path for Loom cache-assisted runtime validation"),
759
+ gradleUserHome: gradleUserHomeSchema,
741
760
  scope: artifactScopeSchema.optional().describe(SOURCE_SCOPE_DESCRIPTION),
742
761
  preferProjectVersion: z.boolean().default(false)
743
762
  .describe("When true, detect MC version from gradle.properties and override version")
@@ -749,6 +768,7 @@ export const validateAccessTransformerShape = {
749
768
  atNamespace: z.enum(["srg", "mojang", "obfuscated"]).optional().describe("srg | mojang | obfuscated"),
750
769
  sourcePriority: mappingSourcePrioritySchema.optional().describe("loom-first | maven-first"),
751
770
  projectPath: optionalNonEmptyString.describe("Optional workspace root path for Forge/NeoForge runtime validation"),
771
+ gradleUserHome: gradleUserHomeSchema,
752
772
  scope: artifactScopeSchema.optional().describe(SOURCE_SCOPE_DESCRIPTION),
753
773
  preferProjectVersion: z.boolean().default(false)
754
774
  .describe("When true, detect MC version from gradle.properties and override version")
package/docs/README-ja.md CHANGED
@@ -252,7 +252,7 @@ stdio トランスポートは、改行区切り形式と `Content-Length` フ
252
252
 
253
253
  ### トップレベルワークフローツール
254
254
 
255
- <!-- BEGIN GENERATED TOOL TABLE: v3-entry-tools -->
255
+ <!-- BEGIN GENERATED TOOL TABLE: top-level-workflow-tools -->
256
256
  | ツール | 役割 |
257
257
  | --- | --- |
258
258
  | `inspect-minecraft` | バージョン、アーティファクト、クラス、ファイル、ソース本文、ワークスペース文脈の調査フローをまとめて扱う |
@@ -261,7 +261,7 @@ stdio トランスポートは、改行区切り形式と `Content-Length` フ
261
261
  | `analyze-mod` | Mod メタデータの要約、Mod コードのデコンパイル / 検索、クラスソース確認、リマップのプレビュー / 実行を扱う |
262
262
  | `validate-project` | ワークスペース要約と、Mixin / Access Widener / Access Transformer の直接検証を行う |
263
263
  | `manage-cache` | キャッシュの一覧、検証、クリーンアップ / 再構築のプレビュー / 実行を行う |
264
- <!-- END GENERATED TOOL TABLE: v3-entry-tools -->
264
+ <!-- END GENERATED TOOL TABLE: top-level-workflow-tools -->
265
265
 
266
266
  ### ソース探索
267
267
 
@@ -38,6 +38,7 @@ Start here when you are not sure which tool to reach for. In every row, the left
38
38
  - When a parameter has a fixed safe default, `tools/list` exposes it through the JSON Schema `default` field so clients can rely on schema metadata instead of prose notes.
39
39
  - Retryable `suggestedCall` payloads omit parameters when the supplied value already matches the tool default, keeping recovery calls smaller without changing behavior.
40
40
  - Source-oriented tools expose `artifactContents` so callers can tell whether the backing artifact is a `source-jar` or a `decompiled-binary`. `get-class-source`, `get-class-members`, `search-class-source`, and `get-artifact-file` also expose `returnedNamespace`.
41
+ - Cache-backed source, mapping, validation, batch, and workflow tools accept `gradleUserHome?: string` when they need Loom cache data. Use it for builds that used an isolated `GRADLE_USER_HOME`; the server searches `<gradleUserHome>/loom-cache` and `<gradleUserHome>/caches/fabric-loom` before the MCP process default. The value selects a Gradle User Home, not arbitrary Loom cache roots.
41
42
  - `get-class-members` returns `decompiledFallback` (with `constructors`, `fields`, `methods`, each entry is `{ name, line, kind }`) and `decompiledMemberCounts` whenever bytecode enumeration yields zero but the decompiled source for the class is already indexed. The bytecode-derived `members` / `counts` are preserved as-is; the fallback is additive and carries no descriptor or access modifier. `qualityFlags` gains `"members-from-decompiled-source"` in that case. Use `get-class-source` for descriptors and full context.
42
43
  - `get-class-members` also returns an additive `status: "ok" | "members_unavailable" | "partial"` field so callers can distinguish "really 0 members" from "extraction unavailable":
43
44
 
@@ -274,7 +275,7 @@ These environment variables are read once at worker startup and provide rollback
274
275
  | --- | --- | --- | --- |
275
276
  | `workspace.detected` | A `gradle.properties`, `settings.gradle{,.kts}`, or `build.gradle{,.kts}` file exists at `subject.projectPath`. | `evidence: ["gradle.properties", ...]` lists the gradle files that were found. | `missing` when no gradle files exist; `error` when the filesystem read itself failed. |
276
277
  | `gradle.readable` | `gradle.properties` can be read and the workspace's gradle build scripts are enumerable. | `propertiesPath` and `buildScripts[]` (relative paths). | `skipped` when `workspace.detected` is not `ok`; `missing` when no gradle files at all; `error` on parse / read failure. |
277
- | `loom.cache.found` | A Loom (Fabric / Quilt) cache directory under the workspace or `GRADLE_USER_HOME` exists. Independent of `workspace.detected` so callers can detect a global Loom cache even on non-gradle workspaces. | `cachePath` of the first matching directory. | `missing` when none of the candidate roots exist; `error` on filesystem failure. |
278
+ | `loom.cache.found` | A Loom (Fabric / Quilt) cache directory exists under the workspace, `gradleUserHome`, or the process `GRADLE_USER_HOME`. It is independent of `workspace.detected`, so callers can detect a global Loom cache even on non-Gradle workspaces. | `cachePath` of the first matching directory. | `missing` when none of the candidate roots exist; `error` on filesystem failure. |
278
279
  | `minecraft.artifact.resolved` | A lightweight artifact metadata probe can locate `target: { kind: "version", value: <resolvedVersion> }` against the workspace context. The probe does not decompile Minecraft or rebuild the source index. | `artifactId` and `mappingApplied`. | `skipped` when `workspace.detected` or `gradle.readable` is not `ok`; `error` when the lightweight probe cannot verify the artifact or requested mapping without full resolution (carries `error.code` and `error.detail`). |
279
280
  | `mixins.validated` | At least one `*.mixins.json` file was discovered AND every per-config validation completed without throwing. | `counts: { ok, partial, invalid }` (validation outcomes from `validate-mixin`). | `error` when any per-config validation threw (still emits `counts`); `skipped` when discovery was empty AND `workspace.detected` / `gradle.readable` blocked; `missing` when discovery returned 0 paths and upstream probes were `ok`. A failed `minecraft.artifact.resolved` does not flip executed validators to `skipped`. |
280
281
  | `accessWideners.validated` | At least one Access Widener file was discovered AND every validation completed without throwing. | `counts: { ok, invalid }`. | Same rules as `mixins.validated`. |
@@ -388,6 +389,8 @@ Use `resolve-workspace-symbol` when you need compile-visible names from actual G
388
389
 
389
390
  Path-based overrides treat blank values and the literal strings `undefined` and `null` as unset, so accidental client serialization does not create `./undefined` or `./null` cache roots or broken JAR override paths.
390
391
 
392
+ `gradleUserHome` is a per-call path option, not an environment variable. It takes precedence over the MCP process `GRADLE_USER_HOME` for Loom source jars, Loom Tiny mappings, loader/runtime jars, and `validate-project` Loom cache probes. `projectPath` search roots still apply for workspace-local caches.
393
+
391
394
  ### Core and Repository Discovery
392
395
 
393
396
  | Variable | Default | Description |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adhisang/minecraft-modding-mcp",
3
- "version": "4.1.1",
3
+ "version": "4.2.0",
4
4
  "description": "MCP server for AI-assisted Minecraft modding: inspect decompiled source, resolve Mojang/Yarn/Intermediary mappings, diff versions, analyze Fabric/Forge/NeoForge mod JARs, and validate Mixin, Access Widener, and Access Transformer files.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",