mne-docs-mcp 1.0.48 → 1.0.49

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 (107) hide show
  1. package/dist/archive/manager.d.ts +7 -0
  2. package/dist/archive/manager.d.ts.map +1 -1
  3. package/dist/archive/manager.js +46 -1
  4. package/dist/archive/manager.js.map +1 -1
  5. package/dist/archive/search.d.ts +5 -0
  6. package/dist/archive/search.d.ts.map +1 -1
  7. package/dist/archive/search.js +15 -0
  8. package/dist/archive/search.js.map +1 -1
  9. package/dist/config.d.ts +1 -1
  10. package/dist/config.js +1 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/forum/client.d.ts +32 -1
  13. package/dist/forum/client.d.ts.map +1 -1
  14. package/dist/forum/client.js +136 -5
  15. package/dist/forum/client.js.map +1 -1
  16. package/dist/github/client.d.ts +3 -1
  17. package/dist/github/client.d.ts.map +1 -1
  18. package/dist/github/client.js +44 -9
  19. package/dist/github/client.js.map +1 -1
  20. package/dist/github/types.d.ts +6 -0
  21. package/dist/github/types.d.ts.map +1 -1
  22. package/dist/repoContent/index.d.ts +2 -0
  23. package/dist/repoContent/index.d.ts.map +1 -1
  24. package/dist/repoContent/index.js +11 -6
  25. package/dist/repoContent/index.js.map +1 -1
  26. package/dist/searchCorpus/index.d.ts +3 -0
  27. package/dist/searchCorpus/index.d.ts.map +1 -1
  28. package/dist/searchCorpus/index.js +20 -11
  29. package/dist/searchCorpus/index.js.map +1 -1
  30. package/dist/symbolLookup/index.js +3 -3
  31. package/dist/symbolLookup/index.js.map +1 -1
  32. package/dist/tools/defineTool.d.ts +18 -0
  33. package/dist/tools/defineTool.d.ts.map +1 -0
  34. package/dist/tools/defineTool.js +8 -0
  35. package/dist/tools/defineTool.js.map +1 -0
  36. package/dist/tools/findMneSymbol.d.ts +6 -10
  37. package/dist/tools/findMneSymbol.d.ts.map +1 -1
  38. package/dist/tools/findMneSymbol.js +10 -15
  39. package/dist/tools/findMneSymbol.js.map +1 -1
  40. package/dist/tools/getMneChangelog.d.ts +6 -10
  41. package/dist/tools/getMneChangelog.d.ts.map +1 -1
  42. package/dist/tools/getMneChangelog.js +9 -12
  43. package/dist/tools/getMneChangelog.js.map +1 -1
  44. package/dist/tools/getMneDoc.d.ts +6 -10
  45. package/dist/tools/getMneDoc.d.ts.map +1 -1
  46. package/dist/tools/getMneDoc.js +21 -27
  47. package/dist/tools/getMneDoc.js.map +1 -1
  48. package/dist/tools/getMneExample.d.ts +12 -12
  49. package/dist/tools/getMneExample.d.ts.map +1 -1
  50. package/dist/tools/getMneExample.js +32 -18
  51. package/dist/tools/getMneExample.js.map +1 -1
  52. package/dist/tools/getMneFile.d.ts +7 -11
  53. package/dist/tools/getMneFile.d.ts.map +1 -1
  54. package/dist/tools/getMneFile.js +131 -40
  55. package/dist/tools/getMneFile.js.map +1 -1
  56. package/dist/tools/getMneForumTopic.d.ts +8 -37
  57. package/dist/tools/getMneForumTopic.d.ts.map +1 -1
  58. package/dist/tools/getMneForumTopic.js +8 -122
  59. package/dist/tools/getMneForumTopic.js.map +1 -1
  60. package/dist/tools/getMneIssue.d.ts +8 -10
  61. package/dist/tools/getMneIssue.d.ts.map +1 -1
  62. package/dist/tools/getMneIssue.js +16 -10
  63. package/dist/tools/getMneIssue.js.map +1 -1
  64. package/dist/tools/getMneIssueComments.d.ts +10 -10
  65. package/dist/tools/getMneIssueComments.d.ts.map +1 -1
  66. package/dist/tools/getMneIssueComments.js +30 -13
  67. package/dist/tools/getMneIssueComments.js.map +1 -1
  68. package/dist/tools/getRelatedSymbols.d.ts +7 -11
  69. package/dist/tools/getRelatedSymbols.d.ts.map +1 -1
  70. package/dist/tools/getRelatedSymbols.js +44 -18
  71. package/dist/tools/getRelatedSymbols.js.map +1 -1
  72. package/dist/tools/getSymbolReferences.d.ts +7 -10
  73. package/dist/tools/getSymbolReferences.d.ts.map +1 -1
  74. package/dist/tools/getSymbolReferences.js +28 -16
  75. package/dist/tools/getSymbolReferences.js.map +1 -1
  76. package/dist/tools/listMneVersions.d.ts +6 -63
  77. package/dist/tools/listMneVersions.d.ts.map +1 -1
  78. package/dist/tools/listMneVersions.js +13 -15
  79. package/dist/tools/listMneVersions.js.map +1 -1
  80. package/dist/tools/lookupMneError.d.ts +14 -10
  81. package/dist/tools/lookupMneError.d.ts.map +1 -1
  82. package/dist/tools/lookupMneError.js +69 -14
  83. package/dist/tools/lookupMneError.js.map +1 -1
  84. package/dist/tools/requestBudget.d.ts +12 -0
  85. package/dist/tools/requestBudget.d.ts.map +1 -0
  86. package/dist/tools/requestBudget.js +36 -0
  87. package/dist/tools/requestBudget.js.map +1 -0
  88. package/dist/tools/searchMneDocs.d.ts +5 -9
  89. package/dist/tools/searchMneDocs.d.ts.map +1 -1
  90. package/dist/tools/searchMneDocs.js +162 -22
  91. package/dist/tools/searchMneDocs.js.map +1 -1
  92. package/dist/tools/searchMneForum.d.ts +9 -10
  93. package/dist/tools/searchMneForum.d.ts.map +1 -1
  94. package/dist/tools/searchMneForum.js +21 -12
  95. package/dist/tools/searchMneForum.js.map +1 -1
  96. package/dist/tools/searchMneIssues.d.ts +10 -11
  97. package/dist/tools/searchMneIssues.d.ts.map +1 -1
  98. package/dist/tools/searchMneIssues.js +28 -24
  99. package/dist/tools/searchMneIssues.js.map +1 -1
  100. package/dist/types.d.ts +51 -0
  101. package/dist/types.d.ts.map +1 -1
  102. package/dist/utils/searchRanking.d.ts +18 -0
  103. package/dist/utils/searchRanking.d.ts.map +1 -0
  104. package/dist/utils/searchRanking.js +63 -0
  105. package/dist/utils/searchRanking.js.map +1 -0
  106. package/package.json +1 -1
  107. package/python/ast_extractor.py +3 -0
@@ -1,9 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  import { McpError } from '../types.js';
3
3
  import { getLogger } from '../utils/logger.js';
4
- import { MNE_PACKAGE_NAMES, packageSchema } from '../config.js';
4
+ import { packageSchema } from '../config.js';
5
5
  import { READ_ONLY_TOOL_ANNOTATIONS } from './annotations.js';
6
6
  import { stripRst } from '../utils/docstring.js';
7
+ import { rankSearchMatch } from '../utils/searchRanking.js';
8
+ import { buildGithubRequestBudget } from './requestBudget.js';
9
+ import { defineTool } from './defineTool.js';
7
10
  const logger = getLogger();
8
11
  function getNoExamplesSuggestion(pkg) {
9
12
  if (pkg === 'mne-python') {
@@ -37,27 +40,20 @@ function getFallbackExamplePaths(query, pkg) {
37
40
  return Array.from(new Set(paths));
38
41
  }
39
42
  const GetMneExampleParamsSchema = z.object({
40
- query: z.string().trim().min(1, 'Query is required'),
41
- maxResults: z.number().int().min(1).max(20).optional().default(5),
42
- version: z.string().optional(),
43
- summaryOnly: z.boolean().optional().default(false),
44
- maxCodeLines: z.number().int().min(1).max(1000).optional().default(100),
45
- package: z.enum(MNE_PACKAGE_NAMES).optional(),
43
+ query: z.string().trim().min(1, 'Query is required').describe('Topic to search, e.g. "epochs", "ICA", "evoked", "source estimation"'),
44
+ maxResults: z.number().int().min(1).max(20).optional().default(5).describe('Max examples to return (default: 5)'),
45
+ version: z.string().optional().describe('Version tag (default: latest)'),
46
+ summaryOnly: z.boolean().optional().default(false).describe('Return only titles and descriptions, no code (default: false)'),
47
+ maxCodeLines: z.number().int().min(1).max(1000).optional().default(100).describe('Truncate code to N lines (default: 100)'),
48
+ package: packageSchema,
46
49
  });
47
- export const definition = {
50
+ export const definition = defineTool({
48
51
  name: 'get_mne_example',
49
52
  title: 'Get MNE Example',
50
53
  description: 'Get tutorial and example code from the MNE gallery. Use when users want to see working code for a specific task like "ICA", "source localization", or "time-frequency analysis".',
51
- inputSchema: {
52
- query: z.string().describe('Topic to search, e.g. "epochs", "ICA", "evoked", "source estimation"'),
53
- maxResults: z.number().optional().describe('Max examples to return (default: 5)'),
54
- version: z.string().optional().describe('Version tag (default: latest)'),
55
- summaryOnly: z.boolean().optional().describe('Return only titles and descriptions, no code (default: false)'),
56
- maxCodeLines: z.number().optional().describe('Truncate code to N lines (default: 100)'),
57
- package: packageSchema,
58
- },
54
+ paramsSchema: GetMneExampleParamsSchema,
59
55
  annotations: READ_ONLY_TOOL_ANNOTATIONS,
60
- };
56
+ });
61
57
  /**
62
58
  * Fetches complete example/tutorial scripts from the MNE gallery.
63
59
  * Returns full Python code with explanations.
@@ -116,6 +112,14 @@ export async function getMneExample(params, context) {
116
112
  const totalLines = lines.length;
117
113
  const sourceUrl = context.repoContent.sourceUrl(target, item.path);
118
114
  const docsUrl = buildExampleDocsUrl(item.path, packageInfo.docsUrl);
115
+ const ranking = rankSearchMatch({
116
+ query,
117
+ kind: 'example',
118
+ title: metadata.title || formatTitle(item.name),
119
+ path: item.path,
120
+ snippet: `${item.snippet || ''}\n${metadata.description || ''}`,
121
+ tags: metadata.tags,
122
+ });
119
123
  if (summaryOnly) {
120
124
  return {
121
125
  title: metadata.title || formatTitle(item.name),
@@ -128,6 +132,9 @@ export async function getMneExample(params, context) {
128
132
  totalLines,
129
133
  estimatedRunTime: metadata.runTime,
130
134
  tags: metadata.tags,
135
+ score: ranking.score,
136
+ matchedTerms: ranking.matchedTerms,
137
+ matchReason: ranking.matchReason,
131
138
  };
132
139
  }
133
140
  const truncated = totalLines > maxCodeLines;
@@ -144,6 +151,9 @@ export async function getMneExample(params, context) {
144
151
  totalLines,
145
152
  estimatedRunTime: metadata.runTime,
146
153
  tags: metadata.tags,
154
+ score: ranking.score,
155
+ matchedTerms: ranking.matchedTerms,
156
+ matchReason: ranking.matchReason,
147
157
  };
148
158
  }
149
159
  catch (error) {
@@ -151,7 +161,10 @@ export async function getMneExample(params, context) {
151
161
  return null;
152
162
  }
153
163
  }));
154
- const examples = parsedExamples.filter((e) => e !== null).slice(0, maxResults);
164
+ const examples = parsedExamples
165
+ .filter((e) => e !== null)
166
+ .sort((a, b) => (b.score || 0) - (a.score || 0) || a.filePath.localeCompare(b.filePath))
167
+ .slice(0, maxResults);
155
168
  if (examples.length === 0) {
156
169
  throw new McpError('NO_EXAMPLES_FOUND', `Could not fetch any examples for: ${query}`, {
157
170
  details: `Package: ${pkg}`,
@@ -163,6 +176,7 @@ export async function getMneExample(params, context) {
163
176
  version: resolvedVersion,
164
177
  package: pkg,
165
178
  examples,
179
+ requestBudget: buildGithubRequestBudget(context.github, ['code', 'core']),
166
180
  };
167
181
  }
168
182
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"getMneExample.js","sourceRoot":"","sources":["../../src/tools/getMneExample.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getMneExample.js","sourceRoot":"","sources":["../../src/tools/getMneExample.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { ToolContext } from '../types.js';
2
+ import { GetMneFileResult, ToolContext } from '../types.js';
3
3
  export declare const definition: {
4
- name: string;
5
- title: string;
6
- description: string;
7
4
  inputSchema: {
8
5
  path: z.ZodString;
9
6
  version: z.ZodOptional<z.ZodString>;
@@ -12,13 +9,12 @@ export declare const definition: {
12
9
  endLine: z.ZodOptional<z.ZodNumber>;
13
10
  package: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
14
11
  };
15
- annotations: {
16
- readonly readOnlyHint: true;
17
- readonly destructiveHint: false;
18
- readonly idempotentHint: true;
19
- readonly openWorldHint: true;
20
- };
12
+ name: string;
13
+ title: string;
14
+ description: string;
15
+ annotations?: object;
16
+ outputSchema?: z.ZodTypeAny;
21
17
  };
22
- export declare function getMneFile(params: unknown, context: ToolContext): Promise<string>;
18
+ export declare function getMneFile(params: unknown, context: ToolContext): Promise<GetMneFileResult>;
23
19
  export { getMneFile as handler };
24
20
  //# sourceMappingURL=getMneFile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMneFile.d.ts","sourceRoot":"","sources":["../../src/tools/getMneFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AAapD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;CAatB,CAAC;AAEF,wBAAsB,UAAU,CAC5B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAmCD,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"getMneFile.d.ts","sourceRoot":"","sources":["../../src/tools/getMneFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AAoBtE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CAMrB,CAAC;AAEH,wBAAsB,UAAU,CAC5B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAmE3B;AAyHD,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,CAAC"}
@@ -1,62 +1,87 @@
1
1
  import { z } from 'zod';
2
2
  import { McpError } from '../types.js';
3
- import { MNE_PACKAGE_NAMES, packageSchema } from '../config.js';
3
+ import { packageSchema } from '../config.js';
4
4
  import { READ_ONLY_TOOL_ANNOTATIONS } from './annotations.js';
5
- const GetMneFileParamsSchema = z.object({
6
- path: z.string().trim().min(1, 'Path is required'),
7
- version: z.string().optional(),
8
- maxLines: z.number().int().positive().optional(),
9
- startLine: z.number().int().positive().optional(),
10
- endLine: z.number().int().positive().optional(),
11
- package: z.enum(MNE_PACKAGE_NAMES).optional(),
5
+ import { getCachedArchive, findFilesInArchive } from '../archive/search.js';
6
+ import { buildGithubRequestBudget } from './requestBudget.js';
7
+ import { defineTool } from './defineTool.js';
8
+ const GetMneFileParamsBaseSchema = z.object({
9
+ path: z.string().trim().min(1, 'Path is required').describe('File path in repo, e.g. "mne/epochs.py" or "mne_bids/write.py"'),
10
+ version: z.string().optional().describe('Version tag, e.g. "1.6.0" (default: latest)'),
11
+ maxLines: z.number().int().positive().optional().describe('Truncate output to N lines'),
12
+ startLine: z.number().int().positive().optional().describe('Start from this line number'),
13
+ endLine: z.number().int().positive().optional().describe('End at this line number'),
14
+ package: packageSchema,
12
15
  });
13
- export const definition = {
16
+ const GetMneFileParamsSchema = GetMneFileParamsBaseSchema.refine(params => params.startLine === undefined || params.endLine === undefined || params.startLine <= params.endLine, { path: ['endLine'], message: 'endLine must be greater than or equal to startLine' });
17
+ export const definition = defineTool({
14
18
  name: 'get_mne_file',
15
19
  title: 'Get MNE File',
16
20
  description: 'Fetch raw source code from MNE-Python or related package repositories. Use when you need to see the actual implementation of a function or class.',
17
- inputSchema: {
18
- path: z.string().describe('File path in repo, e.g. "mne/epochs.py" or "mne_bids/write.py"'),
19
- version: z.string().optional().describe('Version tag, e.g. "1.6.0" (default: latest)'),
20
- maxLines: z.number().int().positive().optional().describe('Truncate output to N lines'),
21
- startLine: z.number().int().positive().optional().describe('Start from this line number'),
22
- endLine: z.number().int().positive().optional().describe('End at this line number'),
23
- package: packageSchema,
24
- },
21
+ paramsSchema: GetMneFileParamsBaseSchema,
25
22
  annotations: READ_ONLY_TOOL_ANNOTATIONS,
26
- };
23
+ });
27
24
  export async function getMneFile(params, context) {
28
25
  const { path, version, maxLines, startLine, endLine, package: packageName } = GetMneFileParamsSchema.parse(params);
26
+ const normalizedPath = normalizeRepoPath(path);
27
+ if (!normalizedPath) {
28
+ throw new McpError('FILE_NOT_FOUND', 'File path is empty after normalization', {
29
+ suggestion: 'Pass a repository-relative path such as "mne/epochs.py".',
30
+ });
31
+ }
29
32
  const target = await context.repoContent.resolveTarget({ version, packageName });
30
- const file = await context.repoContent.readFile({ path, target });
33
+ const file = await context.repoContent.readFile({ path: normalizedPath, target });
31
34
  if (file === null) {
32
35
  // Best-effort fallback: try to find close matches in the same repo
33
36
  // so that callers get concrete alternative paths instead of a bare
34
37
  // "FILE_NOT_FOUND" error.
35
38
  let suggestion = 'Check the file path and version. Use search_mne_docs to find available files.';
36
39
  let details = `Package: ${target.packageName}, Version: ${target.version}`;
37
- try {
38
- const fileName = path.split('/').pop() || path;
39
- const search = await context.github.searchCode(fileName, {
40
- packageName: target.packageName,
41
- perPage: 5,
42
- });
43
- if (search.total_count > 0 && search.items?.length) {
44
- const candidates = search.items.slice(0, 5).map(item => `- ${item.path}`);
45
- suggestion =
46
- 'File not found at the requested path. Here are the closest matching files in this repository.';
47
- details = `${details}\nClosest matches:\n${candidates.join('\n')}`;
48
- }
40
+ const archiveMatches = await findCloseArchivePathMatches(normalizedPath, target.version, target.packageName, context);
41
+ if (archiveMatches.length > 0) {
42
+ suggestion =
43
+ 'File not found at the requested path. Here are the closest matching files in this repository.';
44
+ details = `${details}\nClosest matches:\n${archiveMatches.map(match => `- ${match}`).join('\n')}`;
49
45
  }
50
- catch {
51
- // If the fallback search fails (e.g. rate-limit), fall through to the
52
- // original generic suggestion without overwriting it.
46
+ else {
47
+ try {
48
+ const fileName = normalizedPath.split('/').pop() || normalizedPath;
49
+ const search = await context.github.searchCode(fileName, {
50
+ packageName: target.packageName,
51
+ perPage: 5,
52
+ });
53
+ if (search.total_count > 0 && search.items?.length) {
54
+ const candidates = search.items.slice(0, 5).map(item => `- ${item.path}`);
55
+ suggestion =
56
+ 'File not found at the requested path. Here are the closest matching files in this repository.';
57
+ details = `${details}\nClosest matches:\n${candidates.join('\n')}`;
58
+ }
59
+ }
60
+ catch {
61
+ // If the fallback search fails (e.g. rate-limit), fall through to the
62
+ // original generic suggestion without overwriting it.
63
+ }
53
64
  }
54
- throw new McpError('FILE_NOT_FOUND', `File not found: ${path}`, {
65
+ throw new McpError('FILE_NOT_FOUND', `File not found: ${normalizedPath}`, {
55
66
  details,
56
67
  suggestion,
57
68
  });
58
69
  }
59
- return extractContent(file.content, { maxLines, startLine, endLine });
70
+ const extracted = extractContent(file.content, { maxLines, startLine, endLine });
71
+ const totalLines = file.content.split('\n').length;
72
+ return {
73
+ path: file.path,
74
+ version: file.version,
75
+ package: file.packageName,
76
+ sourceUrl: context.repoContent.sourceUrl(target, file.path, extracted.startLine, extracted.endLine),
77
+ content: extracted.content,
78
+ totalLines,
79
+ startLine: extracted.startLine,
80
+ endLine: extracted.endLine,
81
+ truncated: extracted.truncated,
82
+ fetchSource: file.readSource,
83
+ requestBudget: buildGithubRequestBudget(context.github, ['core', 'code']),
84
+ };
60
85
  }
61
86
  function extractContent(content, options) {
62
87
  const { maxLines, startLine, endLine } = options;
@@ -74,12 +99,78 @@ function extractContent(content, options) {
74
99
  if (end < totalLines) {
75
100
  result += `\n... (ended at line ${end}, total ${totalLines} lines)`;
76
101
  }
77
- return result;
102
+ return {
103
+ content: result,
104
+ startLine: start + 1,
105
+ endLine: end,
106
+ truncated: start > 0 || end < totalLines,
107
+ };
78
108
  }
79
109
  // Otherwise use maxLines truncation
80
- if (!maxLines || lines.length <= maxLines)
81
- return content;
82
- return lines.slice(0, maxLines).join('\n') + `\n... (truncated after ${maxLines} lines, total ${totalLines} lines)`;
110
+ if (!maxLines || lines.length <= maxLines) {
111
+ return {
112
+ content,
113
+ startLine: 1,
114
+ endLine: totalLines,
115
+ truncated: false,
116
+ };
117
+ }
118
+ return {
119
+ content: lines.slice(0, maxLines).join('\n') + `\n... (truncated after ${maxLines} lines, total ${totalLines} lines)`,
120
+ startLine: 1,
121
+ endLine: maxLines,
122
+ truncated: true,
123
+ };
124
+ }
125
+ function normalizeRepoPath(path) {
126
+ return path.replace(/\\/g, '/').replace(/^\/+/, '').replace(/\/{2,}/g, '/');
127
+ }
128
+ async function findCloseArchivePathMatches(requestedPath, version, packageName, context) {
129
+ const archive = await getCachedArchive(context.github, context.archive, version, packageName);
130
+ if (!archive)
131
+ return [];
132
+ const extension = requestedPath.includes('.')
133
+ ? `.${requestedPath.split('.').pop() || ''}`.replace(/\.\./g, '.')
134
+ : undefined;
135
+ const sourcePrefix = requestedPath.includes('/')
136
+ ? requestedPath.split('/').slice(0, -1).join('/')
137
+ : undefined;
138
+ const candidates = findFilesInArchive(archive, {
139
+ extension,
140
+ pathPrefix: sourcePrefix,
141
+ maxResults: 500,
142
+ });
143
+ const ranked = candidates
144
+ .map(candidate => ({
145
+ path: candidate,
146
+ distance: levenshtein(requestedPath.toLowerCase(), candidate.toLowerCase()),
147
+ }))
148
+ .filter(candidate => candidate.distance <= Math.max(3, Math.floor(requestedPath.length * 0.2)))
149
+ .sort((a, b) => a.distance - b.distance || a.path.localeCompare(b.path))
150
+ .slice(0, 5)
151
+ .map(candidate => candidate.path);
152
+ return ranked;
153
+ }
154
+ function levenshtein(a, b) {
155
+ if (a === b)
156
+ return 0;
157
+ if (a.length === 0)
158
+ return b.length;
159
+ if (b.length === 0)
160
+ return a.length;
161
+ const prev = Array.from({ length: b.length + 1 }, (_, i) => i);
162
+ const next = new Array(b.length + 1);
163
+ for (let i = 0; i < a.length; i++) {
164
+ next[0] = i + 1;
165
+ for (let j = 0; j < b.length; j++) {
166
+ const cost = a[i] === b[j] ? 0 : 1;
167
+ next[j + 1] = Math.min(next[j] + 1, prev[j + 1] + 1, prev[j] + cost);
168
+ }
169
+ for (let j = 0; j < next.length; j++) {
170
+ prev[j] = next[j];
171
+ }
172
+ }
173
+ return prev[b.length];
83
174
  }
84
175
  export { getMneFile as handler };
85
176
  //# sourceMappingURL=getMneFile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMneFile.js","sourceRoot":"","sources":["../../src/tools/getMneFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC/C,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,iBAA0C,CAAC,CAAC,QAAQ,EAAE;CACzE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,mJAAmJ;IAChK,WAAW,EAAE;QACT,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;QAC3F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACtF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACzF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACnF,OAAO,EAAE,aAAa;KACzB;IACD,WAAW,EAAE,0BAA0B;CAC1C,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,MAAe,EACf,OAAoB;IAEpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEnH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAElE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,mEAAmE;QACnE,mEAAmE;QACnE,0BAA0B;QAC1B,IAAI,UAAU,GACV,+EAA+E,CAAC;QACpF,IAAI,OAAO,GAAG,YAAY,MAAM,CAAC,WAAW,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC;QAE3E,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE;gBACrD,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,CAAC;aACb,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;gBACjD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1E,UAAU;oBACN,+FAA+F,CAAC;gBACpG,OAAO,GAAG,GAAG,OAAO,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,sEAAsE;YACtE,sDAAsD;QAC1D,CAAC;QAED,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,IAAI,EAAE,EAAE;YAC5D,OAAO;YACP,UAAU;SACb,CAAC,CAAC;IACP,CAAC;IAED,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1E,CAAC;AAQD,SAAS,cAAc,CAAC,OAAe,EAAE,OAAuB;IAC5D,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAEhC,8CAA8C;IAC9C,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;QACtE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACjE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE1C,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,GAAG,2BAA2B,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;QAChE,CAAC;QACD,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,wBAAwB,GAAG,WAAW,UAAU,SAAS,CAAC;QACxE,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC;IAE1D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,0BAA0B,QAAQ,iBAAiB,UAAU,SAAS,CAAC;AACxH,CAAC;AAED,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"getMneFile.js","sourceRoot":"","sources":["../../src/tools/getMneFile.ts"],"names":[],"mappings":"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"}
@@ -1,47 +1,18 @@
1
1
  import { z } from 'zod';
2
2
  import { ToolContext } from '../types.js';
3
+ import { ForumTopicResult } from '../forum/client.js';
3
4
  export declare const definition: {
4
- name: string;
5
- title: string;
6
- description: string;
7
5
  inputSchema: {
8
6
  topicId: z.ZodNumber;
9
- maxPosts: z.ZodOptional<z.ZodNumber>;
10
- maxContentLength: z.ZodOptional<z.ZodNumber>;
7
+ maxPosts: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
8
+ maxContentLength: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
11
9
  };
12
- annotations: {
13
- readonly readOnlyHint: true;
14
- readonly destructiveHint: false;
15
- readonly idempotentHint: true;
16
- readonly openWorldHint: true;
17
- };
18
- };
19
- /**
20
- * A single post within a forum topic.
21
- */
22
- export interface ForumPost {
23
- postNumber: number;
24
- author: string;
25
- content: string;
26
- contentTruncated: boolean;
27
- createdAt: string;
28
- isAcceptedAnswer: boolean;
29
- likeCount: number;
30
- }
31
- /**
32
- * Full forum topic with all posts.
33
- */
34
- export interface ForumTopicResult {
35
- id: number;
10
+ name: string;
36
11
  title: string;
37
- url: string;
38
- category: string;
39
- tags: string[];
40
- viewCount: number;
41
- likeCount: number;
42
- posts: ForumPost[];
43
- totalPosts: number;
44
- }
12
+ description: string;
13
+ annotations?: object;
14
+ outputSchema?: z.ZodTypeAny;
15
+ };
45
16
  /**
46
17
  * Fetches a full forum topic with all posts from the MNE Discourse forum.
47
18
  * Use this after search_mne_forum to get complete discussion content.
@@ -1 +1 @@
1
- {"version":3,"file":"getMneForumTopic.d.ts","sourceRoot":"","sources":["../../src/tools/getMneForumTopic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AAapD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;CAUtB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AA8BD;;;GAGG;AACH,wBAAsB,gBAAgB,CAClC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAiE3B;AAyDD,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"getMneForumTopic.d.ts","sourceRoot":"","sources":["../../src/tools/getMneForumTopic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAUtD,eAAO,MAAM,UAAU;;;;;;;;;;;CAMrB,CAAC;AAEH;;;GAGG;AACH,wBAAsB,gBAAgB,CAClC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,CAAC"}
@@ -1,139 +1,25 @@
1
1
  import { z } from 'zod';
2
- import { McpError } from '../types.js';
3
- import { getLogger } from '../utils/logger.js';
4
2
  import { READ_ONLY_TOOL_ANNOTATIONS } from './annotations.js';
5
- import { decodeHtmlEntities } from '../utils/html.js';
6
- const logger = getLogger();
3
+ import { defineTool } from './defineTool.js';
7
4
  const GetMneForumTopicParamsSchema = z.object({
8
- topicId: z.number().int().positive('Topic ID must be a positive integer'),
9
- maxPosts: z.number().int().min(1).max(100).optional().default(20),
10
- maxContentLength: z.number().int().min(100).max(10000).optional().default(2000),
5
+ topicId: z.number().int().positive('Topic ID must be a positive integer').describe('Forum topic ID (from search_mne_forum results URL)'),
6
+ maxPosts: z.number().int().min(1).max(100).optional().default(20).describe('Max posts to return (default: 20)'),
7
+ maxContentLength: z.number().int().min(100).max(10000).optional().default(2000).describe('Truncate each post to N chars (default: 2000)'),
11
8
  });
12
- export const definition = {
9
+ export const definition = defineTool({
13
10
  name: 'get_mne_forum_topic',
14
11
  title: 'Get MNE Forum Topic',
15
12
  description: 'Get the full content of a forum discussion including all posts. Use after search_mne_forum to read complete answers and solutions.',
16
- inputSchema: {
17
- topicId: z.number().int().positive().describe('Forum topic ID (from search_mne_forum results URL)'),
18
- maxPosts: z.number().int().min(1).max(100).optional().describe('Max posts to return (default: 20)'),
19
- maxContentLength: z.number().int().min(100).max(10000).optional().describe('Truncate each post to N chars (default: 2000)'),
20
- },
13
+ paramsSchema: GetMneForumTopicParamsSchema,
21
14
  annotations: READ_ONLY_TOOL_ANNOTATIONS,
22
- };
15
+ });
23
16
  /**
24
17
  * Fetches a full forum topic with all posts from the MNE Discourse forum.
25
18
  * Use this after search_mne_forum to get complete discussion content.
26
19
  */
27
20
  export async function getMneForumTopic(params, context) {
28
21
  const { topicId, maxPosts, maxContentLength } = GetMneForumTopicParamsSchema.parse(params);
29
- const baseUrl = context.forum.baseUrl;
30
- const timeout = context.forum.timeout;
31
- const url = `${baseUrl}/t/${topicId}.json`;
32
- logger.debug(`Fetching forum topic: ${topicId}`);
33
- try {
34
- const response = await fetch(url, {
35
- headers: { 'Accept': 'application/json' },
36
- signal: AbortSignal.timeout(timeout || 15000),
37
- });
38
- if (!response.ok) {
39
- if (response.status === 404) {
40
- throw new McpError('FORUM_TOPIC_NOT_FOUND', `Forum topic not found: ${topicId}`, {
41
- suggestion: 'Check the topic ID from search_mne_forum results',
42
- });
43
- }
44
- throw new McpError('FORUM_API_ERROR', `Forum API error: ${response.status}`, {
45
- details: response.statusText,
46
- });
47
- }
48
- const data = await response.json();
49
- // Extract posts with content
50
- const posts = data.post_stream.posts
51
- .slice(0, maxPosts)
52
- .map((p) => {
53
- const fullContent = stripHtmlToMarkdown(p.cooked);
54
- const truncated = fullContent.length > maxContentLength;
55
- return {
56
- postNumber: p.post_number,
57
- author: p.username,
58
- content: truncated
59
- ? fullContent.slice(0, maxContentLength) + '...'
60
- : fullContent,
61
- contentTruncated: truncated,
62
- createdAt: p.created_at,
63
- isAcceptedAnswer: p.accepted_answer || false,
64
- likeCount: p.like_count || 0,
65
- };
66
- });
67
- return {
68
- id: data.id,
69
- title: decodeHtmlEntities(data.fancy_title || data.title),
70
- url: `${baseUrl}/t/${data.slug}/${data.id}`,
71
- category: getCategoryName(data.category_id),
72
- tags: data.tags || [],
73
- viewCount: data.views,
74
- likeCount: data.like_count,
75
- posts,
76
- totalPosts: data.posts_count,
77
- };
78
- }
79
- catch (error) {
80
- if (error instanceof McpError)
81
- throw error;
82
- logger.error('Forum topic fetch error', { error, topicId });
83
- throw new McpError('FORUM_API_ERROR', `Failed to fetch forum topic: ${topicId}`, {
84
- details: error instanceof Error ? error.message : String(error),
85
- });
86
- }
87
- }
88
- /**
89
- * Convert HTML content to readable markdown.
90
- */
91
- function stripHtmlToMarkdown(html) {
92
- const text = html
93
- // Code blocks
94
- .replace(/<pre><code[^>]*>([\s\S]*?)<\/code><\/pre>/g, '\n```\n$1\n```\n')
95
- // Inline code
96
- .replace(/<code>([^<]+)<\/code>/g, '`$1`')
97
- // Links
98
- .replace(/<a href="([^"]+)"[^>]*>([^<]+)<\/a>/g, '[$2]($1)')
99
- // Bold
100
- .replace(/<strong>([^<]+)<\/strong>/g, '**$1**')
101
- .replace(/<b>([^<]+)<\/b>/g, '**$1**')
102
- // Italic
103
- .replace(/<em>([^<]+)<\/em>/g, '*$1*')
104
- .replace(/<i>([^<]+)<\/i>/g, '*$1*')
105
- // Lists
106
- .replace(/<li>/g, '- ')
107
- .replace(/<\/li>/g, '\n')
108
- .replace(/<\/?[uo]l>/g, '\n')
109
- // Paragraphs and breaks
110
- .replace(/<\/p>/g, '\n\n')
111
- .replace(/<br\s*\/?>/g, '\n')
112
- // Blockquotes
113
- .replace(/<blockquote>([\s\S]*?)<\/blockquote>/g, (_, content) => content.split('\n').map((line) => `> ${line}`).join('\n'))
114
- // Strip remaining tags
115
- .replace(/<[^>]+>/g, '')
116
- // HTML entities - named
117
- .replace(/&copy;/g, '©')
118
- .replace(/&reg;/g, '®')
119
- // Clean up whitespace
120
- .replace(/\n{3,}/g, '\n\n')
121
- .trim();
122
- return decodeHtmlEntities(text);
123
- }
124
- /**
125
- * Map category IDs to names (common MNE forum categories).
126
- * Falls back to generic name if category ID is unknown.
127
- */
128
- function getCategoryName(categoryId) {
129
- const categories = {
130
- 1: 'General',
131
- 4: 'Usage Questions',
132
- 5: 'Development',
133
- 6: 'Announcements',
134
- 7: 'Showcase',
135
- };
136
- return categories[categoryId] || `Category ${categoryId}`;
22
+ return context.forum.getTopic(topicId, { maxPosts, maxContentLength });
137
23
  }
138
24
  export { getMneForumTopic as handler };
139
25
  //# sourceMappingURL=getMneForumTopic.js.map