mcdev-mcp 1.0.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 (87) hide show
  1. package/LICENSE +77 -0
  2. package/README.md +365 -0
  3. package/dist/callgraph/index.d.ts +14 -0
  4. package/dist/callgraph/index.d.ts.map +1 -0
  5. package/dist/callgraph/index.js +201 -0
  6. package/dist/callgraph/index.js.map +1 -0
  7. package/dist/callgraph/query.d.ts +20 -0
  8. package/dist/callgraph/query.d.ts.map +1 -0
  9. package/dist/callgraph/query.js +95 -0
  10. package/dist/callgraph/query.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +318 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/decompiler/download.d.ts +31 -0
  16. package/dist/decompiler/download.d.ts.map +1 -0
  17. package/dist/decompiler/download.js +145 -0
  18. package/dist/decompiler/download.js.map +1 -0
  19. package/dist/decompiler/downloader.d.ts +7 -0
  20. package/dist/decompiler/downloader.d.ts.map +1 -0
  21. package/dist/decompiler/downloader.js +4 -0
  22. package/dist/decompiler/downloader.js.map +1 -0
  23. package/dist/decompiler/index.d.ts +16 -0
  24. package/dist/decompiler/index.d.ts.map +1 -0
  25. package/dist/decompiler/index.js +74 -0
  26. package/dist/decompiler/index.js.map +1 -0
  27. package/dist/decompiler/remapper.d.ts +9 -0
  28. package/dist/decompiler/remapper.d.ts.map +1 -0
  29. package/dist/decompiler/remapper.js +174 -0
  30. package/dist/decompiler/remapper.js.map +1 -0
  31. package/dist/decompiler/tools.d.ts +3 -0
  32. package/dist/decompiler/tools.d.ts.map +1 -0
  33. package/dist/decompiler/tools.js +79 -0
  34. package/dist/decompiler/tools.js.map +1 -0
  35. package/dist/decompiler/vineflower.d.ts +3 -0
  36. package/dist/decompiler/vineflower.d.ts.map +1 -0
  37. package/dist/decompiler/vineflower.js +37 -0
  38. package/dist/decompiler/vineflower.js.map +1 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +63 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/indexer/index.d.ts +17 -0
  44. package/dist/indexer/index.d.ts.map +1 -0
  45. package/dist/indexer/index.js +134 -0
  46. package/dist/indexer/index.js.map +1 -0
  47. package/dist/indexer/parser.d.ts +11 -0
  48. package/dist/indexer/parser.d.ts.map +1 -0
  49. package/dist/indexer/parser.js +188 -0
  50. package/dist/indexer/parser.js.map +1 -0
  51. package/dist/indexer/types.d.ts +14 -0
  52. package/dist/indexer/types.d.ts.map +1 -0
  53. package/dist/indexer/types.js +2 -0
  54. package/dist/indexer/types.js.map +1 -0
  55. package/dist/storage/index.d.ts +2 -0
  56. package/dist/storage/index.d.ts.map +1 -0
  57. package/dist/storage/index.js +2 -0
  58. package/dist/storage/index.js.map +1 -0
  59. package/dist/storage/source-store.d.ts +43 -0
  60. package/dist/storage/source-store.d.ts.map +1 -0
  61. package/dist/storage/source-store.js +279 -0
  62. package/dist/storage/source-store.js.map +1 -0
  63. package/dist/tools/index.d.ts +503 -0
  64. package/dist/tools/index.d.ts.map +1 -0
  65. package/dist/tools/index.js +535 -0
  66. package/dist/tools/index.js.map +1 -0
  67. package/dist/utils/config.d.ts +13 -0
  68. package/dist/utils/config.d.ts.map +1 -0
  69. package/dist/utils/config.js +12 -0
  70. package/dist/utils/config.js.map +1 -0
  71. package/dist/utils/paths.d.ts +30 -0
  72. package/dist/utils/paths.d.ts.map +1 -0
  73. package/dist/utils/paths.js +131 -0
  74. package/dist/utils/paths.js.map +1 -0
  75. package/dist/utils/types.d.ts +79 -0
  76. package/dist/utils/types.d.ts.map +1 -0
  77. package/dist/utils/types.js +2 -0
  78. package/dist/utils/types.js.map +1 -0
  79. package/dist/utils/version-manifest.d.ts +10 -0
  80. package/dist/utils/version-manifest.d.ts.map +1 -0
  81. package/dist/utils/version-manifest.js +64 -0
  82. package/dist/utils/version-manifest.js.map +1 -0
  83. package/dist/version-manager.d.ts +11 -0
  84. package/dist/version-manager.d.ts.map +1 -0
  85. package/dist/version-manager.js +29 -0
  86. package/dist/version-manager.js.map +1 -0
  87. package/package.json +64 -0
@@ -0,0 +1,131 @@
1
+ import * as path from 'path';
2
+ import * as os from 'os';
3
+ import * as fs from 'fs';
4
+ import { DEFAULT_CONFIG } from './config.js';
5
+ const MCDEV_DIR = '.mcdev-mcp';
6
+ export function getHomeDir() {
7
+ return path.join(os.homedir(), MCDEV_DIR);
8
+ }
9
+ export function getCacheDir() {
10
+ return path.join(getHomeDir(), 'cache');
11
+ }
12
+ export function getIndexDir() {
13
+ return path.join(getHomeDir(), 'index');
14
+ }
15
+ export function getToolsDir() {
16
+ return path.join(getHomeDir(), 'tools');
17
+ }
18
+ export function getDecompilerMcDir() {
19
+ return path.join(getHomeDir(), 'DecompilerMC');
20
+ }
21
+ export function getMinecraftCacheDir(version) {
22
+ return path.join(getCacheDir(), version);
23
+ }
24
+ export function getMinecraftSourceDir(version) {
25
+ return path.join(getMinecraftCacheDir(version), 'client');
26
+ }
27
+ export function getMinecraftJarPath(version) {
28
+ return path.join(getMinecraftCacheDir(version), 'jars', `${version}_unobfuscated.jar`);
29
+ }
30
+ export function getObfuscatedJarPath(version) {
31
+ return path.join(getMinecraftCacheDir(version), 'jars', `${version}_obfuscated.jar`);
32
+ }
33
+ export function getFabricApiCacheDir(version) {
34
+ return path.join(getCacheDir(), `fabric-api-${version}`);
35
+ }
36
+ export function getVineflowerPath() {
37
+ return path.join(getToolsDir(), 'vineflower.jar');
38
+ }
39
+ export function getTmpDir(version) {
40
+ return path.join(getHomeDir(), 'tmp', version);
41
+ }
42
+ export function getIndexManifestPath() {
43
+ return path.join(getIndexDir(), 'manifest.json');
44
+ }
45
+ export function getMinecraftIndexPath() {
46
+ return path.join(getIndexDir(), 'minecraft');
47
+ }
48
+ export function getFabricIndexPath() {
49
+ return path.join(getIndexDir(), 'fabric');
50
+ }
51
+ export function getPackageIndexPath(namespace, packageName) {
52
+ const baseDir = namespace === 'minecraft' ? getMinecraftIndexPath() : getFabricIndexPath();
53
+ return path.join(baseDir, `${packageName}.json`);
54
+ }
55
+ export function getConfig() {
56
+ return {
57
+ ...DEFAULT_CONFIG,
58
+ cacheDir: getCacheDir(),
59
+ indexDir: getIndexDir(),
60
+ toolsDir: getToolsDir(),
61
+ };
62
+ }
63
+ export function ensureDir(dir) {
64
+ if (!fs.existsSync(dir)) {
65
+ fs.mkdirSync(dir, { recursive: true });
66
+ }
67
+ }
68
+ export function ensureHomeDirs() {
69
+ ensureDir(getHomeDir());
70
+ ensureDir(getCacheDir());
71
+ ensureDir(getIndexDir());
72
+ ensureDir(getToolsDir());
73
+ ensureDir(getMinecraftIndexPath());
74
+ ensureDir(getFabricIndexPath());
75
+ }
76
+ export function getAvailableMinecraftVersions() {
77
+ const cacheDir = getCacheDir();
78
+ if (!fs.existsSync(cacheDir))
79
+ return [];
80
+ const versions = [];
81
+ for (const entry of fs.readdirSync(cacheDir)) {
82
+ const sourceDir = getMinecraftSourceDir(entry);
83
+ if (fs.existsSync(sourceDir)) {
84
+ versions.push(entry);
85
+ }
86
+ }
87
+ return versions.sort();
88
+ }
89
+ export function getVersionedIndexDir(version) {
90
+ return path.join(getIndexDir(), version);
91
+ }
92
+ export function getVersionedIndexManifestPath(version) {
93
+ return path.join(getVersionedIndexDir(version), 'manifest.json');
94
+ }
95
+ export function getVersionedMinecraftIndexPath(version) {
96
+ return path.join(getVersionedIndexDir(version), 'minecraft');
97
+ }
98
+ export function getVersionedFabricIndexPath(version) {
99
+ return path.join(getVersionedIndexDir(version), 'fabric');
100
+ }
101
+ export function getVersionedPackageIndexPath(namespace, packageName, version) {
102
+ const baseDir = namespace === 'minecraft'
103
+ ? getVersionedMinecraftIndexPath(version)
104
+ : getVersionedFabricIndexPath(version);
105
+ return path.join(baseDir, `${packageName}.json`);
106
+ }
107
+ export function isVersionIndexed(version) {
108
+ const manifestPath = getVersionedIndexManifestPath(version);
109
+ return fs.existsSync(manifestPath);
110
+ }
111
+ export function getIndexedVersions() {
112
+ const indexDir = getIndexDir();
113
+ if (!fs.existsSync(indexDir))
114
+ return [];
115
+ const versions = [];
116
+ for (const entry of fs.readdirSync(indexDir, { withFileTypes: true })) {
117
+ if (entry.isDirectory()) {
118
+ const manifestPath = getVersionedIndexManifestPath(entry.name);
119
+ if (fs.existsSync(manifestPath)) {
120
+ versions.push(entry.name);
121
+ }
122
+ }
123
+ }
124
+ return versions.sort();
125
+ }
126
+ export function ensureVersionedIndexDirs(version) {
127
+ ensureDir(getVersionedIndexDir(version));
128
+ ensureDir(getVersionedMinecraftIndexPath(version));
129
+ ensureDir(getVersionedFabricIndexPath(version));
130
+ }
131
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ export interface MojangVersionManifest {
2
+ latest: {
3
+ release: string;
4
+ snapshot: string;
5
+ };
6
+ versions: MojangVersion[];
7
+ }
8
+ export interface MojangVersion {
9
+ id: string;
10
+ type: 'release' | 'snapshot' | 'old_beta' | 'old_alpha';
11
+ url: string;
12
+ time: string;
13
+ releaseTime: string;
14
+ }
15
+ export interface MojangVersionDetail {
16
+ id: string;
17
+ type: string;
18
+ downloads: {
19
+ client?: MojangDownload;
20
+ server?: MojangDownload;
21
+ client_mappings?: MojangDownload;
22
+ server_mappings?: MojangDownload;
23
+ };
24
+ }
25
+ export interface MojangDownload {
26
+ sha1: string;
27
+ size: number;
28
+ url: string;
29
+ }
30
+ export interface FabricMavenMetadata {
31
+ versions: string[];
32
+ }
33
+ export interface IndexManifest {
34
+ minecraftVersion: string;
35
+ fabricApiVersion: string | null;
36
+ generated: string;
37
+ packages: {
38
+ minecraft: string[];
39
+ fabric: string[];
40
+ };
41
+ }
42
+ export interface PackageIndex {
43
+ package: string;
44
+ classes: Record<string, ClassInfo>;
45
+ }
46
+ export type ClassKind = 'class' | 'interface' | 'enum' | 'record';
47
+ export interface ClassInfo {
48
+ kind: ClassKind;
49
+ super: string | null;
50
+ interfaces: string[];
51
+ fields: FieldInfo[];
52
+ methods: MethodInfo[];
53
+ sourcePath: string;
54
+ }
55
+ export interface FieldInfo {
56
+ name: string;
57
+ type: string;
58
+ modifiers: string[];
59
+ }
60
+ export interface MethodInfo {
61
+ name: string;
62
+ returnType: string;
63
+ params: {
64
+ name: string;
65
+ type: string;
66
+ }[];
67
+ modifiers: string[];
68
+ lineStart: number;
69
+ lineEnd: number;
70
+ }
71
+ export interface SearchResult {
72
+ type: 'class' | 'method' | 'field';
73
+ className: string;
74
+ name: string;
75
+ signature?: string;
76
+ sourcePath: string;
77
+ lineStart?: number;
78
+ }
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QACT,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,eAAe,CAAC,EAAE,cAAc,CAAC;QACjC,eAAe,CAAC,EAAE,cAAc,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { MojangVersionManifest, MojangVersionDetail, MojangDownload } from './types.js';
2
+ export type { MojangDownload };
3
+ export declare function fetchVersionManifest(): Promise<MojangVersionManifest>;
4
+ export declare function fetchVersionDetail(versionId: string): Promise<MojangVersionDetail>;
5
+ export declare function getUnobfuscatedJarDownload(versionId: string): Promise<MojangDownload | null>;
6
+ export declare function getMinecraftJarDownload(versionId: string): Promise<MojangDownload | null>;
7
+ export declare function fetchFabricApiVersions(): Promise<string[]>;
8
+ export declare function findFabricApiVersion(versions: string[], mcVersion: string): string | null;
9
+ export declare function getFabricApiSourcesUrl(version: string): string;
10
+ //# sourceMappingURL=version-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-manifest.d.ts","sourceRoot":"","sources":["../../src/utils/version-manifest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExF,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAG3E;AAED,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAUxF;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAelG;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAG/F;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAahE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBzF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,64 @@
1
+ import axios from 'axios';
2
+ import { MOJANG_VERSION_MANIFEST_URL, FABRIC_MAVEN_URL } from './config.js';
3
+ export async function fetchVersionManifest() {
4
+ const response = await axios.get(MOJANG_VERSION_MANIFEST_URL);
5
+ return response.data;
6
+ }
7
+ export async function fetchVersionDetail(versionId) {
8
+ const manifest = await fetchVersionManifest();
9
+ const version = manifest.versions.find(v => v.id === versionId);
10
+ if (!version) {
11
+ throw new Error(`Version ${versionId} not found in manifest`);
12
+ }
13
+ const response = await axios.get(version.url);
14
+ return response.data;
15
+ }
16
+ export async function getUnobfuscatedJarDownload(versionId) {
17
+ const detail = await fetchVersionDetail(versionId);
18
+ const unobfVersion = `${versionId}_unobfuscated`;
19
+ const manifest = await fetchVersionManifest();
20
+ const unobf = manifest.versions.find(v => v.id === unobfVersion);
21
+ if (unobf) {
22
+ const unobfDetail = await axios.get(unobf.url);
23
+ if (unobfDetail.data.downloads?.client) {
24
+ return unobfDetail.data.downloads.client;
25
+ }
26
+ }
27
+ return detail.downloads.client || null;
28
+ }
29
+ export async function getMinecraftJarDownload(versionId) {
30
+ const detail = await fetchVersionDetail(versionId);
31
+ return detail.downloads.client || null;
32
+ }
33
+ export async function fetchFabricApiVersions() {
34
+ const url = `${FABRIC_MAVEN_URL}/net/fabricmc/fabric-api/fabric-api/maven-metadata.xml`;
35
+ const response = await axios.get(url, { responseType: 'text' });
36
+ const versions = [];
37
+ const versionRegex = /<version>([^<]+)<\/version>/g;
38
+ let match;
39
+ while ((match = versionRegex.exec(response.data)) !== null) {
40
+ versions.push(match[1]);
41
+ }
42
+ return versions;
43
+ }
44
+ export function findFabricApiVersion(versions, mcVersion) {
45
+ const matching = versions.filter(v => v.includes(`+${mcVersion}`));
46
+ if (matching.length === 0)
47
+ return null;
48
+ matching.sort((a, b) => {
49
+ const aParts = a.split('+')[0].split('.').map(Number);
50
+ const bParts = b.split('+')[0].split('.').map(Number);
51
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
52
+ const aVal = aParts[i] || 0;
53
+ const bVal = bParts[i] || 0;
54
+ if (aVal !== bVal)
55
+ return bVal - aVal;
56
+ }
57
+ return 0;
58
+ });
59
+ return matching[0];
60
+ }
61
+ export function getFabricApiSourcesUrl(version) {
62
+ return `${FABRIC_MAVEN_URL}/net/fabricmc/fabric-api/fabric-api/${version}/fabric-api-${version}-sources.jar`;
63
+ }
64
+ //# sourceMappingURL=version-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-manifest.js","sourceRoot":"","sources":["../../src/utils/version-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class VersionManager {
2
+ private activeVersion;
3
+ setVersion(version: string): void;
4
+ getVersion(): string | null;
5
+ requireVersion(): string;
6
+ isVersionSet(): boolean;
7
+ clearVersion(): void;
8
+ isActiveVersionIndexed(): boolean;
9
+ }
10
+ export declare const versionManager: VersionManager;
11
+ //# sourceMappingURL=version-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-manager.d.ts","sourceRoot":"","sources":["../src/version-manager.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAuB;IAE5C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,cAAc,IAAI,MAAM;IAOxB,YAAY,IAAI,OAAO;IAIvB,YAAY,IAAI,IAAI;IAIpB,sBAAsB,IAAI,OAAO;CAIlC;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { isVersionIndexed } from './utils/paths.js';
2
+ export class VersionManager {
3
+ activeVersion = null;
4
+ setVersion(version) {
5
+ this.activeVersion = version;
6
+ }
7
+ getVersion() {
8
+ return this.activeVersion;
9
+ }
10
+ requireVersion() {
11
+ if (!this.activeVersion) {
12
+ throw new Error('No Minecraft version is currently set.');
13
+ }
14
+ return this.activeVersion;
15
+ }
16
+ isVersionSet() {
17
+ return this.activeVersion !== null;
18
+ }
19
+ clearVersion() {
20
+ this.activeVersion = null;
21
+ }
22
+ isActiveVersionIndexed() {
23
+ if (!this.activeVersion)
24
+ return false;
25
+ return isVersionIndexed(this.activeVersion);
26
+ }
27
+ }
28
+ export const versionManager = new VersionManager();
29
+ //# sourceMappingURL=version-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-manager.js","sourceRoot":"","sources":["../src/version-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,OAAO,cAAc;IACjB,aAAa,GAAkB,IAAI,CAAC;IAE5C,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;IACrC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "mcdev-mcp",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Minecraft mod development - provides decompiled code access and symbol search",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "mcdev-mcp": "dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "start": "node dist/cli.js serve",
18
+ "dev": "tsc --watch",
19
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
20
+ "lint": "eslint src --ext .ts",
21
+ "typecheck": "tsc --noEmit",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "keywords": [
25
+ "minecraft",
26
+ "mcp",
27
+ "fabric",
28
+ "modding",
29
+ "decompiler",
30
+ "model-context-protocol",
31
+ "ai",
32
+ "llm"
33
+ ],
34
+ "author": "",
35
+ "license": "MIT",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/weikengchen/mcdev-mcp.git"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/weikengchen/mcdev-mcp/issues"
42
+ },
43
+ "homepage": "https://github.com/weikengchen/mcdev-mcp#readme",
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.0.0",
46
+ "axios": "^1.6.0",
47
+ "better-sqlite3": "^12.6.2",
48
+ "commander": "^12.0.0",
49
+ "glob": "^10.0.0",
50
+ "unzipper": "^0.12.3"
51
+ },
52
+ "devDependencies": {
53
+ "@types/better-sqlite3": "^7.6.13",
54
+ "@types/jest": "^29.5.0",
55
+ "@types/node": "^20.10.0",
56
+ "@types/unzipper": "^0.10.10",
57
+ "jest": "^29.7.0",
58
+ "ts-jest": "^29.1.0",
59
+ "typescript": "^5.3.0"
60
+ },
61
+ "engines": {
62
+ "node": ">=18.0.0"
63
+ }
64
+ }