mcmodding-mcp 0.1.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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +324 -0
  3. package/dist/db-versioning.d.ts +31 -0
  4. package/dist/db-versioning.d.ts.map +1 -0
  5. package/dist/db-versioning.js +206 -0
  6. package/dist/db-versioning.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +202 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/indexer/chunker.d.ts +32 -0
  12. package/dist/indexer/chunker.d.ts.map +1 -0
  13. package/dist/indexer/chunker.js +157 -0
  14. package/dist/indexer/chunker.js.map +1 -0
  15. package/dist/indexer/crawler.d.ts +28 -0
  16. package/dist/indexer/crawler.d.ts.map +1 -0
  17. package/dist/indexer/crawler.js +550 -0
  18. package/dist/indexer/crawler.js.map +1 -0
  19. package/dist/indexer/embeddings.d.ts +56 -0
  20. package/dist/indexer/embeddings.d.ts.map +1 -0
  21. package/dist/indexer/embeddings.js +200 -0
  22. package/dist/indexer/embeddings.js.map +1 -0
  23. package/dist/indexer/sitemap.d.ts +35 -0
  24. package/dist/indexer/sitemap.d.ts.map +1 -0
  25. package/dist/indexer/sitemap.js +263 -0
  26. package/dist/indexer/sitemap.js.map +1 -0
  27. package/dist/indexer/store.d.ts +237 -0
  28. package/dist/indexer/store.d.ts.map +1 -0
  29. package/dist/indexer/store.js +857 -0
  30. package/dist/indexer/store.js.map +1 -0
  31. package/dist/indexer/types.d.ts +77 -0
  32. package/dist/indexer/types.d.ts.map +1 -0
  33. package/dist/indexer/types.js +2 -0
  34. package/dist/indexer/types.js.map +1 -0
  35. package/dist/indexer/updater.d.ts +52 -0
  36. package/dist/indexer/updater.d.ts.map +1 -0
  37. package/dist/indexer/updater.js +263 -0
  38. package/dist/indexer/updater.js.map +1 -0
  39. package/dist/services/concept-service.d.ts +49 -0
  40. package/dist/services/concept-service.d.ts.map +1 -0
  41. package/dist/services/concept-service.js +554 -0
  42. package/dist/services/concept-service.js.map +1 -0
  43. package/dist/services/example-service.d.ts +52 -0
  44. package/dist/services/example-service.d.ts.map +1 -0
  45. package/dist/services/example-service.js +302 -0
  46. package/dist/services/example-service.js.map +1 -0
  47. package/dist/services/search-service.d.ts +54 -0
  48. package/dist/services/search-service.d.ts.map +1 -0
  49. package/dist/services/search-service.js +519 -0
  50. package/dist/services/search-service.js.map +1 -0
  51. package/dist/services/search-utils.d.ts +34 -0
  52. package/dist/services/search-utils.d.ts.map +1 -0
  53. package/dist/services/search-utils.js +239 -0
  54. package/dist/services/search-utils.js.map +1 -0
  55. package/dist/tools/explainConcept.d.ts +9 -0
  56. package/dist/tools/explainConcept.d.ts.map +1 -0
  57. package/dist/tools/explainConcept.js +93 -0
  58. package/dist/tools/explainConcept.js.map +1 -0
  59. package/dist/tools/getExample.d.ts +20 -0
  60. package/dist/tools/getExample.d.ts.map +1 -0
  61. package/dist/tools/getExample.js +88 -0
  62. package/dist/tools/getExample.js.map +1 -0
  63. package/dist/tools/getMinecraftVersion.d.ts +6 -0
  64. package/dist/tools/getMinecraftVersion.d.ts.map +1 -0
  65. package/dist/tools/getMinecraftVersion.js +57 -0
  66. package/dist/tools/getMinecraftVersion.js.map +1 -0
  67. package/dist/tools/searchDocs.d.ts +15 -0
  68. package/dist/tools/searchDocs.d.ts.map +1 -0
  69. package/dist/tools/searchDocs.js +144 -0
  70. package/dist/tools/searchDocs.js.map +1 -0
  71. package/package.json +111 -0
  72. package/scripts/postinstall.js +859 -0
@@ -0,0 +1,239 @@
1
+ const MINECRAFT_SYNONYMS = {
2
+ register: [
3
+ 'registration',
4
+ 'registering',
5
+ 'create',
6
+ 'add',
7
+ 'define',
8
+ 'declare',
9
+ 'init',
10
+ 'initialize',
11
+ ],
12
+ item: ['items', 'itemstack', 'tool', 'weapon', 'armor'],
13
+ block: ['blocks', 'blockstate', 'tile'],
14
+ entity: ['entities', 'mob', 'creature', 'living'],
15
+ create: ['make', 'build', 'generate', 'new', 'add', 'register'],
16
+ custom: ['custom', 'modded', 'new', 'own'],
17
+ add: ['adding', 'insert', 'include', 'register', 'create'],
18
+ mixin: ['mixins', 'injection', 'inject', 'hook', 'patch'],
19
+ event: ['events', 'listener', 'handler', 'callback', 'subscribe'],
20
+ network: ['networking', 'packet', 'packets', 'sync', 'synchronize', 's2c', 'c2s'],
21
+ render: ['rendering', 'renderer', 'draw', 'display', 'model', 'texture'],
22
+ data: ['datagen', 'data-generation', 'datapack', 'json', 'recipe', 'loot'],
23
+ fabric: ['fabricmc', 'fabric-api', 'fapi'],
24
+ entrypoint: ['entrypoints', 'initializer', 'mod-initializer', 'main', 'client', 'server'],
25
+ registry: ['registries', 'registered', 'identifier', 'id'],
26
+ blockentity: ['block-entity', 'tile-entity', 'tileentity', 'be'],
27
+ container: ['inventory', 'chest', 'storage', 'gui', 'screen', 'menu'],
28
+ recipe: ['recipes', 'crafting', 'smelting', 'cooking'],
29
+ loot: ['loottable', 'loot-table', 'drops', 'drop'],
30
+ tag: ['tags', 'tagging', 'itemtag', 'blocktag'],
31
+ sound: ['sounds', 'audio', 'music', 'sfx'],
32
+ particle: ['particles', 'effect', 'effects', 'fx'],
33
+ command: ['commands', 'cmd', 'brigadier', 'argument'],
34
+ keybind: ['keybinding', 'keybinds', 'key', 'hotkey', 'shortcut', 'input'],
35
+ world: ['level', 'dimension', 'worldgen', 'generation', 'biome'],
36
+ structure: ['structures', 'building', 'feature', 'worldgen'],
37
+ };
38
+ const CODE_PATTERNS = {
39
+ register: ['Registry.register', 'REGISTRY', 'Registries', 'RegistryKey'],
40
+ item: ['Item', 'ItemStack', 'Item.Settings', 'FabricItemSettings'],
41
+ block: ['Block', 'BlockState', 'Block.Settings', 'FabricBlockSettings'],
42
+ entity: ['Entity', 'LivingEntity', 'EntityType', 'FabricEntityTypeBuilder'],
43
+ blockentity: ['BlockEntity', 'BlockEntityType', 'FabricBlockEntityTypeBuilder'],
44
+ mixin: ['@Mixin', '@Inject', '@Redirect', '@ModifyVariable', 'CallbackInfo'],
45
+ event: ['Event', 'Callback', 'register()', 'ServerLifecycleEvents', 'ClientLifecycleEvents'],
46
+ network: ['PacketByteBuf', 'ServerPlayNetworking', 'ClientPlayNetworking', 'PayloadTypeRegistry'],
47
+ recipe: ['Recipe', 'RecipeSerializer', 'RecipeType', 'Ingredient'],
48
+ command: ['CommandRegistrationCallback', 'LiteralArgumentBuilder', 'RequiredArgumentBuilder'],
49
+ keybind: ['KeyBinding', 'KeyBindingHelper', 'GLFW'],
50
+ screen: ['Screen', 'HandledScreen', 'ScreenHandler', 'ContainerScreen'],
51
+ render: ['Renderer', 'RenderLayer', 'VertexConsumer', 'MatrixStack', 'DrawContext'],
52
+ };
53
+ export function tokenizeQuery(query) {
54
+ const original = query.trim();
55
+ const tokens = original
56
+ .toLowerCase()
57
+ .split(/[\s\-_.,;:!?()[\]{}'"]+/)
58
+ .filter((t) => t.length > 1)
59
+ .map((t) => t.replace(/[^a-z0-9]/g, ''));
60
+ const expandedSet = new Set();
61
+ for (const token of tokens) {
62
+ expandedSet.add(token);
63
+ if (MINECRAFT_SYNONYMS[token]) {
64
+ for (const syn of MINECRAFT_SYNONYMS[token]) {
65
+ expandedSet.add(syn);
66
+ }
67
+ }
68
+ for (const [key, synonyms] of Object.entries(MINECRAFT_SYNONYMS)) {
69
+ if (synonyms.includes(token)) {
70
+ expandedSet.add(key);
71
+ for (const syn of synonyms) {
72
+ expandedSet.add(syn);
73
+ }
74
+ }
75
+ }
76
+ }
77
+ const expandedTokens = Array.from(expandedSet);
78
+ const ftsQuery = buildFtsQuery(tokens, expandedTokens);
79
+ const likePatterns = buildLikePatterns(tokens);
80
+ const codePatterns = getCodePatterns(tokens);
81
+ return {
82
+ original,
83
+ tokens,
84
+ expandedTokens,
85
+ ftsQuery,
86
+ likePatterns,
87
+ codePatterns,
88
+ };
89
+ }
90
+ function buildFtsQuery(tokens, expandedTokens) {
91
+ if (tokens.length === 0)
92
+ return '';
93
+ const uniqueTerms = Array.from(new Set([...tokens, ...expandedTokens]));
94
+ const validTerms = uniqueTerms
95
+ .filter((t) => t.length > 2)
96
+ .map((t) => t.replace(/['"]/g, ''))
97
+ .filter((t) => t.length > 0);
98
+ if (validTerms.length === 0) {
99
+ return tokens.map((t) => `"${t}"`).join(' OR ');
100
+ }
101
+ const parts = [];
102
+ if (tokens.length > 1) {
103
+ parts.push(`"${tokens.join(' ')}"`);
104
+ }
105
+ for (const term of validTerms) {
106
+ parts.push(term);
107
+ }
108
+ return parts.join(' OR ');
109
+ }
110
+ function buildLikePatterns(tokens) {
111
+ const patterns = [];
112
+ if (tokens.length > 0) {
113
+ patterns.push(`%${tokens.join('%')}%`);
114
+ }
115
+ for (const token of tokens) {
116
+ if (token.length > 2) {
117
+ patterns.push(`%${token}%`);
118
+ }
119
+ }
120
+ return patterns;
121
+ }
122
+ function getCodePatterns(tokens) {
123
+ const patterns = [];
124
+ for (const token of tokens) {
125
+ if (CODE_PATTERNS[token]) {
126
+ patterns.push(...CODE_PATTERNS[token]);
127
+ }
128
+ for (const [key, synonyms] of Object.entries(MINECRAFT_SYNONYMS)) {
129
+ if (synonyms.includes(token) && CODE_PATTERNS[key]) {
130
+ patterns.push(...CODE_PATTERNS[key]);
131
+ }
132
+ }
133
+ }
134
+ return Array.from(new Set(patterns));
135
+ }
136
+ export function calculateRelevanceScore(item, query) {
137
+ let score = 0;
138
+ const reasons = [];
139
+ const titleLower = (item.title || '').toLowerCase();
140
+ const headingLower = (item.section_heading || '').toLowerCase();
141
+ const contentLower = (item.content || item.section_content || '').toLowerCase();
142
+ const codeLower = (item.code || '').toLowerCase();
143
+ const captionLower = (item.caption || '').toLowerCase();
144
+ const categoryLower = (item.category || '').toLowerCase();
145
+ const urlLower = (item.url || '').toLowerCase();
146
+ const originalLower = query.original.toLowerCase();
147
+ if (titleLower.includes(originalLower)) {
148
+ score += 100;
149
+ reasons.push('exact phrase in title');
150
+ }
151
+ if (headingLower.includes(originalLower)) {
152
+ score += 80;
153
+ reasons.push('exact phrase in heading');
154
+ }
155
+ if (captionLower.includes(originalLower)) {
156
+ score += 70;
157
+ reasons.push('exact phrase in caption');
158
+ }
159
+ for (const token of query.tokens) {
160
+ if (token.length < 2)
161
+ continue;
162
+ if (titleLower.includes(token)) {
163
+ score += 20;
164
+ if (!reasons.includes('token in title'))
165
+ reasons.push('token in title');
166
+ }
167
+ if (headingLower.includes(token)) {
168
+ score += 18;
169
+ if (!reasons.includes('token in heading'))
170
+ reasons.push('token in heading');
171
+ }
172
+ if (captionLower.includes(token)) {
173
+ score += 15;
174
+ if (!reasons.includes('token in caption'))
175
+ reasons.push('token in caption');
176
+ }
177
+ if (urlLower.includes(token)) {
178
+ score += 12;
179
+ if (!reasons.includes('token in URL'))
180
+ reasons.push('token in URL');
181
+ }
182
+ if (categoryLower.includes(token)) {
183
+ score += 10;
184
+ if (!reasons.includes('token in category'))
185
+ reasons.push('token in category');
186
+ }
187
+ if (contentLower.includes(token)) {
188
+ score += 5;
189
+ if (!reasons.includes('token in content'))
190
+ reasons.push('token in content');
191
+ }
192
+ }
193
+ for (const pattern of query.codePatterns) {
194
+ if (codeLower.includes(pattern.toLowerCase())) {
195
+ score += 25;
196
+ if (!reasons.includes('code pattern match'))
197
+ reasons.push('code pattern match');
198
+ }
199
+ }
200
+ for (const token of query.expandedTokens) {
201
+ if (query.tokens.includes(token))
202
+ continue;
203
+ if (titleLower.includes(token) || headingLower.includes(token)) {
204
+ score += 8;
205
+ if (!reasons.includes('synonym match'))
206
+ reasons.push('synonym match');
207
+ }
208
+ }
209
+ if (item.code && item.code.length > 50) {
210
+ score += 10;
211
+ reasons.push('has substantial code');
212
+ }
213
+ return { score, reasons };
214
+ }
215
+ export function deduplicateAndRank(results, limit) {
216
+ const sorted = [...results].sort((a, b) => b.score - a.score);
217
+ const seen = new Set();
218
+ const deduplicated = [];
219
+ for (const result of sorted) {
220
+ let key;
221
+ if (result.item.code) {
222
+ key = result.item.code.substring(0, 200).replace(/\s+/g, ' ');
223
+ }
224
+ else {
225
+ key = `${result.item.url || ''}::${result.item.section_heading || ''}`;
226
+ }
227
+ if (!seen.has(key)) {
228
+ seen.add(key);
229
+ deduplicated.push(result);
230
+ }
231
+ if (deduplicated.length >= limit)
232
+ break;
233
+ }
234
+ return deduplicated;
235
+ }
236
+ export function normalizeScore(score, maxPossible = 200) {
237
+ return Math.min(100, Math.round((score / maxPossible) * 100));
238
+ }
239
+ //# sourceMappingURL=search-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-utils.js","sourceRoot":"","sources":["../../src/services/search-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { type ConceptExplanation } from '../services/concept-service.js';
3
+ export interface ExplainConceptParams {
4
+ concept: string;
5
+ }
6
+ export declare function handleExplainConcept(params: ExplainConceptParams): Promise<CallToolResult>;
7
+ export declare function getSuggestedConcepts(): string[];
8
+ export type { ConceptExplanation };
9
+ //# sourceMappingURL=explainConcept.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainConcept.d.ts","sourceRoot":"","sources":["../../src/tools/explainConcept.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwEhG;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAuB/C;AAGD,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { ConceptService } from '../services/concept-service.js';
2
+ let conceptServiceInstance = null;
3
+ function getConceptService() {
4
+ if (!conceptServiceInstance) {
5
+ conceptServiceInstance = new ConceptService();
6
+ }
7
+ return conceptServiceInstance;
8
+ }
9
+ export async function handleExplainConcept(params) {
10
+ const { concept } = params;
11
+ if (!concept || typeof concept !== 'string' || concept.trim().length === 0) {
12
+ return {
13
+ content: [
14
+ {
15
+ type: 'text',
16
+ text: 'Error: Concept parameter is required and cannot be empty.',
17
+ },
18
+ ],
19
+ isError: true,
20
+ };
21
+ }
22
+ const trimmedConcept = concept.trim();
23
+ if (trimmedConcept.length > 100) {
24
+ return {
25
+ content: [
26
+ {
27
+ type: 'text',
28
+ text: 'Error: Concept should be a concise term or phrase (max 100 characters). Examples: "mixins", "registry", "sided logic".',
29
+ },
30
+ ],
31
+ isError: true,
32
+ };
33
+ }
34
+ try {
35
+ const service = getConceptService();
36
+ const explanation = await service.explainConcept(trimmedConcept);
37
+ const formattedOutput = service.formatForAI(explanation);
38
+ let suggestions = '';
39
+ if (explanation.metadata.sourcesUsed < 2) {
40
+ suggestions = '\n\n**Note:** Limited information found for this concept. ';
41
+ suggestions += 'Try:\n';
42
+ suggestions += '- Using a more common term (e.g., "mixin" instead of "bytecode injection")\n';
43
+ suggestions += '- Checking spelling\n';
44
+ suggestions += '- Using `search_fabric_docs` for broader search\n';
45
+ }
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text',
50
+ text: formattedOutput + suggestions,
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ catch (error) {
56
+ const errorMessage = error instanceof Error ? error.message : String(error);
57
+ console.error(`[explainConcept] Error: ${errorMessage}`);
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text: `Error explaining concept: ${errorMessage}\n\nPlease ensure the documentation database has been indexed. Run 'npm run index-docs' to build the database.`,
63
+ },
64
+ ],
65
+ isError: true,
66
+ };
67
+ }
68
+ }
69
+ export function getSuggestedConcepts() {
70
+ return [
71
+ 'mixin',
72
+ 'registry',
73
+ 'entrypoint',
74
+ 'fabric.mod.json',
75
+ 'sided logic',
76
+ 'networking',
77
+ 'blockentity',
78
+ 'item',
79
+ 'block',
80
+ 'event',
81
+ 'recipe',
82
+ 'datagen',
83
+ 'render',
84
+ 'screen',
85
+ 'command',
86
+ 'tag',
87
+ 'loot',
88
+ 'sound',
89
+ 'keybind',
90
+ 'entity',
91
+ ];
92
+ }
93
+ //# sourceMappingURL=explainConcept.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainConcept.js","sourceRoot":"","sources":["../../src/tools/explainConcept.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAA2B,MAAM,gCAAgC,CAAC;AAOzF,IAAI,sBAAsB,GAA0B,IAAI,CAAC;AAEzD,SAAS,iBAAiB;IACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,sBAAsB,GAAG,IAAI,cAAc,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAA4B;IACrE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAG3B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2DAA2D;iBAClE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAGtC,IAAI,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,wHAAwH;iBAC/H;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QAGpC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAGjE,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAGzD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACzC,WAAW,GAAG,4DAA4D,CAAC;YAC3E,WAAW,IAAI,QAAQ,CAAC;YACxB,WAAW,IAAI,8EAA8E,CAAC;YAC9F,WAAW,IAAI,uBAAuB,CAAC;YACvC,WAAW,IAAI,mDAAmD,CAAC;QACrE,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,eAAe,GAAG,WAAW;iBACpC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;QAEzD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6BAA6B,YAAY,gHAAgH;iBAChK;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,OAAO;QACP,UAAU;QACV,YAAY;QACZ,iBAAiB;QACjB,aAAa;QACb,YAAY;QACZ,aAAa;QACb,MAAM;QACN,OAAO;QACP,OAAO;QACP,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,KAAK;QACL,MAAM;QACN,OAAO;QACP,SAAS;QACT,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ export interface GetExampleParams {
3
+ topic: string;
4
+ language?: string;
5
+ loader?: string;
6
+ minecraftVersion?: string;
7
+ category?: string;
8
+ limit?: number;
9
+ }
10
+ export declare function handleGetExample(params: GetExampleParams): CallToolResult;
11
+ export declare function getAvailableTopics(): {
12
+ categories: string[];
13
+ languages: Array<{
14
+ language: string;
15
+ count: number;
16
+ }>;
17
+ loaders: string[];
18
+ versions: string[];
19
+ };
20
+ //# sourceMappingURL=getExample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getExample.d.ts","sourceRoot":"","sources":["../../src/tools/getExample.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAuGzE;AAKD,wBAAgB,kBAAkB,IAAI;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAKA"}
@@ -0,0 +1,88 @@
1
+ import { ExampleService } from '../services/example-service.js';
2
+ export function handleGetExample(params) {
3
+ try {
4
+ const { topic, language = 'java', loader, minecraftVersion, category, limit = 5 } = params;
5
+ if (!topic || !topic.trim()) {
6
+ return {
7
+ content: [
8
+ {
9
+ type: 'text',
10
+ text: 'Error: Topic parameter is required. Please specify what you want examples for (e.g., "register item", "block entity", "networking").',
11
+ },
12
+ ],
13
+ isError: true,
14
+ };
15
+ }
16
+ const exampleService = new ExampleService();
17
+ if (params.minecraftVersion === 'latest') {
18
+ params.minecraftVersion = exampleService.getLatestMinecraftVersion();
19
+ }
20
+ const finalLimit = Math.min(Math.max(limit, 1), 10);
21
+ console.error(`[get_example] Searching for: "${topic}" (${language}, limit: ${finalLimit})`);
22
+ const examples = exampleService.getExamples({
23
+ topic,
24
+ language,
25
+ loader,
26
+ minecraftVersion,
27
+ category,
28
+ limit: finalLimit,
29
+ });
30
+ if (examples.length === 0) {
31
+ exampleService.close();
32
+ let message = `No code examples found for "${topic}"`;
33
+ if (language !== 'java') {
34
+ message += ` in ${language}`;
35
+ }
36
+ if (loader) {
37
+ message += ` for ${loader}`;
38
+ }
39
+ if (minecraftVersion) {
40
+ message += ` (version ${minecraftVersion})`;
41
+ }
42
+ message += '.\n\n**Suggestions:**\n';
43
+ message +=
44
+ '- Try using more general search terms (e.g., "item" instead of "custom item registration")\n';
45
+ message += '- Remove version or loader filters\n';
46
+ message += '- Check if the topic is covered in the Fabric documentation\n';
47
+ message += '- Try searching with the `search_fabric_docs` tool first\n';
48
+ console.error(`[get_example] No results found for "${topic}"`);
49
+ return {
50
+ content: [
51
+ {
52
+ type: 'text',
53
+ text: message,
54
+ },
55
+ ],
56
+ };
57
+ }
58
+ const formattedOutput = exampleService.formatForAI(examples);
59
+ exampleService.close();
60
+ console.error(`[get_example] Returning ${examples.length} example(s) for "${topic}"`);
61
+ return {
62
+ content: [
63
+ {
64
+ type: 'text',
65
+ text: formattedOutput,
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ catch (error) {
71
+ console.error('[get_example] Error:', error);
72
+ return {
73
+ content: [
74
+ {
75
+ type: 'text',
76
+ text: `Error retrieving examples: ${error instanceof Error ? error.message : 'Unknown error'}\n\nThe documentation database may not be initialized. Please ensure the indexer has been run with \`npm run index-docs\`.`,
77
+ },
78
+ ],
79
+ };
80
+ }
81
+ }
82
+ export function getAvailableTopics() {
83
+ const exampleService = new ExampleService();
84
+ const topics = exampleService.getAvailableTopics();
85
+ exampleService.close();
86
+ return topics;
87
+ }
88
+ //# sourceMappingURL=getExample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getExample.js","sourceRoot":"","sources":["../../src/tools/getExample.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ export interface GetMinecraftVersionParams {
3
+ type?: 'latest' | 'all';
4
+ }
5
+ export declare function handleGetMinecraftVersion(params: GetMinecraftVersionParams): CallToolResult;
6
+ //# sourceMappingURL=getMinecraftVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMinecraftVersion.d.ts","sourceRoot":"","sources":["../../src/tools/getMinecraftVersion.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;CACzB;AAMD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,cAAc,CA+D3F"}
@@ -0,0 +1,57 @@
1
+ import { ExampleService } from '../services/example-service.js';
2
+ export function handleGetMinecraftVersion(params) {
3
+ try {
4
+ const exampleService = new ExampleService();
5
+ const { type = 'latest' } = params;
6
+ if (type === 'all') {
7
+ const topics = exampleService.getAvailableTopics();
8
+ exampleService.close();
9
+ if (topics.versions.length === 0) {
10
+ return {
11
+ content: [
12
+ {
13
+ type: 'text',
14
+ text: 'No Minecraft versions found in the indexed documentation. Please run the indexer first.',
15
+ },
16
+ ],
17
+ };
18
+ }
19
+ let output = `## Available Minecraft Versions\n\n`;
20
+ output += `Found ${topics.versions.length} version(s) in the documentation:\n\n`;
21
+ for (const version of topics.versions) {
22
+ output += `- ${version}\n`;
23
+ }
24
+ output += `\n**Latest:** ${topics.versions[0] || 'unknown'}\n`;
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text',
29
+ text: output,
30
+ },
31
+ ],
32
+ };
33
+ }
34
+ const latestVersion = exampleService.getLatestMinecraftVersion();
35
+ exampleService.close();
36
+ return {
37
+ content: [
38
+ {
39
+ type: 'text',
40
+ text: `The latest Minecraft version in the documentation is: **${latestVersion}**`,
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ catch (error) {
46
+ console.error('[get_minecraft_version] Error:', error);
47
+ return {
48
+ content: [
49
+ {
50
+ type: 'text',
51
+ text: `Error retrieving Minecraft version: ${error instanceof Error ? error.message : 'Unknown error'}\n\nThe documentation database may not be initialized.`,
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ }
57
+ //# sourceMappingURL=getMinecraftVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMinecraftVersion.js","sourceRoot":"","sources":["../../src/tools/getMinecraftVersion.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAWhE,MAAM,UAAU,yBAAyB,CAAC,MAAiC;IACzE,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC5C,MAAM,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;QAEnC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,cAAc,CAAC,kBAAkB,EAAE,CAAC;YACnD,cAAc,CAAC,KAAK,EAAE,CAAC;YAEvB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,yFAAyF;yBAChG;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,GAAG,qCAAqC,CAAC;YACnD,MAAM,IAAI,SAAS,MAAM,CAAC,QAAQ,CAAC,MAAM,uCAAuC,CAAC;YAEjF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,OAAO,IAAI,CAAC;YAC7B,CAAC;YAED,MAAM,IAAI,iBAAiB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC;YAE/D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM;qBACb;iBACF;aACF,CAAC;QACJ,CAAC;QAGD,MAAM,aAAa,GAAG,cAAc,CAAC,yBAAyB,EAAE,CAAC;QACjE,cAAc,CAAC,KAAK,EAAE,CAAC;QAEvB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2DAA2D,aAAa,IAAI;iBACnF;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QAEvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,wDAAwD;iBAC9J;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { SearchResult } from '../services/search-service.js';
3
+ export interface SearchDocsParams {
4
+ query: string;
5
+ category?: string;
6
+ loader?: string;
7
+ minecraftVersion?: string;
8
+ includeCode?: boolean;
9
+ limit?: number;
10
+ }
11
+ export declare function handleSearchDocs(params: SearchDocsParams): Promise<CallToolResult>;
12
+ export declare function searchDocs(params: SearchDocsParams): Promise<SearchResult[]>;
13
+ export declare function getAvailableCategories(): string[];
14
+ export declare function getAvailableLoaders(): string[];
15
+ //# sourceMappingURL=searchDocs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchDocs.d.ts","sourceRoot":"","sources":["../../src/tools/searchDocs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,+BAA+B,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAqBD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CA6FxF;AAqDD,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAQlF;AAKD,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAcjD;AAKD,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}