@j0hanz/filesystem-context-mcp 1.3.0 → 1.3.2

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 (311) hide show
  1. package/README.md +251 -504
  2. package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.js +1 -1
  3. package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.js.map +1 -1
  4. package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.d.ts +2 -0
  5. package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.d.ts.map +1 -0
  6. package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.js +43 -0
  7. package/dist/__tests__/lib/file-operations/search-definitions-helpers.test.js.map +1 -0
  8. package/dist/__tests__/lib/file-operations/search-definitions.fixtures.d.ts +7 -0
  9. package/dist/__tests__/lib/file-operations/search-definitions.fixtures.d.ts.map +1 -0
  10. package/dist/__tests__/lib/file-operations/search-definitions.fixtures.js +113 -0
  11. package/dist/__tests__/lib/file-operations/search-definitions.fixtures.js.map +1 -0
  12. package/dist/__tests__/lib/file-operations/search-definitions.test.js +1 -112
  13. package/dist/__tests__/lib/file-operations/search-definitions.test.js.map +1 -1
  14. package/dist/__tests__/lib/file-operations/sorting.test.js +15 -40
  15. package/dist/__tests__/lib/file-operations/sorting.test.js.map +1 -1
  16. package/dist/__tests__/lib/path-validation-errors.test.js +1 -1
  17. package/dist/__tests__/lib/path-validation-errors.test.js.map +1 -1
  18. package/dist/__tests__/lib/path-validation.test.js +17 -0
  19. package/dist/__tests__/lib/path-validation.test.js.map +1 -1
  20. package/dist/config/formatting.d.ts +14 -0
  21. package/dist/config/formatting.d.ts.map +1 -0
  22. package/dist/config/formatting.js +34 -0
  23. package/dist/config/formatting.js.map +1 -0
  24. package/dist/config/types.d.ts +3 -97
  25. package/dist/config/types.d.ts.map +1 -1
  26. package/dist/config/types.js.map +1 -1
  27. package/dist/index.js +32 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/instructions.md +151 -170
  30. package/dist/lib/constants.d.ts +1 -5
  31. package/dist/lib/constants.d.ts.map +1 -1
  32. package/dist/lib/constants.js +19 -15
  33. package/dist/lib/constants.js.map +1 -1
  34. package/dist/lib/errors.d.ts +0 -2
  35. package/dist/lib/errors.d.ts.map +1 -1
  36. package/dist/lib/errors.js +2 -30
  37. package/dist/lib/errors.js.map +1 -1
  38. package/dist/lib/file-operations/analyze-directory.d.ts.map +1 -1
  39. package/dist/lib/file-operations/analyze-directory.js +8 -1
  40. package/dist/lib/file-operations/analyze-directory.js.map +1 -1
  41. package/dist/lib/file-operations/batch-results.d.ts +2 -1
  42. package/dist/lib/file-operations/batch-results.d.ts.map +1 -1
  43. package/dist/lib/file-operations/compute-checksums.d.ts +1 -0
  44. package/dist/lib/file-operations/compute-checksums.d.ts.map +1 -1
  45. package/dist/lib/file-operations/compute-checksums.js +58 -45
  46. package/dist/lib/file-operations/compute-checksums.js.map +1 -1
  47. package/dist/lib/file-operations/directory-tree-builders.d.ts +7 -0
  48. package/dist/lib/file-operations/directory-tree-builders.d.ts.map +1 -0
  49. package/dist/lib/file-operations/directory-tree-builders.js +58 -0
  50. package/dist/lib/file-operations/directory-tree-builders.js.map +1 -0
  51. package/dist/lib/file-operations/directory-tree-helpers.d.ts +0 -5
  52. package/dist/lib/file-operations/directory-tree-helpers.d.ts.map +1 -1
  53. package/dist/lib/file-operations/directory-tree-helpers.js +21 -71
  54. package/dist/lib/file-operations/directory-tree-helpers.js.map +1 -1
  55. package/dist/lib/file-operations/directory-tree.d.ts.map +1 -1
  56. package/dist/lib/file-operations/directory-tree.js +2 -1
  57. package/dist/lib/file-operations/directory-tree.js.map +1 -1
  58. package/dist/lib/file-operations/file-info.d.ts +3 -1
  59. package/dist/lib/file-operations/file-info.d.ts.map +1 -1
  60. package/dist/lib/file-operations/file-info.js +16 -5
  61. package/dist/lib/file-operations/file-info.js.map +1 -1
  62. package/dist/lib/file-operations/get-multiple-file-info.d.ts +1 -1
  63. package/dist/lib/file-operations/get-multiple-file-info.d.ts.map +1 -1
  64. package/dist/lib/file-operations/get-multiple-file-info.js +6 -8
  65. package/dist/lib/file-operations/get-multiple-file-info.js.map +1 -1
  66. package/dist/lib/file-operations/list-directory-entry.d.ts.map +1 -1
  67. package/dist/lib/file-operations/list-directory-entry.js +5 -2
  68. package/dist/lib/file-operations/list-directory-entry.js.map +1 -1
  69. package/dist/lib/file-operations/list-directory-helpers.d.ts +10 -1
  70. package/dist/lib/file-operations/list-directory-helpers.d.ts.map +1 -1
  71. package/dist/lib/file-operations/list-directory-helpers.js +51 -31
  72. package/dist/lib/file-operations/list-directory-helpers.js.map +1 -1
  73. package/dist/lib/file-operations/list-directory.d.ts +1 -0
  74. package/dist/lib/file-operations/list-directory.d.ts.map +1 -1
  75. package/dist/lib/file-operations/list-directory.js +13 -4
  76. package/dist/lib/file-operations/list-directory.js.map +1 -1
  77. package/dist/lib/file-operations/read-media-file.d.ts.map +1 -1
  78. package/dist/lib/file-operations/read-media-file.js +5 -1
  79. package/dist/lib/file-operations/read-media-file.js.map +1 -1
  80. package/dist/lib/file-operations/read-multiple-files.d.ts +8 -0
  81. package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -1
  82. package/dist/lib/file-operations/read-multiple-files.js +47 -18
  83. package/dist/lib/file-operations/read-multiple-files.js.map +1 -1
  84. package/dist/lib/file-operations/search/context-manager.d.ts +2 -0
  85. package/dist/lib/file-operations/search/context-manager.d.ts.map +1 -1
  86. package/dist/lib/file-operations/search/context-manager.js +22 -8
  87. package/dist/lib/file-operations/search/context-manager.js.map +1 -1
  88. package/dist/lib/file-operations/search/engine-stream.d.ts +1 -1
  89. package/dist/lib/file-operations/search/engine-stream.d.ts.map +1 -1
  90. package/dist/lib/file-operations/search/engine-stream.js +102 -9
  91. package/dist/lib/file-operations/search/engine-stream.js.map +1 -1
  92. package/dist/lib/file-operations/search/engine.d.ts.map +1 -1
  93. package/dist/lib/file-operations/search/engine.js +42 -5
  94. package/dist/lib/file-operations/search/engine.js.map +1 -1
  95. package/dist/lib/file-operations/search/file-processor.d.ts.map +1 -1
  96. package/dist/lib/file-operations/search/file-processor.js +102 -55
  97. package/dist/lib/file-operations/search/file-processor.js.map +1 -1
  98. package/dist/lib/file-operations/search/match-strategy.d.ts.map +1 -1
  99. package/dist/lib/file-operations/search/match-strategy.js +2 -1
  100. package/dist/lib/file-operations/search/match-strategy.js.map +1 -1
  101. package/dist/lib/file-operations/search/types.d.ts +3 -0
  102. package/dist/lib/file-operations/search/types.d.ts.map +1 -1
  103. package/dist/lib/file-operations/search-definitions/matchers.d.ts +12 -0
  104. package/dist/lib/file-operations/search-definitions/matchers.d.ts.map +1 -0
  105. package/dist/lib/file-operations/search-definitions/matchers.js +122 -0
  106. package/dist/lib/file-operations/search-definitions/matchers.js.map +1 -0
  107. package/dist/lib/file-operations/search-definitions/patterns.d.ts +14 -0
  108. package/dist/lib/file-operations/search-definitions/patterns.d.ts.map +1 -0
  109. package/dist/lib/file-operations/search-definitions/patterns.js +83 -0
  110. package/dist/lib/file-operations/search-definitions/patterns.js.map +1 -0
  111. package/dist/lib/file-operations/search-definitions.d.ts.map +1 -1
  112. package/dist/lib/file-operations/search-definitions.js +3 -208
  113. package/dist/lib/file-operations/search-definitions.js.map +1 -1
  114. package/dist/lib/file-operations/search-files-helpers.d.ts +2 -2
  115. package/dist/lib/file-operations/search-files-helpers.d.ts.map +1 -1
  116. package/dist/lib/file-operations/search-files-helpers.js +102 -14
  117. package/dist/lib/file-operations/search-files-helpers.js.map +1 -1
  118. package/dist/lib/file-operations/search-files-options.d.ts +4 -2
  119. package/dist/lib/file-operations/search-files-options.d.ts.map +1 -1
  120. package/dist/lib/file-operations/search-files-options.js.map +1 -1
  121. package/dist/lib/file-operations/search-files.d.ts.map +1 -1
  122. package/dist/lib/file-operations/search-files.js +7 -2
  123. package/dist/lib/file-operations/search-files.js.map +1 -1
  124. package/dist/lib/file-operations/sorting.d.ts.map +1 -1
  125. package/dist/lib/file-operations/sorting.js +39 -14
  126. package/dist/lib/file-operations/sorting.js.map +1 -1
  127. package/dist/lib/file-operations.d.ts +0 -5
  128. package/dist/lib/file-operations.d.ts.map +1 -1
  129. package/dist/lib/file-operations.js +0 -5
  130. package/dist/lib/file-operations.js.map +1 -1
  131. package/dist/lib/fs-helpers/abort.d.ts +3 -0
  132. package/dist/lib/fs-helpers/abort.d.ts.map +1 -0
  133. package/dist/lib/fs-helpers/abort.js +15 -0
  134. package/dist/lib/fs-helpers/abort.js.map +1 -0
  135. package/dist/lib/fs-helpers/concurrency.d.ts +1 -1
  136. package/dist/lib/fs-helpers/concurrency.d.ts.map +1 -1
  137. package/dist/lib/fs-helpers/concurrency.js +54 -6
  138. package/dist/lib/fs-helpers/concurrency.js.map +1 -1
  139. package/dist/lib/fs-helpers/readers/head-file.d.ts +1 -1
  140. package/dist/lib/fs-helpers/readers/head-file.d.ts.map +1 -1
  141. package/dist/lib/fs-helpers/readers/head-file.js +7 -4
  142. package/dist/lib/fs-helpers/readers/head-file.js.map +1 -1
  143. package/dist/lib/fs-helpers/readers/line-range.d.ts +1 -1
  144. package/dist/lib/fs-helpers/readers/line-range.d.ts.map +1 -1
  145. package/dist/lib/fs-helpers/readers/line-range.js +17 -3
  146. package/dist/lib/fs-helpers/readers/line-range.js.map +1 -1
  147. package/dist/lib/fs-helpers/readers/read-buffer.d.ts +2 -0
  148. package/dist/lib/fs-helpers/readers/read-buffer.d.ts.map +1 -0
  149. package/dist/lib/fs-helpers/readers/read-buffer.js +64 -0
  150. package/dist/lib/fs-helpers/readers/read-buffer.js.map +1 -0
  151. package/dist/lib/fs-helpers/readers/read-file-content.d.ts +11 -1
  152. package/dist/lib/fs-helpers/readers/read-file-content.d.ts.map +1 -1
  153. package/dist/lib/fs-helpers/readers/read-file-content.js +33 -9
  154. package/dist/lib/fs-helpers/readers/read-file-content.js.map +1 -1
  155. package/dist/lib/fs-helpers/readers/read-file.d.ts +11 -0
  156. package/dist/lib/fs-helpers/readers/read-file.d.ts.map +1 -1
  157. package/dist/lib/fs-helpers/readers/read-file.js +52 -15
  158. package/dist/lib/fs-helpers/readers/read-file.js.map +1 -1
  159. package/dist/lib/fs-helpers/readers/tail-file.d.ts +1 -1
  160. package/dist/lib/fs-helpers/readers/tail-file.d.ts.map +1 -1
  161. package/dist/lib/fs-helpers/readers/tail-file.js +7 -4
  162. package/dist/lib/fs-helpers/readers/tail-file.js.map +1 -1
  163. package/dist/lib/fs-helpers/readers.d.ts +1 -1
  164. package/dist/lib/fs-helpers/readers.d.ts.map +1 -1
  165. package/dist/lib/fs-helpers/readers.js +1 -1
  166. package/dist/lib/fs-helpers/readers.js.map +1 -1
  167. package/dist/lib/fs-helpers.d.ts +1 -1
  168. package/dist/lib/fs-helpers.d.ts.map +1 -1
  169. package/dist/lib/fs-helpers.js +1 -1
  170. package/dist/lib/fs-helpers.js.map +1 -1
  171. package/dist/lib/path-utils.d.ts +1 -0
  172. package/dist/lib/path-utils.d.ts.map +1 -1
  173. package/dist/lib/path-utils.js +12 -0
  174. package/dist/lib/path-utils.js.map +1 -1
  175. package/dist/lib/path-validation/allowed-directories.d.ts.map +1 -1
  176. package/dist/lib/path-validation/allowed-directories.js +2 -9
  177. package/dist/lib/path-validation/allowed-directories.js.map +1 -1
  178. package/dist/lib/path-validation/errors.js +2 -2
  179. package/dist/lib/path-validation/errors.js.map +1 -1
  180. package/dist/lib/path-validation/validators.d.ts.map +1 -1
  181. package/dist/lib/path-validation/validators.js +3 -1
  182. package/dist/lib/path-validation/validators.js.map +1 -1
  183. package/dist/schemas/common.d.ts +0 -18
  184. package/dist/schemas/common.d.ts.map +1 -1
  185. package/dist/schemas/common.js +0 -10
  186. package/dist/schemas/common.js.map +1 -1
  187. package/dist/schemas/index.d.ts +2 -2
  188. package/dist/schemas/index.d.ts.map +1 -1
  189. package/dist/schemas/index.js +2 -2
  190. package/dist/schemas/index.js.map +1 -1
  191. package/dist/schemas/input-helpers.d.ts +1 -4
  192. package/dist/schemas/input-helpers.d.ts.map +1 -1
  193. package/dist/schemas/input-helpers.js +9 -33
  194. package/dist/schemas/input-helpers.js.map +1 -1
  195. package/dist/schemas/inputs/checksums.d.ts +0 -2
  196. package/dist/schemas/inputs/checksums.d.ts.map +1 -1
  197. package/dist/schemas/inputs/checksums.js +2 -7
  198. package/dist/schemas/inputs/checksums.js.map +1 -1
  199. package/dist/schemas/inputs/directory.d.ts +0 -16
  200. package/dist/schemas/inputs/directory.d.ts.map +1 -1
  201. package/dist/schemas/inputs/directory.js +2 -44
  202. package/dist/schemas/inputs/directory.js.map +1 -1
  203. package/dist/schemas/inputs/read.d.ts +0 -4
  204. package/dist/schemas/inputs/read.d.ts.map +1 -1
  205. package/dist/schemas/inputs/read.js +0 -15
  206. package/dist/schemas/inputs/read.js.map +1 -1
  207. package/dist/schemas/inputs/search.d.ts +1 -12
  208. package/dist/schemas/inputs/search.d.ts.map +1 -1
  209. package/dist/schemas/inputs/search.js +4 -30
  210. package/dist/schemas/inputs/search.js.map +1 -1
  211. package/dist/schemas/inputs.d.ts +3 -4
  212. package/dist/schemas/inputs.d.ts.map +1 -1
  213. package/dist/schemas/inputs.js +3 -4
  214. package/dist/schemas/inputs.js.map +1 -1
  215. package/dist/schemas/output-helpers.d.ts +59 -0
  216. package/dist/schemas/output-helpers.d.ts.map +1 -1
  217. package/dist/schemas/output-helpers.js +31 -0
  218. package/dist/schemas/output-helpers.js.map +1 -1
  219. package/dist/schemas/outputs/checksums.d.ts +4 -4
  220. package/dist/schemas/outputs/checksums.d.ts.map +1 -1
  221. package/dist/schemas/outputs/checksums.js +2 -7
  222. package/dist/schemas/outputs/checksums.js.map +1 -1
  223. package/dist/schemas/outputs/directory.d.ts +68 -230
  224. package/dist/schemas/outputs/directory.d.ts.map +1 -1
  225. package/dist/schemas/outputs/directory.js +14 -32
  226. package/dist/schemas/outputs/directory.js.map +1 -1
  227. package/dist/schemas/outputs/file-info.d.ts +14 -14
  228. package/dist/schemas/outputs/file-info.d.ts.map +1 -1
  229. package/dist/schemas/outputs/file-info.js +4 -31
  230. package/dist/schemas/outputs/file-info.js.map +1 -1
  231. package/dist/schemas/outputs/read.d.ts +141 -46
  232. package/dist/schemas/outputs/read.d.ts.map +1 -1
  233. package/dist/schemas/outputs/read.js +35 -12
  234. package/dist/schemas/outputs/read.js.map +1 -1
  235. package/dist/schemas/outputs/search.d.ts +134 -124
  236. package/dist/schemas/outputs/search.d.ts.map +1 -1
  237. package/dist/schemas/outputs/search.js +33 -35
  238. package/dist/schemas/outputs/search.js.map +1 -1
  239. package/dist/schemas/outputs.d.ts +3 -4
  240. package/dist/schemas/outputs.d.ts.map +1 -1
  241. package/dist/schemas/outputs.js +3 -4
  242. package/dist/schemas/outputs.js.map +1 -1
  243. package/dist/server.d.ts.map +1 -1
  244. package/dist/server.js +4 -1
  245. package/dist/server.js.map +1 -1
  246. package/dist/tools/analyze-directory.d.ts.map +1 -1
  247. package/dist/tools/analyze-directory.js +26 -28
  248. package/dist/tools/analyze-directory.js.map +1 -1
  249. package/dist/tools/compute-checksums.d.ts.map +1 -1
  250. package/dist/tools/compute-checksums.js +13 -21
  251. package/dist/tools/compute-checksums.js.map +1 -1
  252. package/dist/tools/directory-tree.d.ts.map +1 -1
  253. package/dist/tools/directory-tree.js +11 -9
  254. package/dist/tools/directory-tree.js.map +1 -1
  255. package/dist/tools/get-file-info.d.ts.map +1 -1
  256. package/dist/tools/get-file-info.js +8 -44
  257. package/dist/tools/get-file-info.js.map +1 -1
  258. package/dist/tools/get-multiple-file-info.d.ts.map +1 -1
  259. package/dist/tools/get-multiple-file-info.js +13 -55
  260. package/dist/tools/get-multiple-file-info.js.map +1 -1
  261. package/dist/tools/index.d.ts.map +1 -1
  262. package/dist/tools/index.js +0 -10
  263. package/dist/tools/index.js.map +1 -1
  264. package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
  265. package/dist/tools/list-allowed-dirs.js +37 -31
  266. package/dist/tools/list-allowed-dirs.js.map +1 -1
  267. package/dist/tools/list-directory.d.ts.map +1 -1
  268. package/dist/tools/list-directory.js +83 -83
  269. package/dist/tools/list-directory.js.map +1 -1
  270. package/dist/tools/read-file.d.ts.map +1 -1
  271. package/dist/tools/read-file.js +66 -43
  272. package/dist/tools/read-file.js.map +1 -1
  273. package/dist/tools/read-media-file.d.ts.map +1 -1
  274. package/dist/tools/read-media-file.js +8 -6
  275. package/dist/tools/read-media-file.js.map +1 -1
  276. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  277. package/dist/tools/read-multiple-files.js +64 -25
  278. package/dist/tools/read-multiple-files.js.map +1 -1
  279. package/dist/tools/search-content.d.ts.map +1 -1
  280. package/dist/tools/search-content.js +14 -16
  281. package/dist/tools/search-content.js.map +1 -1
  282. package/dist/tools/search-definitions.d.ts.map +1 -1
  283. package/dist/tools/search-definitions.js +11 -8
  284. package/dist/tools/search-definitions.js.map +1 -1
  285. package/dist/tools/search-files.d.ts.map +1 -1
  286. package/dist/tools/search-files.js +61 -45
  287. package/dist/tools/search-files.js.map +1 -1
  288. package/dist/tools/shared/abort.d.ts +5 -0
  289. package/dist/tools/shared/abort.d.ts.map +1 -0
  290. package/dist/tools/shared/abort.js +41 -0
  291. package/dist/tools/shared/abort.js.map +1 -0
  292. package/dist/tools/shared/file-info.d.ts +17 -0
  293. package/dist/tools/shared/file-info.d.ts.map +1 -0
  294. package/dist/tools/shared/file-info.js +40 -0
  295. package/dist/tools/shared/file-info.js.map +1 -0
  296. package/dist/tools/shared/formatting.d.ts +5 -0
  297. package/dist/tools/shared/formatting.d.ts.map +1 -1
  298. package/dist/tools/shared/formatting.js +21 -1
  299. package/dist/tools/shared/formatting.js.map +1 -1
  300. package/dist/tools/shared/read-range.d.ts +7 -0
  301. package/dist/tools/shared/read-range.d.ts.map +1 -0
  302. package/dist/tools/shared/read-range.js +22 -0
  303. package/dist/tools/shared/read-range.js.map +1 -0
  304. package/dist/tools/shared/search-formatting.d.ts.map +1 -1
  305. package/dist/tools/shared/search-formatting.js +53 -28
  306. package/dist/tools/shared/search-formatting.js.map +1 -1
  307. package/dist/tools/tool-response.d.ts +22 -0
  308. package/dist/tools/tool-response.d.ts.map +1 -1
  309. package/dist/tools/tool-response.js +30 -0
  310. package/dist/tools/tool-response.js.map +1 -1
  311. package/package.json +2 -1
@@ -26,10 +26,13 @@ export interface ListDirectoryResult {
26
26
  entries: DirectoryEntry[];
27
27
  summary: {
28
28
  totalEntries: number;
29
+ entriesScanned?: number;
30
+ entriesVisible?: number;
29
31
  totalFiles: number;
30
32
  totalDirectories: number;
31
33
  maxDepthReached: number;
32
34
  truncated: boolean;
35
+ stoppedReason?: 'maxEntries' | 'aborted';
33
36
  skippedInaccessible: number;
34
37
  symlinksNotFollowed: number;
35
38
  };
@@ -77,70 +80,6 @@ export interface SearchContentResult {
77
80
  stoppedReason?: 'maxResults' | 'maxFiles' | 'timeout';
78
81
  };
79
82
  }
80
- export interface DirectoryAnalysis {
81
- path: string;
82
- totalFiles: number;
83
- totalDirectories: number;
84
- totalSize: number;
85
- fileTypes: Record<string, number>;
86
- largestFiles: {
87
- path: string;
88
- size: number;
89
- }[];
90
- recentlyModified: {
91
- path: string;
92
- modified: Date;
93
- }[];
94
- maxDepth: number;
95
- }
96
- export interface AnalyzeDirectoryResult {
97
- analysis: DirectoryAnalysis;
98
- summary: {
99
- truncated: boolean;
100
- skippedInaccessible: number;
101
- symlinksNotFollowed: number;
102
- };
103
- }
104
- export interface TreeEntry {
105
- name: string;
106
- type: 'file' | 'directory';
107
- size?: number;
108
- children?: TreeEntry[];
109
- }
110
- export interface DirectoryTreeResult {
111
- tree: TreeEntry;
112
- summary: {
113
- totalFiles: number;
114
- totalDirectories: number;
115
- maxDepthReached: number;
116
- truncated: boolean;
117
- skippedInaccessible: number;
118
- symlinksNotFollowed: number;
119
- };
120
- }
121
- export interface MediaFileResult {
122
- path: string;
123
- mimeType: string;
124
- size: number;
125
- data: string;
126
- }
127
- export type ChecksumAlgorithm = 'md5' | 'sha1' | 'sha256' | 'sha512';
128
- export type ChecksumEncoding = 'hex' | 'base64';
129
- export interface ChecksumResult {
130
- path: string;
131
- checksum?: string;
132
- algorithm: ChecksumAlgorithm;
133
- size?: number;
134
- error?: string;
135
- }
136
- export interface ComputeChecksumsResult {
137
- results: ChecksumResult[];
138
- summary: {
139
- total: number;
140
- succeeded: number;
141
- failed: number;
142
- };
143
- }
144
83
  export interface MultipleFileInfoResult {
145
84
  path: string;
146
85
  info?: FileInfo;
@@ -155,39 +94,6 @@ export interface GetMultipleFileInfoResult {
155
94
  totalSize: number;
156
95
  };
157
96
  }
158
- export type DefinitionType = 'function' | 'class' | 'interface' | 'type' | 'enum' | 'variable';
159
- export interface SearchDefinitionsOptions {
160
- path: string;
161
- name?: string;
162
- type?: DefinitionType;
163
- caseSensitive?: boolean;
164
- maxResults?: number;
165
- excludePatterns?: string[];
166
- includeHidden?: boolean;
167
- contextLines?: number;
168
- }
169
- export interface DefinitionMatch {
170
- file: string;
171
- line: number;
172
- definitionType: DefinitionType;
173
- name: string;
174
- content: string;
175
- contextBefore?: string[];
176
- contextAfter?: string[];
177
- exported: boolean;
178
- }
179
- export interface SearchDefinitionsResult {
180
- basePath: string;
181
- searchName?: string;
182
- searchType?: DefinitionType;
183
- definitions: DefinitionMatch[];
184
- summary: {
185
- filesScanned: number;
186
- filesMatched: number;
187
- totalDefinitions: number;
188
- truncated: boolean;
189
- };
190
- }
191
97
  export declare const ErrorCode: {
192
98
  readonly E_ACCESS_DENIED: "E_ACCESS_DENIED";
193
99
  readonly E_NOT_FOUND: "E_NOT_FOUND";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,6BAA6B,EAAE,MAAM,CAAC;QACtC,aAAa,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,EAAE,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,EAAE;QACP,SAAS,EAAE,OAAO,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACrE,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,OAAO,GACP,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;CAYZ,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC"}
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":"AAoNA,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":"AA0GA,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"}
package/dist/index.js CHANGED
@@ -1,6 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import { setAllowedDirectoriesResolved } from './lib/path-validation.js';
3
3
  import { createServer, parseArgs, startServer } from './server.js';
4
+ const SHUTDOWN_TIMEOUT_MS = 5000;
5
+ let activeServer;
6
+ let shutdownStarted = false;
7
+ async function shutdown(signal) {
8
+ if (shutdownStarted)
9
+ return;
10
+ shutdownStarted = true;
11
+ const timer = setTimeout(() => {
12
+ process.exit(0);
13
+ }, SHUTDOWN_TIMEOUT_MS);
14
+ try {
15
+ if (activeServer) {
16
+ await activeServer.close();
17
+ }
18
+ }
19
+ catch (error) {
20
+ console.error(`Shutdown error (${signal}):`, error instanceof Error ? error.message : String(error));
21
+ }
22
+ finally {
23
+ clearTimeout(timer);
24
+ process.exit(0);
25
+ }
26
+ }
4
27
  async function main() {
5
28
  const { allowedDirs, allowCwd } = await parseArgs();
6
29
  if (allowedDirs.length > 0) {
@@ -11,13 +34,20 @@ async function main() {
11
34
  console.error(`No directories specified via CLI. Will use MCP Roots${allowCwd ? ' or current working directory' : ''}.`);
12
35
  }
13
36
  const server = createServer({ allowCwd, cliAllowedDirs: allowedDirs });
37
+ activeServer = server;
14
38
  await startServer(server);
15
39
  }
16
40
  process.on('SIGTERM', () => {
17
- process.exit(0);
41
+ void shutdown('SIGTERM');
18
42
  });
19
43
  process.on('SIGINT', () => {
20
- process.exit(0);
44
+ void shutdown('SIGINT');
45
+ });
46
+ process.stdin.on('end', () => {
47
+ void shutdown('stdin end');
48
+ });
49
+ process.stdin.on('close', () => {
50
+ void shutdown('stdin close');
21
51
  });
22
52
  main().catch((error) => {
23
53
  console.error('Fatal error:', error instanceof Error ? error.message : String(error));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnE,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IAEpD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,6BAA6B,CAAC,WAAW,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,uDAAuD,QAAQ,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,GAAG,CAC1G,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACvE,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CACX,cAAc,EACd,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,IAAI,YAAmC,CAAC;AACxC,IAAI,eAAe,GAAG,KAAK,CAAC;AAE5B,KAAK,UAAU,QAAQ,CAAC,MAAc;IACpC,IAAI,eAAe;QAAE,OAAO;IAC5B,eAAe,GAAG,IAAI,CAAC;IAEvB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAExB,IAAI,CAAC;QACH,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CACX,mBAAmB,MAAM,IAAI,EAC7B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;IAEpD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,6BAA6B,CAAC,WAAW,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,uDAAuD,QAAQ,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,GAAG,CAC1G,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACvE,YAAY,GAAG,MAAM,CAAC;IACtB,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;IAC3B,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IAC7B,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CACX,cAAc,EACd,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,59 +1,65 @@
1
1
  # Filesystem Context MCP Server
2
2
 
3
- > **Read-only** tools for exploring directories, searching files, and analyzing codebases via the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/).
3
+ > Read-only tools for exploring directories, searching files, and reading
4
+ > content via the Model Context Protocol (MCP).
4
5
 
5
- This server enables AI assistants to safely explore and analyze filesystem contents without modification capabilities. All operations are sandboxed to explicitly allowed directories.
6
+ This server lets assistants inspect files safely. All operations are limited to
7
+ explicitly allowed directories and never write to disk.
6
8
 
7
9
  ---
8
10
 
9
11
  ## Quick Reference
10
12
 
11
- | Goal | Tool | Key Parameters |
12
- | ------------------- | -------------------------- | --------------------------------------- |
13
- | Check access | `list_allowed_directories` | |
14
- | Project structure | `directory_tree` | `maxDepth`, `excludePatterns` |
15
- | List contents | `list_directory` | `recursive`, `sortBy` |
16
- | Directory stats | `analyze_directory` | `topN`, `excludePatterns`, `maxEntries` |
17
- | Find files | `search_files` | `pattern` (glob), `maxResults` |
18
- | Search in files | `search_content` | `pattern` (regex), `contextLines` |
19
- | Find definitions | `search_definitions` | `name`, `type`, `contextLines` |
20
- | Read file | `read_file` | `head`, `tail`, `lineStart/lineEnd` |
21
- | Read multiple files | `read_multiple_files` | `paths[]` — **preferred for 2+** |
22
- | File metadata | `get_file_info` | `path` |
23
- | Batch file metadata | `get_multiple_file_info` | `paths[]` — **preferred for 2+** |
24
- | Compute checksums | `compute_checksums` | `paths[]`, `algorithm` |
25
- | Binary/media files | `read_media_file` | `maxSize` |
13
+ | Goal | Tool | Key Parameters |
14
+ | ------------------- | -------------------------- | ----------------------------------- |
15
+ | Check access | `list_allowed_directories` | - |
16
+ | List contents | `list_directory` | `recursive`, `maxDepth`, `sortBy` |
17
+ | Find files | `search_files` | `pattern` (glob), `maxResults` |
18
+ | Search in files | `search_content` | `pattern` (regex), `contextLines` |
19
+ | Read file | `read_file` | `head`, `tail`, `lineStart/lineEnd` |
20
+ | Read multiple files | `read_multiple_files` | `paths[]` - preferred for 2+ |
21
+ | File metadata | `get_file_info` | `path` |
22
+ | Batch file metadata | `get_multiple_file_info` | `paths[]` - preferred for 2+ |
23
+
24
+ ---
25
+
26
+ ## Core Concepts
27
+
28
+ - **Allowed directories:** All tools only operate inside the allowed roots.
29
+ Run `list_allowed_directories` first to confirm scope.
30
+ - **Globs vs regex:** `search_files` uses glob patterns, `search_content` uses
31
+ regex (set `isLiteral=true` to search for exact text).
32
+ - **Symlinks:** Symlinks are never followed for security. You can request the
33
+ target path (e.g., `includeSymlinkTargets`) but traversal stays inside roots.
26
34
 
27
35
  ---
28
36
 
29
37
  ## Workflows
30
38
 
31
- ### Project Discovery
39
+ ### Project discovery
32
40
 
33
41
  ```text
34
- list_allowed_directories → directory_tree(maxDepth=3) → analyze_directory → read_multiple_files([package.json, README.md])
42
+ list_allowed_directories
43
+ list_directory(path=".", recursive=true, maxDepth=3)
44
+ read_multiple_files(["package.json", "README.md"])
35
45
  ```
36
46
 
37
- ### Find & Read Code
47
+ ### Find and read code
38
48
 
39
49
  ```text
40
- search_files(pattern="**/*.ts") → read_multiple_files([...results])
50
+ search_files(pattern="**/*.ts")
51
+ read_multiple_files([...results])
41
52
  ```
42
53
 
43
- ### Search Patterns
54
+ ### Search patterns in code
44
55
 
45
56
  ```text
46
57
  search_content(pattern="TODO|FIXME", filePattern="**/*.ts", contextLines=2)
47
58
  ```
48
59
 
49
- ### Find Code Definitions
50
-
51
- ```text
52
- search_definitions(path="src/", name="User") → Find classes/functions/types named "User"
53
- search_definitions(path="src/", type="interface") → Discover all interfaces
54
- ```
60
+ ---
55
61
 
56
- ### Common Glob Patterns
62
+ ## Common Glob Patterns
57
63
 
58
64
  | Pattern | Matches |
59
65
  | --------------------- | ----------------------------------------- |
@@ -69,185 +75,160 @@ search_definitions(path="src/", type="interface") → Discover all interfaces
69
75
 
70
76
  **Do:**
71
77
 
72
- - Use `read_multiple_files` for 2+ files (parallel, resilient)
73
- - Set `maxResults`, `maxDepth`, `maxEntries` limits
74
- - Use `excludePatterns=["node_modules", ".git", "dist"]`
75
- - Preview with `head=50` before full reads
78
+ - Use `read_multiple_files` for 2+ files (parallel, resilient).
79
+ - Set `maxResults`, `maxDepth`, and `maxEntries` limits.
80
+ - Use `excludePatterns=["node_modules/**", ".git/**", "dist/**"]`.
81
+ - Preview large files with `head=50` before full reads.
76
82
 
77
83
  **Don't:**
78
84
 
79
- - Loop `read_file` batch with `read_multiple_files`
80
- - Recursive search without `maxDepth`
81
- - Search without `maxResults` on large codebases
85
+ - Loop `read_file` for multiple files.
86
+ - Run recursive searches without `maxDepth`.
87
+ - Search without `maxResults` on large codebases.
82
88
 
83
- ## Tool Details
89
+ ---
84
90
 
85
- ### `directory_tree`
91
+ ## Tool Details
86
92
 
87
- JSON tree structure for AI parsing.
93
+ ### `list_allowed_directories`
88
94
 
89
- | Parameter | Default | Description |
90
- | ----------------- | ------- | --------------------- |
91
- | `path` | — | Directory path |
92
- | `maxDepth` | 5 | Depth limit (0-50) |
93
- | `excludePatterns` | [] | Glob patterns to skip |
94
- | `includeHidden` | false | Include dotfiles |
95
- | `includeSize` | false | Show file sizes |
96
- | `maxFiles` | — | Limit total files |
95
+ List all directories this server can access.
97
96
 
98
- ### `search_files`
97
+ | Parameter | Default | Description |
98
+ | --------- | ------- | ----------- |
99
+ | (none) | - | - |
99
100
 
100
- Find files (not directories) by glob pattern.
101
+ ---
101
102
 
102
- | Parameter | Default | Description |
103
- | ----------------- | ------- | ------------------------- |
104
- | `path` | - | Base directory |
105
- | `pattern` | - | Glob: `**/*.ts`, `src/**` |
106
- | `excludePatterns` | [] | Patterns to skip |
107
- | `maxResults` | - | Limit (up to 10,000) |
108
- | `sortBy` | "path" | `name/size/modified/path` |
109
- | `includeHidden` | false | Include dotfiles |
103
+ ### `list_directory`
110
104
 
111
- ### `search_content`
105
+ List contents of a directory with optional recursion. Returns entry name,
106
+ relative path, type, size, and modified date. Symlinks are not followed.
112
107
 
113
- Grep-like regex search in files.
114
-
115
- | Parameter | Default | Description |
116
- | --------------- | ------- | ------------------------- |
117
- | `path` | | Base directory |
118
- | `pattern` | | Regex: `TODO\|FIXME` |
119
- | `filePattern` | `**/*` | Glob filter |
120
- | `contextLines` | 0 | Lines before/after (0-10) |
121
- | `caseSensitive` | false | Case matching |
122
- | `wholeWord` | false | Word boundaries |
123
- | `isLiteral` | false | Escape regex |
124
- | `maxResults` | 100 | Limit matches |
125
- | `skipBinary` | true | Skip binary files |
126
-
127
- ### `search_definitions`
128
-
129
- Find code definitions (classes, functions, interfaces, types, enums, variables) without manual regex construction.
130
-
131
- | Parameter | Default | Description |
132
- | ----------------- | ------- | ----------------------------------------------------------------------------- |
133
- | `path` | - | Base directory to search |
134
- | `name` | - | Definition name to find |
135
- | `type` | - | Definition type: `class`, `function`, `interface`, `type`, `enum`, `variable` |
136
- | `caseSensitive` | true | Case-sensitive name matching |
137
- | `maxResults` | 100 | Limit matches |
138
- | `excludePatterns` | [] | Glob patterns to exclude |
139
- | `includeHidden` | false | Include hidden files and directories |
140
- | `contextLines` | 0 | Lines of context before/after match (0-10) |
141
-
142
- **Usage patterns:**
143
-
144
- - **Find by name:** `search_definitions(path="src/", name="UserService")` — finds class/function/type named UserService
145
- - **Discovery mode:** `search_definitions(path="src/", type="interface")` — lists all interfaces
146
- - **Combined:** `search_definitions(path="src/", name="Handler", type="class")` — finds classes named "Handler"
108
+ | Parameter | Default | Description |
109
+ | ----------------------- | ------- | ---------------------------------------- |
110
+ | `path` | - | Directory path |
111
+ | `recursive` | false | Include subdirectories |
112
+ | `excludePatterns` | [] | Glob patterns to skip |
113
+ | `pattern` | - | Glob pattern to include (relative only) |
114
+ | `sortBy` | "name" | `name/size/modified/type` |
115
+ | `maxDepth` | 10 | Depth when recursive |
116
+ | `maxEntries` | 10000 | Limit (up to 100,000) |
117
+ | `includeSymlinkTargets` | false | Include target paths for symlink entries |
147
118
 
148
- ### `read_file`
119
+ Structured output note: `entries[].relativePath` is relative to the base path.
149
120
 
150
- Read single file with line selection.
121
+ ---
151
122
 
152
- | Parameter | Default | Description |
153
- | ------------ | ------- | --------------------------------------------------- |
154
- | `path` | - | File path |
155
- | `encoding` | utf-8 | `utf-8/ascii/base64/hex/latin1` |
156
- | `maxSize` | 10MB | Size limit |
157
- | `skipBinary` | false | Reject binary files (use `read_media_file` instead) |
158
- | `head` | - | First N lines |
159
- | `tail` | - | Last N lines |
160
- | `lineStart` | - | Start line (1-indexed) |
161
- | `lineEnd` | - | End line (inclusive) |
123
+ ### `search_files`
162
124
 
163
- > ⚠️ Cannot combine `head/tail` with `lineStart/lineEnd`
125
+ Find files (not directories) using glob patterns.
126
+
127
+ | Parameter | Default | Description |
128
+ | ----------------- | -------- | ---------------------------------------- |
129
+ | `path` | - | Base directory |
130
+ | `pattern` | - | Glob: `**/*.ts`, `src/**` |
131
+ | `excludePatterns` | built-in | Patterns to skip (pass [] to disable) |
132
+ | `maxResults` | 100 | Limit (up to 10,000) |
133
+ | `sortBy` | "path" | `name/size/modified/path` |
134
+ | `maxDepth` | 10 | Maximum depth to scan |
135
+ | `maxFilesScanned` | 20000 | Maximum files to scan before stopping |
136
+ | `timeoutMs` | 30000 | Timeout in milliseconds |
137
+ | `baseNameMatch` | false | Match basename for patterns without '/' |
138
+ | `skipSymlinks` | true | Must remain true (symlink traversal off) |
139
+ | `includeHidden` | false | Include dotfiles and hidden directories |
164
140
 
165
- ### `read_multiple_files`
141
+ ---
166
142
 
167
- Parallel batch reads - failures don't block others.
143
+ ### `search_content`
168
144
 
169
- | Parameter | Default | Description |
170
- | ----------- | ------- | ------------------------------- |
171
- | `paths` | - | Array (max 100) |
172
- | `encoding` | utf-8 | Encoding for all |
173
- | `maxSize` | 10MB | Per-file limit |
174
- | `head` | - | First N lines each |
175
- | `tail` | - | Last N lines each |
176
- | `lineStart` | - | Start line (1-indexed) per file |
177
- | `lineEnd` | - | End line (inclusive) per file |
145
+ Grep-like search across file contents using regex.
146
+
147
+ | Parameter | Default | Description |
148
+ | ----------------- | -------- | ------------------------------------------ | ------ |
149
+ | `path` | - | Base directory |
150
+ | `pattern` | - | Regex: `TODO | FIXME` |
151
+ | `filePattern` | `**/*` | Glob filter for files |
152
+ | `excludePatterns` | built-in | Glob patterns to skip (pass [] to disable) |
153
+ | `contextLines` | 0 | Lines before/after match (0-10) |
154
+ | `caseSensitive` | false | Case-sensitive matching |
155
+ | `wholeWord` | false | Match whole words only |
156
+ | `isLiteral` | false | Treat pattern as literal string |
157
+ | `maxResults` | 100 | Maximum matches to return |
158
+ | `maxFileSize` | 1MB | Maximum file size to scan |
159
+ | `maxFilesScanned` | 20000 | Maximum files to scan before stopping |
160
+ | `timeoutMs` | 30000 | Timeout in milliseconds |
161
+ | `skipBinary` | true | Skip likely-binary files |
162
+ | `includeHidden` | false | Include dotfiles and hidden directories |
163
+
164
+ Note: `excludePatterns` uses a built-in list of common dependency/build
165
+ folders (e.g., `node_modules`, `dist`, `build`, `coverage`, `.git`, `.vscode`).
166
+ Pass `excludePatterns: []` to disable it.
178
167
 
179
- > ⚠️ Cannot combine `head/tail` with `lineStart/lineEnd`
168
+ ---
180
169
 
181
- ### `list_directory`
170
+ ### `read_file`
182
171
 
183
- Flat listing with metadata.
172
+ Read a single text file with optional line selection.
184
173
 
185
- | Parameter | Default | Description |
186
- | ----------------- | ------- | ------------------------- |
187
- | `path` | - | Directory path |
188
- | `recursive` | false | Include subdirs |
189
- | `excludePatterns` | [] | Patterns to skip |
190
- | `pattern` | - | Glob to include |
191
- | `sortBy` | "name" | `name/size/modified/type` |
192
- | `maxDepth` | 10 | Depth when recursive |
193
- | `maxEntries` | 10000 | Limit (up to 100,000) |
174
+ | Parameter | Default | Description |
175
+ | ------------ | ------- | ------------------------------- |
176
+ | `path` | - | File path |
177
+ | `encoding` | utf-8 | `utf-8/ascii/base64/hex/latin1` |
178
+ | `maxSize` | 10MB | Size limit |
179
+ | `skipBinary` | true | Reject binary files |
180
+ | `head` | - | First N lines |
181
+ | `tail` | - | Last N lines |
182
+ | `lineStart` | - | Start line (1-indexed) |
183
+ | `lineEnd` | - | End line (inclusive) |
194
184
 
195
- **Structured output notes:** `entries[].name` is the basename, and `entries[].relativePath` is the path relative to the listed base.
185
+ Note: `head`/`tail` cannot be combined with `lineStart`/`lineEnd`.
196
186
 
197
- ### `analyze_directory`
187
+ ---
198
188
 
199
- Statistics: counts, sizes, types, largest/recent files.
189
+ ### `read_multiple_files`
200
190
 
201
- | Parameter | Default | Description |
202
- | ----------------- | ------- | ------------------- |
203
- | `path` | - | Directory path |
204
- | `maxDepth` | 10 | Analysis depth |
205
- | `topN` | 10 | Top largest/recent |
206
- | `maxEntries` | 20000 | Max entries scanned |
207
- | `excludePatterns` | [] | Patterns to skip |
191
+ Read multiple files in parallel. Each file reports success or error.
208
192
 
209
- ### `read_media_file`
193
+ | Parameter | Default | Description |
194
+ | -------------- | ------- | ------------------------------- |
195
+ | `paths` | - | Array (max 100) |
196
+ | `encoding` | utf-8 | Encoding for all |
197
+ | `maxSize` | 10MB | Per-file limit |
198
+ | `maxTotalSize` | 100MB | Total size limit across files |
199
+ | `head` | - | First N lines each |
200
+ | `tail` | - | Last N lines each |
201
+ | `lineStart` | - | Start line (1-indexed) per file |
202
+ | `lineEnd` | - | End line (inclusive) per file |
210
203
 
211
- Binary files as base64 with MIME type.
204
+ Note: `head`/`tail` cannot be combined with `lineStart`/`lineEnd`.
212
205
 
213
- | Parameter | Default | Description |
214
- | --------- | ------- | --------------- |
215
- | `path` | — | Media file path |
216
- | `maxSize` | 50MB | Size limit |
206
+ ---
217
207
 
218
208
  ### `get_file_info`
219
209
 
220
- Detailed metadata about a file or directory.
210
+ Get metadata about a file or directory without reading contents.
221
211
 
222
212
  | Parameter | Default | Description |
223
213
  | --------- | ------- | ------------------------- |
224
- | `path` | | Path to file or directory |
214
+ | `path` | - | Path to file or directory |
225
215
 
226
- **Returns:** name, path, type, size, created, modified, accessed, permissions, isHidden, mimeType, symlinkTarget (if applicable).
216
+ Returns: name, path, type, size, created, modified, accessed, permissions,
217
+ isHidden, mimeType, symlinkTarget (if applicable).
218
+
219
+ ---
227
220
 
228
221
  ### `get_multiple_file_info`
229
222
 
230
- Batch metadata retrieval for multiple files/directories (parallel processing).
223
+ Get metadata for multiple files/directories in parallel.
231
224
 
232
225
  | Parameter | Default | Description |
233
226
  | ----------------- | ------- | --------------------------- |
234
- | `paths` | | Array of paths (max 100) |
227
+ | `paths` | - | Array of paths (max 100) |
235
228
  | `includeMimeType` | true | Include MIME type detection |
236
229
 
237
- **Returns:** Array of file info with individual success/error status, plus summary (total, succeeded, failed, totalSize).
238
-
239
- ### `compute_checksums`
240
-
241
- Compute cryptographic hashes for files using streaming (memory-efficient).
242
-
243
- | Parameter | Default | Description |
244
- | ------------- | ------- | --------------------------------------- |
245
- | `paths` | — | Array of file paths (max 50) |
246
- | `algorithm` | sha256 | Hash: `md5`, `sha1`, `sha256`, `sha512` |
247
- | `encoding` | hex | Output: `hex` or `base64` |
248
- | `maxFileSize` | 100MB | Skip files larger than this |
249
-
250
- **Returns:** Array of checksums with file sizes, plus summary. Useful for integrity checks and duplicate detection.
230
+ Returns: Array of file info with individual success/error status, plus
231
+ summary (total, succeeded, failed, totalSize).
251
232
 
252
233
  ---
253
234
 
@@ -256,19 +237,19 @@ Compute cryptographic hashes for files using streaming (memory-efficient).
256
237
  | Code | Cause | Solution |
257
238
  | --------------------- | ---------------------------- | ------------------------------------- |
258
239
  | `E_ACCESS_DENIED` | Path outside allowed dirs | Check `list_allowed_directories` |
259
- | `E_NOT_FOUND` | Path doesn't exist | Verify path with `list_directory` |
240
+ | `E_NOT_FOUND` | Path does not exist | Verify path with `list_directory` |
260
241
  | `E_NOT_FILE` | Expected file, got directory | Use `list_directory` instead |
261
242
  | `E_NOT_DIRECTORY` | Expected directory, got file | Use `read_file` instead |
262
243
  | `E_TOO_LARGE` | File exceeds size limit | Use `head/tail` or increase `maxSize` |
263
- | `E_TIMEOUT` | Operation took too long | Reduce limits |
264
- | `E_INVALID_PATTERN` | Malformed glob/regex | Check glob/regex syntax |
244
+ | `E_TIMEOUT` | Operation took too long | Reduce scope or increase limits |
245
+ | `E_INVALID_PATTERN` | Malformed glob/regex | Check pattern syntax |
265
246
  | `E_PERMISSION_DENIED` | OS-level access denied | Check file permissions |
266
247
 
267
248
  ---
268
249
 
269
250
  ## Security
270
251
 
271
- - **Read-only** no writes, deletes, or modifications
272
- - **Path validation** symlinks cannot escape allowed directories
273
- - **Binary detection** prevents accidental base64 bloat
274
- - **Input sanitization** patterns validated for ReDoS protection
252
+ - Read-only: no writes, deletes, or modifications.
253
+ - Path validation: symlinks cannot escape allowed directories.
254
+ - Binary detection: prevents accidental binary reads.
255
+ - Input sanitization: patterns validated for ReDoS protection.