@j0hanz/filesystem-context-mcp 1.2.8 → 1.2.9

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 (70) hide show
  1. package/README.md +52 -0
  2. package/dist/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.js +21 -0
  3. package/dist/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.js.map +1 -1
  4. package/dist/__tests__/lib/file-operations/read-multiple-files.test.js +18 -0
  5. package/dist/__tests__/lib/file-operations/read-multiple-files.test.js.map +1 -1
  6. package/dist/__tests__/lib/file-operations/search-definitions.test.d.ts +2 -0
  7. package/dist/__tests__/lib/file-operations/search-definitions.test.d.ts.map +1 -0
  8. package/dist/__tests__/lib/file-operations/search-definitions.test.js +290 -0
  9. package/dist/__tests__/lib/file-operations/search-definitions.test.js.map +1 -0
  10. package/dist/config/types.d.ts +33 -0
  11. package/dist/config/types.d.ts.map +1 -1
  12. package/dist/config/types.js.map +1 -1
  13. package/dist/instructions.md +48 -12
  14. package/dist/lib/file-operations/list-directory-helpers.d.ts +1 -0
  15. package/dist/lib/file-operations/list-directory-helpers.d.ts.map +1 -1
  16. package/dist/lib/file-operations/list-directory-helpers.js +9 -6
  17. package/dist/lib/file-operations/list-directory-helpers.js.map +1 -1
  18. package/dist/lib/file-operations/list-directory.d.ts +1 -0
  19. package/dist/lib/file-operations/list-directory.d.ts.map +1 -1
  20. package/dist/lib/file-operations/list-directory.js +2 -0
  21. package/dist/lib/file-operations/list-directory.js.map +1 -1
  22. package/dist/lib/file-operations/read-multiple-files.d.ts +2 -0
  23. package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -1
  24. package/dist/lib/file-operations/read-multiple-files.js +44 -11
  25. package/dist/lib/file-operations/read-multiple-files.js.map +1 -1
  26. package/dist/lib/file-operations/search-definitions.d.ts +6 -0
  27. package/dist/lib/file-operations/search-definitions.d.ts.map +1 -0
  28. package/dist/lib/file-operations/search-definitions.js +216 -0
  29. package/dist/lib/file-operations/search-definitions.js.map +1 -0
  30. package/dist/lib/file-operations/search-files-helpers.d.ts +3 -1
  31. package/dist/lib/file-operations/search-files-helpers.d.ts.map +1 -1
  32. package/dist/lib/file-operations/search-files-helpers.js +4 -2
  33. package/dist/lib/file-operations/search-files-helpers.js.map +1 -1
  34. package/dist/lib/file-operations/search-files.d.ts.map +1 -1
  35. package/dist/lib/file-operations/search-files.js +1 -1
  36. package/dist/lib/file-operations/search-files.js.map +1 -1
  37. package/dist/lib/file-operations.d.ts +1 -0
  38. package/dist/lib/file-operations.d.ts.map +1 -1
  39. package/dist/lib/file-operations.js +1 -0
  40. package/dist/lib/file-operations.js.map +1 -1
  41. package/dist/schemas/common.d.ts +2 -2
  42. package/dist/schemas/index.d.ts +2 -2
  43. package/dist/schemas/index.d.ts.map +1 -1
  44. package/dist/schemas/index.js +2 -2
  45. package/dist/schemas/index.js.map +1 -1
  46. package/dist/schemas/inputs.d.ts +14 -0
  47. package/dist/schemas/inputs.d.ts.map +1 -1
  48. package/dist/schemas/inputs.js +32 -0
  49. package/dist/schemas/inputs.js.map +1 -1
  50. package/dist/schemas/outputs.d.ts +146 -20
  51. package/dist/schemas/outputs.d.ts.map +1 -1
  52. package/dist/schemas/outputs.js +40 -1
  53. package/dist/schemas/outputs.js.map +1 -1
  54. package/dist/tools/index.d.ts.map +1 -1
  55. package/dist/tools/index.js +2 -0
  56. package/dist/tools/index.js.map +1 -1
  57. package/dist/tools/list-directory.d.ts.map +1 -1
  58. package/dist/tools/list-directory.js +6 -4
  59. package/dist/tools/list-directory.js.map +1 -1
  60. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  61. package/dist/tools/read-multiple-files.js +3 -1
  62. package/dist/tools/read-multiple-files.js.map +1 -1
  63. package/dist/tools/search-definitions.d.ts +3 -0
  64. package/dist/tools/search-definitions.d.ts.map +1 -0
  65. package/dist/tools/search-definitions.js +116 -0
  66. package/dist/tools/search-definitions.js.map +1 -0
  67. package/dist/tools/search-files.d.ts.map +1 -1
  68. package/dist/tools/search-files.js +3 -2
  69. package/dist/tools/search-files.js.map +1 -1
  70. package/package.json +1 -1
package/README.md CHANGED
@@ -37,6 +37,7 @@ A secure, read-only MCP server for filesystem scanning, searching, and analysis
37
37
  | Explore project structure | `list_directory` |
38
38
  | Find specific file types | `search_files` |
39
39
  | Search for code patterns/text | `search_content` |
40
+ | Find code definitions | `search_definitions` |
40
41
  | Understand codebase statistics | `analyze_directory` |
41
42
  | Get AI-friendly project overview | `directory_tree` |
42
43
  | Read source code | `read_file` |
@@ -323,6 +324,55 @@ Search for text content within files using regular expressions.
323
324
 
324
325
  ---
325
326
 
327
+ ### `search_definitions`
328
+
329
+ Find code definitions (classes, functions, interfaces, types, enums, variables) in TypeScript/JavaScript files without manual regex construction.
330
+
331
+ | Parameter | Type | Required | Default | Description |
332
+ | ----------------- | -------- | -------- | ------- | ------------------------------------------------------------------------------------- |
333
+ | `path` | string | ❌ | - | Base directory to search in |
334
+ | `name` | string | ❌ | - | Definition name to search for |
335
+ | `type` | string | ❌ | - | Definition type to find: `class`, `function`, `interface`, `type`, `enum`, `variable` |
336
+ | `caseSensitive` | boolean | ❌ | `true` | Case-sensitive name matching |
337
+ | `maxResults` | number | ❌ | `100` | Maximum number of results (1-10,000) |
338
+ | `excludePatterns` | string[] | ❌ | `[]` | Glob patterns to exclude |
339
+ | `includeHidden` | boolean | ❌ | `false` | Include hidden files and directories |
340
+ | `contextLines` | number | ❌ | `0` | Lines of context before/after match (0-10) |
341
+
342
+ **Returns:** List of definitions with name, type (class/function/interface/type/enum/variable), file path, line number, exported status, and code preview.
343
+
344
+ **Use cases:**
345
+
346
+ - **Find by name:** Search for a specific definition like `UserService`
347
+ - **Discovery mode:** Find all definitions of a type (e.g., all interfaces)
348
+ - **Combined:** Find definitions matching a name pattern and type
349
+
350
+ **Examples:**
351
+
352
+ ```json
353
+ {
354
+ "path": "/project/src",
355
+ "name": "UserService"
356
+ }
357
+ ```
358
+
359
+ ```json
360
+ {
361
+ "path": "/project/src",
362
+ "type": "interface"
363
+ }
364
+ ```
365
+
366
+ ```json
367
+ {
368
+ "path": "/project/src",
369
+ "name": "Handler",
370
+ "type": "class"
371
+ }
372
+ ```
373
+
374
+ ---
375
+
326
376
  ### `analyze_directory`
327
377
 
328
378
  Analyze a directory structure and return statistics.
@@ -580,6 +630,7 @@ src/
580
630
  │ │ ├── read-media-file.ts
581
631
  │ │ ├── read-multiple-files.ts
582
632
  │ │ ├── search-content.ts
633
+ │ │ ├── search-definitions.ts
583
634
  │ │ ├── search-files.ts
584
635
  │ │ └── sorting.ts
585
636
  │ ├── fs-helpers/ # Low-level filesystem helpers
@@ -615,6 +666,7 @@ src/
615
666
  │ ├── read-media-file.ts
616
667
  │ ├── read-multiple-files.ts
617
668
  │ ├── search-content.ts
669
+ │ ├── search-definitions.ts
618
670
  │ ├── search-files.ts
619
671
  │ ├── tool-response.ts # Tool response formatting
620
672
  │ └── index.ts # Tool registration
@@ -1,3 +1,4 @@
1
+ import * as fs from 'node:fs/promises';
1
2
  import * as path from 'node:path';
2
3
  import { expect, it } from 'vitest';
3
4
  import { readMultipleFiles } from '../../../lib/file-operations.js';
@@ -16,4 +17,24 @@ it('readMultipleFiles handles all files failing', async () => {
16
17
  expect(results.length).toBe(2);
17
18
  expect(results.every((r) => r.error !== undefined)).toBe(true);
18
19
  });
20
+ it('readMultipleFiles rejects line range with head/tail', async () => {
21
+ const filePath = path.join(getTestDir(), 'multiline.txt');
22
+ await expect(readMultipleFiles([filePath], {
23
+ lineStart: 1,
24
+ lineEnd: 2,
25
+ head: 1,
26
+ })).rejects.toThrow('Cannot specify multiple');
27
+ });
28
+ it('readMultipleFiles applies maxTotalSize per entry even with duplicates', async () => {
29
+ const filePath = path.join(getTestDir(), 'big-duplicate.log');
30
+ const largeContent = 'A'.repeat(50_000);
31
+ await fs.writeFile(filePath, largeContent);
32
+ const results = await readMultipleFiles([filePath, filePath], {
33
+ head: 1,
34
+ maxTotalSize: 10,
35
+ });
36
+ expect(results.length).toBe(2);
37
+ expect(results.every((r) => r.error !== undefined)).toBe(true);
38
+ await fs.rm(filePath).catch(() => { });
39
+ });
19
40
  //# sourceMappingURL=read-multiple-files-edge-cases.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-multiple-files-edge-cases.test.js","sourceRoot":"","sources":["../../../../src/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;AAEvC,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC;KAC5C,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"read-multiple-files-edge-cases.test.js","sourceRoot":"","sources":["../../../../src/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;AAEvC,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC;KAC5C,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,eAAe,CAAC,CAAC;IAC1D,MAAM,MAAM,CACV,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,CAAC;KACR,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;IACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;QAC5D,IAAI,EAAE,CAAC;QACP,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
@@ -23,6 +23,13 @@ it('readMultipleFiles handles individual file errors gracefully', async () => {
23
23
  expect(results[0]?.content).toBeDefined();
24
24
  expect(results[1]?.error).toBeDefined();
25
25
  });
26
+ it('readMultipleFiles preserves requested paths for duplicates', async () => {
27
+ const filePath = path.join(getTestDir(), 'README.md');
28
+ const results = await readMultipleFiles([filePath, filePath]);
29
+ expect(results.length).toBe(2);
30
+ expect(results[0]?.path).toBe(filePath);
31
+ expect(results[1]?.path).toBe(filePath);
32
+ });
26
33
  it('readMultipleFiles enforces total size cap for head/tail reads', async () => {
27
34
  const big1 = path.join(getTestDir(), 'big1.log');
28
35
  const big2 = path.join(getTestDir(), 'big2.log');
@@ -36,4 +43,15 @@ it('readMultipleFiles enforces total size cap for head/tail reads', async () =>
36
43
  expect(results.every((r) => r.error !== undefined)).toBe(true);
37
44
  await Promise.all([fs.rm(big1), fs.rm(big2)]).catch(() => { });
38
45
  });
46
+ it('readMultipleFiles supports line range reads', async () => {
47
+ const filePath = path.join(getTestDir(), 'multiline.txt');
48
+ const results = await readMultipleFiles([filePath], {
49
+ lineStart: 2,
50
+ lineEnd: 4,
51
+ });
52
+ const content = results[0]?.content ?? '';
53
+ expect(content.split('\n')[0]).toBe('Line 2');
54
+ expect(content.split('\n')[2]).toBe('Line 4');
55
+ expect(results[0]?.truncated).toBe(true);
56
+ });
39
57
  //# sourceMappingURL=read-multiple-files.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-multiple-files.test.js","sourceRoot":"","sources":["../../../../src/__tests__/lib/file-operations/read-multiple-files.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;AAEvC,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;IAClE,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC;KAC3C,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;IAC3E,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC;KAC5C,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;QACpD,IAAI,EAAE,CAAC;QACP,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"read-multiple-files.test.js","sourceRoot":"","sources":["../../../../src/__tests__/lib/file-operations/read-multiple-files.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search-definitions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-definitions.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/lib/file-operations/search-definitions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,290 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as os from 'node:os';
3
+ import * as path from 'node:path';
4
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
5
+ import { searchDefinitions } from '../../../lib/file-operations/search-definitions.js';
6
+ import { normalizePath } from '../../../lib/path-utils.js';
7
+ import { setAllowedDirectories } from '../../../lib/path-validation.js';
8
+ describe('searchDefinitions', () => {
9
+ let testDir;
10
+ beforeAll(async () => {
11
+ // Create a unique temp directory for this test suite
12
+ testDir = await fs.mkdtemp(path.join(os.tmpdir(), 'mcp-search-definitions-test-'));
13
+ setAllowedDirectories([normalizePath(testDir)]);
14
+ // Create directory structure
15
+ await fs.mkdir(path.join(testDir, 'src', 'services'), { recursive: true });
16
+ await fs.mkdir(path.join(testDir, 'src', 'utils'), { recursive: true });
17
+ await fs.mkdir(path.join(testDir, 'src', 'types'), { recursive: true });
18
+ // Create test TypeScript files with various definitions
19
+ await fs.writeFile(path.join(testDir, 'src', 'services', 'user-service.ts'), `import { Database } from '../database';
20
+
21
+ export class UserService {
22
+ private db: Database;
23
+
24
+ constructor(db: Database) {
25
+ this.db = db;
26
+ }
27
+
28
+ async getUser(id: string): Promise<User | null> {
29
+ return this.db.findById(id);
30
+ }
31
+ }
32
+
33
+ export interface User {
34
+ id: string;
35
+ name: string;
36
+ email: string;
37
+ }
38
+
39
+ export type UserId = string;
40
+
41
+ export const DEFAULT_USER: User = {
42
+ id: '0',
43
+ name: 'Guest',
44
+ email: 'guest@example.com',
45
+ };
46
+
47
+ export enum UserRole {
48
+ Admin = 'admin',
49
+ User = 'user',
50
+ Guest = 'guest',
51
+ }
52
+
53
+ export async function createUser(name: string): Promise<User> {
54
+ return { id: crypto.randomUUID(), name, email: '' };
55
+ }
56
+
57
+ const internalHelper = (x: number) => x * 2;
58
+
59
+ export const processUser = async (user: User) => {
60
+ return user;
61
+ };
62
+ `);
63
+ await fs.writeFile(path.join(testDir, 'src', 'utils', 'helpers.ts'), `export function formatDate(date: Date): string {
64
+ return date.toISOString();
65
+ }
66
+
67
+ export const debounce = <T extends (...args: unknown[]) => unknown>(
68
+ fn: T,
69
+ delay: number
70
+ ) => {
71
+ let timeoutId: ReturnType<typeof setTimeout>;
72
+ return (...args: Parameters<T>) => {
73
+ clearTimeout(timeoutId);
74
+ timeoutId = setTimeout(() => fn(...args), delay);
75
+ };
76
+ };
77
+
78
+ export interface DateOptions {
79
+ locale?: string;
80
+ timezone?: string;
81
+ }
82
+
83
+ export type DateFormatter = (date: Date, options?: DateOptions) => string;
84
+ `);
85
+ await fs.writeFile(path.join(testDir, 'src', 'types', 'index.ts'), `export interface ApiResponse<T> {
86
+ data: T;
87
+ status: number;
88
+ message?: string;
89
+ }
90
+
91
+ export type ApiError = {
92
+ code: string;
93
+ message: string;
94
+ };
95
+
96
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
97
+
98
+ export const enum HttpStatus {
99
+ OK = 200,
100
+ Created = 201,
101
+ BadRequest = 400,
102
+ NotFound = 404,
103
+ }
104
+ `);
105
+ });
106
+ afterAll(async () => {
107
+ // Cleanup
108
+ try {
109
+ await fs.rm(testDir, { recursive: true, force: true });
110
+ }
111
+ catch {
112
+ // Ignore cleanup errors
113
+ }
114
+ });
115
+ describe('search by name', () => {
116
+ it('should find a class by name', async () => {
117
+ const result = await searchDefinitions({
118
+ path: testDir,
119
+ name: 'UserService',
120
+ type: 'class',
121
+ });
122
+ expect(result.definitions).toHaveLength(1);
123
+ expect(result.definitions[0]).toMatchObject({
124
+ name: 'UserService',
125
+ definitionType: 'class',
126
+ exported: true,
127
+ });
128
+ expect(result.definitions[0]?.file).toContain('user-service.ts');
129
+ });
130
+ it('should find a function by name', async () => {
131
+ const result = await searchDefinitions({
132
+ path: testDir,
133
+ name: 'createUser',
134
+ });
135
+ expect(result.definitions.length).toBeGreaterThanOrEqual(1);
136
+ const createUserDef = result.definitions.find((d) => d.name === 'createUser');
137
+ expect(createUserDef).toBeDefined();
138
+ expect(createUserDef?.definitionType).toBe('function');
139
+ expect(createUserDef?.exported).toBe(true);
140
+ });
141
+ it('should find an interface by name', async () => {
142
+ const result = await searchDefinitions({
143
+ path: testDir,
144
+ name: 'User',
145
+ type: 'interface',
146
+ });
147
+ expect(result.definitions.length).toBeGreaterThanOrEqual(1);
148
+ const userInterface = result.definitions.find((d) => d.name === 'User' && d.definitionType === 'interface');
149
+ expect(userInterface).toBeDefined();
150
+ });
151
+ it('should find a type alias by name', async () => {
152
+ const result = await searchDefinitions({
153
+ path: testDir,
154
+ name: 'UserId',
155
+ type: 'type',
156
+ });
157
+ expect(result.definitions).toHaveLength(1);
158
+ expect(result.definitions[0]).toMatchObject({
159
+ name: 'UserId',
160
+ definitionType: 'type',
161
+ exported: true,
162
+ });
163
+ });
164
+ it('should find an enum by name', async () => {
165
+ const result = await searchDefinitions({
166
+ path: testDir,
167
+ name: 'UserRole',
168
+ type: 'enum',
169
+ });
170
+ expect(result.definitions).toHaveLength(1);
171
+ expect(result.definitions[0]).toMatchObject({
172
+ name: 'UserRole',
173
+ definitionType: 'enum',
174
+ exported: true,
175
+ });
176
+ });
177
+ });
178
+ describe('discovery mode (search by type)', () => {
179
+ it('should find all classes', async () => {
180
+ const result = await searchDefinitions({
181
+ path: testDir,
182
+ type: 'class',
183
+ });
184
+ expect(result.definitions.length).toBeGreaterThanOrEqual(1);
185
+ expect(result.definitions.every((d) => d.definitionType === 'class')).toBe(true);
186
+ });
187
+ it('should find all interfaces', async () => {
188
+ const result = await searchDefinitions({
189
+ path: testDir,
190
+ type: 'interface',
191
+ });
192
+ expect(result.definitions.length).toBeGreaterThanOrEqual(3);
193
+ const names = result.definitions.map((d) => d.name);
194
+ expect(names).toContain('User');
195
+ expect(names).toContain('DateOptions');
196
+ expect(names).toContain('ApiResponse');
197
+ });
198
+ it('should find all type aliases', async () => {
199
+ const result = await searchDefinitions({
200
+ path: testDir,
201
+ type: 'type',
202
+ });
203
+ expect(result.definitions.length).toBeGreaterThanOrEqual(3);
204
+ const names = result.definitions.map((d) => d.name);
205
+ expect(names).toContain('UserId');
206
+ expect(names).toContain('DateFormatter');
207
+ expect(names).toContain('ApiError');
208
+ });
209
+ it('should find all enums', async () => {
210
+ const result = await searchDefinitions({
211
+ path: testDir,
212
+ type: 'enum',
213
+ });
214
+ expect(result.definitions.length).toBeGreaterThanOrEqual(2);
215
+ const names = result.definitions.map((d) => d.name);
216
+ expect(names).toContain('UserRole');
217
+ expect(names).toContain('HttpStatus');
218
+ });
219
+ });
220
+ describe('options', () => {
221
+ it('should include context lines when specified', async () => {
222
+ const result = await searchDefinitions({
223
+ path: testDir,
224
+ name: 'UserService',
225
+ type: 'class',
226
+ contextLines: 2,
227
+ });
228
+ expect(result.definitions).toHaveLength(1);
229
+ expect(result.definitions[0]?.contextBefore).toBeDefined();
230
+ expect(result.definitions[0]?.contextAfter).toBeDefined();
231
+ });
232
+ it('should respect maxResults limit', async () => {
233
+ const result = await searchDefinitions({
234
+ path: testDir,
235
+ type: 'interface',
236
+ maxResults: 2,
237
+ });
238
+ expect(result.definitions.length).toBeLessThanOrEqual(2);
239
+ });
240
+ it('should detect exported vs non-exported definitions', async () => {
241
+ // Search for functions - will include both regular functions and arrow functions
242
+ const result = await searchDefinitions({
243
+ path: testDir,
244
+ type: 'function',
245
+ });
246
+ const exported = result.definitions.filter((d) => d.exported);
247
+ const nonExported = result.definitions.filter((d) => !d.exported);
248
+ // Should have exported functions like createUser, formatDate
249
+ expect(exported.length).toBeGreaterThan(0);
250
+ // Note: internalHelper is an arrow function, so it may or may not be found
251
+ // depending on the search pattern. The key test is that exported/non-exported
252
+ // detection works for definitions that are found.
253
+ if (nonExported.length > 0) {
254
+ expect(nonExported[0]?.exported).toBe(false);
255
+ }
256
+ if (exported.length > 0) {
257
+ expect(exported[0]?.exported).toBe(true);
258
+ }
259
+ });
260
+ });
261
+ describe('error handling', () => {
262
+ it('should throw error when neither name nor type is provided', async () => {
263
+ await expect(searchDefinitions({
264
+ path: testDir,
265
+ })).rejects.toThrow(/name or type/i);
266
+ });
267
+ it('should return empty results for non-existent symbol', async () => {
268
+ const result = await searchDefinitions({
269
+ path: testDir,
270
+ name: 'NonExistentClass',
271
+ type: 'class',
272
+ });
273
+ expect(result.definitions).toHaveLength(0);
274
+ expect(result.summary.totalDefinitions).toBe(0);
275
+ });
276
+ });
277
+ describe('summary', () => {
278
+ it('should include accurate summary statistics', async () => {
279
+ const result = await searchDefinitions({
280
+ path: testDir,
281
+ type: 'interface',
282
+ });
283
+ expect(result.summary.filesScanned).toBeGreaterThan(0);
284
+ expect(result.summary.filesMatched).toBeGreaterThan(0);
285
+ expect(result.summary.totalDefinitions).toBe(result.definitions.length);
286
+ expect(typeof result.summary.truncated).toBe('boolean');
287
+ });
288
+ });
289
+ });
290
+ //# sourceMappingURL=search-definitions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-definitions.test.js","sourceRoot":"","sources":["../../../../src/__tests__/lib/file-operations/search-definitions.test.ts"],"names":[],"mappings":"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"}
@@ -124,6 +124,39 @@ export interface MediaFileResult {
124
124
  size: number;
125
125
  data: string;
126
126
  }
127
+ export type DefinitionType = 'function' | 'class' | 'interface' | 'type' | 'enum' | 'variable';
128
+ export interface SearchDefinitionsOptions {
129
+ path: string;
130
+ name?: string;
131
+ type?: DefinitionType;
132
+ caseSensitive?: boolean;
133
+ maxResults?: number;
134
+ excludePatterns?: string[];
135
+ includeHidden?: boolean;
136
+ contextLines?: number;
137
+ }
138
+ export interface DefinitionMatch {
139
+ file: string;
140
+ line: number;
141
+ definitionType: DefinitionType;
142
+ name: string;
143
+ content: string;
144
+ contextBefore?: string[];
145
+ contextAfter?: string[];
146
+ exported: boolean;
147
+ }
148
+ export interface SearchDefinitionsResult {
149
+ basePath: string;
150
+ searchName?: string;
151
+ searchType?: DefinitionType;
152
+ definitions: DefinitionMatch[];
153
+ summary: {
154
+ filesScanned: number;
155
+ filesMatched: number;
156
+ totalDefinitions: number;
157
+ truncated: boolean;
158
+ };
159
+ }
127
160
  export declare const ErrorCode: {
128
161
  readonly E_ACCESS_DENIED: "E_ACCESS_DENIED";
129
162
  readonly E_NOT_FOUND: "E_NOT_FOUND";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAqIA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,SAAS,EAAE,WAAW;CACd,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAgLA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,SAAS,EAAE,WAAW;CACd,CAAC"}
@@ -16,6 +16,7 @@ This server enables AI assistants to safely explore and analyze filesystem conte
16
16
  | Directory stats | `analyze_directory` | `topN`, `excludePatterns`, `maxEntries` |
17
17
  | Find files | `search_files` | `pattern` (glob), `maxResults` |
18
18
  | Search in files | `search_content` | `pattern` (regex), `contextLines` |
19
+ | Find definitions | `search_definitions` | `name`, `type`, `contextLines` |
19
20
  | Read file | `read_file` | `head`, `tail`, `lineStart/lineEnd` |
20
21
  | Read multiple files | `read_multiple_files` | `paths[]` — **preferred for 2+** |
21
22
  | File metadata | `get_file_info` | `path` |
@@ -43,6 +44,13 @@ search_files(pattern="**/*.ts") → read_multiple_files([...results])
43
44
  search_content(pattern="TODO|FIXME", filePattern="**/*.ts", contextLines=2)
44
45
  ```
45
46
 
47
+ ### Find Code Definitions
48
+
49
+ ```text
50
+ search_definitions(path="src/", name="User") → Find classes/functions/types named "User"
51
+ search_definitions(path="src/", type="interface") → Discover all interfaces
52
+ ```
53
+
46
54
  ### Common Glob Patterns
47
55
 
48
56
  | Pattern | Matches |
@@ -91,11 +99,12 @@ Find files by glob pattern.
91
99
 
92
100
  | Parameter | Default | Description |
93
101
  | ----------------- | ------- | ------------------------- |
94
- | `path` | | Base directory |
95
- | `pattern` | | Glob: `**/*.ts`, `src/**` |
102
+ | `path` | - | Base directory |
103
+ | `pattern` | - | Glob: `**/*.ts`, `src/**` |
96
104
  | `excludePatterns` | [] | Patterns to skip |
97
- | `maxResults` | | Limit (up to 10,000) |
105
+ | `maxResults` | - | Limit (up to 10,000) |
98
106
  | `sortBy` | "path" | `name/size/modified/path` |
107
+ | `includeHidden` | false | Include dotfiles |
99
108
 
100
109
  ### `search_content`
101
110
 
@@ -113,6 +122,27 @@ Grep-like regex search in files.
113
122
  | `maxResults` | 100 | Limit matches |
114
123
  | `skipBinary` | true | Skip binary files |
115
124
 
125
+ ### `search_definitions`
126
+
127
+ Find code definitions (classes, functions, interfaces, types, enums, variables) without manual regex construction.
128
+
129
+ | Parameter | Default | Description |
130
+ | ----------------- | ------- | ----------------------------------------------------------------------------- |
131
+ | `path` | - | Base directory to search |
132
+ | `name` | - | Definition name to find |
133
+ | `type` | - | Definition type: `class`, `function`, `interface`, `type`, `enum`, `variable` |
134
+ | `caseSensitive` | true | Case-sensitive name matching |
135
+ | `maxResults` | 100 | Limit matches |
136
+ | `excludePatterns` | [] | Glob patterns to exclude |
137
+ | `includeHidden` | false | Include hidden files and directories |
138
+ | `contextLines` | 0 | Lines of context before/after match (0-10) |
139
+
140
+ **Usage patterns:**
141
+
142
+ - **Find by name:** `search_definitions(path="src/", name="UserService")` — finds class/function/type named UserService
143
+ - **Discovery mode:** `search_definitions(path="src/", type="interface")` — lists all interfaces
144
+ - **Combined:** `search_definitions(path="src/", name="Handler", type="class")` — finds classes named "Handler"
145
+
116
146
  ### `read_file`
117
147
 
118
148
  Read single file with line selection.
@@ -131,15 +161,19 @@ Read single file with line selection.
131
161
 
132
162
  ### `read_multiple_files`
133
163
 
134
- Parallel batch reads failures don't block others.
164
+ Parallel batch reads - failures don't block others.
135
165
 
136
- | Parameter | Default | Description |
137
- | ---------- | ------- | ------------------ |
138
- | `paths` | | Array (max 100) |
139
- | `encoding` | utf-8 | Encoding for all |
140
- | `maxSize` | 10MB | Per-file limit |
141
- | `head` | | First N lines each |
142
- | `tail` | | Last N lines each |
166
+ | Parameter | Default | Description |
167
+ | ----------- | ------- | ------------------------------- |
168
+ | `paths` | - | Array (max 100) |
169
+ | `encoding` | utf-8 | Encoding for all |
170
+ | `maxSize` | 10MB | Per-file limit |
171
+ | `head` | - | First N lines each |
172
+ | `tail` | - | Last N lines each |
173
+ | `lineStart` | - | Start line (1-indexed) per file |
174
+ | `lineEnd` | - | End line (inclusive) per file |
175
+
176
+ > ⚠️ Cannot combine `head/tail` with `lineStart/lineEnd`
143
177
 
144
178
  ### `list_directory`
145
179
 
@@ -147,12 +181,14 @@ Flat listing with metadata.
147
181
 
148
182
  | Parameter | Default | Description |
149
183
  | ------------ | ------- | ------------------------- |
150
- | `path` | | Directory path |
184
+ | `path` | - | Directory path |
151
185
  | `recursive` | false | Include subdirs |
152
186
  | `sortBy` | "name" | `name/size/modified/type` |
153
187
  | `maxDepth` | 10 | Depth when recursive |
154
188
  | `maxEntries` | 10000 | Limit (up to 100,000) |
155
189
 
190
+ **Structured output notes:** `entries[].name` is the basename, and `entries[].relativePath` is the path relative to the listed base.
191
+
156
192
  ### `analyze_directory`
157
193
 
158
194
  Statistics: counts, sizes, types, largest/recent files.