@j0hanz/filesystem-context-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +369 -0
  2. package/dist/__tests__/errors.test.d.ts +2 -0
  3. package/dist/__tests__/errors.test.d.ts.map +1 -0
  4. package/dist/__tests__/errors.test.js +88 -0
  5. package/dist/__tests__/errors.test.js.map +1 -0
  6. package/dist/__tests__/file-operations.test.d.ts +2 -0
  7. package/dist/__tests__/file-operations.test.d.ts.map +1 -0
  8. package/dist/__tests__/file-operations.test.js +230 -0
  9. package/dist/__tests__/file-operations.test.js.map +1 -0
  10. package/dist/__tests__/lib/errors.test.d.ts +2 -0
  11. package/dist/__tests__/lib/errors.test.d.ts.map +1 -0
  12. package/dist/__tests__/lib/errors.test.js +156 -0
  13. package/dist/__tests__/lib/errors.test.js.map +1 -0
  14. package/dist/__tests__/lib/file-operations.test.d.ts +2 -0
  15. package/dist/__tests__/lib/file-operations.test.d.ts.map +1 -0
  16. package/dist/__tests__/lib/file-operations.test.js +417 -0
  17. package/dist/__tests__/lib/file-operations.test.js.map +1 -0
  18. package/dist/__tests__/lib/fs-helpers.test.d.ts +2 -0
  19. package/dist/__tests__/lib/fs-helpers.test.d.ts.map +1 -0
  20. package/dist/__tests__/lib/fs-helpers.test.js +183 -0
  21. package/dist/__tests__/lib/fs-helpers.test.js.map +1 -0
  22. package/dist/__tests__/lib/path-validation.test.d.ts +2 -0
  23. package/dist/__tests__/lib/path-validation.test.d.ts.map +1 -0
  24. package/dist/__tests__/lib/path-validation.test.js +103 -0
  25. package/dist/__tests__/lib/path-validation.test.js.map +1 -0
  26. package/dist/__tests__/path-validation.test.d.ts +2 -0
  27. package/dist/__tests__/path-validation.test.d.ts.map +1 -0
  28. package/dist/__tests__/path-validation.test.js +92 -0
  29. package/dist/__tests__/path-validation.test.js.map +1 -0
  30. package/dist/config/types.d.ts +222 -0
  31. package/dist/config/types.d.ts.map +1 -0
  32. package/dist/config/types.js +23 -0
  33. package/dist/config/types.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +50 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/lib/constants.d.ts +16 -0
  39. package/dist/lib/constants.d.ts.map +1 -0
  40. package/dist/lib/constants.js +335 -0
  41. package/dist/lib/constants.js.map +1 -0
  42. package/dist/lib/errors.d.ts +33 -0
  43. package/dist/lib/errors.d.ts.map +1 -0
  44. package/dist/lib/errors.js +205 -0
  45. package/dist/lib/errors.js.map +1 -0
  46. package/dist/lib/file-operations.d.ts +69 -0
  47. package/dist/lib/file-operations.d.ts.map +1 -0
  48. package/dist/lib/file-operations.js +1003 -0
  49. package/dist/lib/file-operations.js.map +1 -0
  50. package/dist/lib/formatters.d.ts +30 -0
  51. package/dist/lib/formatters.d.ts.map +1 -0
  52. package/dist/lib/formatters.js +204 -0
  53. package/dist/lib/formatters.js.map +1 -0
  54. package/dist/lib/fs-helpers.d.ts +29 -0
  55. package/dist/lib/fs-helpers.d.ts.map +1 -0
  56. package/dist/lib/fs-helpers.js +295 -0
  57. package/dist/lib/fs-helpers.js.map +1 -0
  58. package/dist/lib/path-utils.d.ts +12 -0
  59. package/dist/lib/path-utils.d.ts.map +1 -0
  60. package/dist/lib/path-utils.js +34 -0
  61. package/dist/lib/path-utils.js.map +1 -0
  62. package/dist/lib/path-validation.d.ts +31 -0
  63. package/dist/lib/path-validation.d.ts.map +1 -0
  64. package/dist/lib/path-validation.js +181 -0
  65. package/dist/lib/path-validation.js.map +1 -0
  66. package/dist/lib/roots-utils.d.ts +7 -0
  67. package/dist/lib/roots-utils.d.ts.map +1 -0
  68. package/dist/lib/roots-utils.js +39 -0
  69. package/dist/lib/roots-utils.js.map +1 -0
  70. package/dist/lib/types.d.ts +6 -0
  71. package/dist/lib/types.d.ts.map +1 -0
  72. package/dist/lib/types.js +2 -0
  73. package/dist/lib/types.js.map +1 -0
  74. package/dist/schemas/common.d.ts +41 -0
  75. package/dist/schemas/common.d.ts.map +1 -0
  76. package/dist/schemas/common.js +21 -0
  77. package/dist/schemas/common.js.map +1 -0
  78. package/dist/schemas/index.d.ts +3 -0
  79. package/dist/schemas/index.d.ts.map +1 -0
  80. package/dist/schemas/index.js +5 -0
  81. package/dist/schemas/index.js.map +1 -0
  82. package/dist/schemas/inputs.d.ts +72 -0
  83. package/dist/schemas/inputs.d.ts.map +1 -0
  84. package/dist/schemas/inputs.js +326 -0
  85. package/dist/schemas/inputs.js.map +1 -0
  86. package/dist/schemas/outputs.d.ts +476 -0
  87. package/dist/schemas/outputs.d.ts.map +1 -0
  88. package/dist/schemas/outputs.js +181 -0
  89. package/dist/schemas/outputs.js.map +1 -0
  90. package/dist/server.d.ts +5 -0
  91. package/dist/server.d.ts.map +1 -0
  92. package/dist/server.js +83 -0
  93. package/dist/server.js.map +1 -0
  94. package/dist/tools/analyze-directory.d.ts +3 -0
  95. package/dist/tools/analyze-directory.d.ts.map +1 -0
  96. package/dist/tools/analyze-directory.js +57 -0
  97. package/dist/tools/analyze-directory.js.map +1 -0
  98. package/dist/tools/directory-tree.d.ts +3 -0
  99. package/dist/tools/directory-tree.d.ts.map +1 -0
  100. package/dist/tools/directory-tree.js +47 -0
  101. package/dist/tools/directory-tree.js.map +1 -0
  102. package/dist/tools/get-file-info.d.ts +3 -0
  103. package/dist/tools/get-file-info.d.ts.map +1 -0
  104. package/dist/tools/get-file-info.js +44 -0
  105. package/dist/tools/get-file-info.js.map +1 -0
  106. package/dist/tools/index.d.ts +3 -0
  107. package/dist/tools/index.d.ts.map +1 -0
  108. package/dist/tools/index.js +23 -0
  109. package/dist/tools/index.js.map +1 -0
  110. package/dist/tools/list-allowed-dirs.d.ts +3 -0
  111. package/dist/tools/list-allowed-dirs.d.ts.map +1 -0
  112. package/dist/tools/list-allowed-dirs.js +23 -0
  113. package/dist/tools/list-allowed-dirs.js.map +1 -0
  114. package/dist/tools/list-directory.d.ts +3 -0
  115. package/dist/tools/list-directory.d.ts.map +1 -0
  116. package/dist/tools/list-directory.js +60 -0
  117. package/dist/tools/list-directory.js.map +1 -0
  118. package/dist/tools/read-file.d.ts +3 -0
  119. package/dist/tools/read-file.d.ts.map +1 -0
  120. package/dist/tools/read-file.js +55 -0
  121. package/dist/tools/read-file.js.map +1 -0
  122. package/dist/tools/read-media-file.d.ts +3 -0
  123. package/dist/tools/read-media-file.d.ts.map +1 -0
  124. package/dist/tools/read-media-file.js +48 -0
  125. package/dist/tools/read-media-file.js.map +1 -0
  126. package/dist/tools/read-multiple-files.d.ts +3 -0
  127. package/dist/tools/read-multiple-files.d.ts.map +1 -0
  128. package/dist/tools/read-multiple-files.js +53 -0
  129. package/dist/tools/read-multiple-files.js.map +1 -0
  130. package/dist/tools/search-content.d.ts +3 -0
  131. package/dist/tools/search-content.d.ts.map +1 -0
  132. package/dist/tools/search-content.js +67 -0
  133. package/dist/tools/search-content.js.map +1 -0
  134. package/dist/tools/search-files.d.ts +3 -0
  135. package/dist/tools/search-files.d.ts.map +1 -0
  136. package/dist/tools/search-files.js +51 -0
  137. package/dist/tools/search-files.js.map +1 -0
  138. package/dist/utils/index.d.ts +2 -0
  139. package/dist/utils/index.d.ts.map +1 -0
  140. package/dist/utils/index.js +2 -0
  141. package/dist/utils/index.js.map +1 -0
  142. package/dist/utils/response-helpers.d.ts +22 -0
  143. package/dist/utils/response-helpers.d.ts.map +1 -0
  144. package/dist/utils/response-helpers.js +24 -0
  145. package/dist/utils/response-helpers.js.map +1 -0
  146. package/package.json +61 -0
@@ -0,0 +1,335 @@
1
+ // Concurrency limits
2
+ export const PARALLEL_CONCURRENCY = 20;
3
+ export const DIR_TRAVERSAL_CONCURRENCY = 8;
4
+ // Timeout limits (in milliseconds)
5
+ export const REGEX_MATCH_TIMEOUT_MS = 100; // Per-line regex match timeout to prevent ReDoS hangs
6
+ // Size limits (in bytes)
7
+ export const MAX_SEARCHABLE_FILE_SIZE = 1024 * 1024; // 1MB
8
+ export const MAX_TEXT_FILE_SIZE = 10 * 1024 * 1024; // 10MB default for text files
9
+ export const MAX_MEDIA_FILE_SIZE = 50 * 1024 * 1024; // 50MB default for media files
10
+ export const MAX_LINE_CONTENT_LENGTH = 200;
11
+ export const BINARY_CHECK_BUFFER_SIZE = 512; // Increased for better accuracy
12
+ // Default limits for operations
13
+ export const DEFAULT_MAX_DEPTH = 10;
14
+ export const DEFAULT_MAX_RESULTS = 100;
15
+ export const DEFAULT_TOP_N = 10;
16
+ export const DEFAULT_TREE_DEPTH = 5;
17
+ // Known text file extensions for fast-path binary detection
18
+ export const KNOWN_TEXT_EXTENSIONS = new Set([
19
+ '.ts',
20
+ '.tsx',
21
+ '.js',
22
+ '.jsx',
23
+ '.mjs',
24
+ '.cjs',
25
+ '.json',
26
+ '.jsonc',
27
+ '.json5',
28
+ '.md',
29
+ '.mdx',
30
+ '.markdown',
31
+ '.txt',
32
+ '.text',
33
+ '.log',
34
+ '.html',
35
+ '.htm',
36
+ '.xhtml',
37
+ '.css',
38
+ '.scss',
39
+ '.sass',
40
+ '.less',
41
+ '.styl',
42
+ '.yaml',
43
+ '.yml',
44
+ '.xml',
45
+ '.xsl',
46
+ '.xslt',
47
+ '.svg',
48
+ '.sh',
49
+ '.bash',
50
+ '.zsh',
51
+ '.fish',
52
+ '.ps1',
53
+ '.psm1',
54
+ '.psd1',
55
+ '.bat',
56
+ '.cmd',
57
+ '.py',
58
+ '.pyw',
59
+ '.pyi',
60
+ '.pyx',
61
+ '.rb',
62
+ '.rake',
63
+ '.gemspec',
64
+ '.go',
65
+ '.mod',
66
+ '.sum',
67
+ '.rs',
68
+ '.c',
69
+ '.h',
70
+ '.cpp',
71
+ '.hpp',
72
+ '.cc',
73
+ '.hh',
74
+ '.cxx',
75
+ '.hxx',
76
+ '.java',
77
+ '.kt',
78
+ '.kts',
79
+ '.scala',
80
+ '.groovy',
81
+ '.gradle',
82
+ '.swift',
83
+ '.php',
84
+ '.phtml',
85
+ '.sql',
86
+ '.mysql',
87
+ '.pgsql',
88
+ '.graphql',
89
+ '.gql',
90
+ '.vue',
91
+ '.svelte',
92
+ '.astro',
93
+ '.toml',
94
+ '.ini',
95
+ '.cfg',
96
+ '.conf',
97
+ '.config',
98
+ '.env',
99
+ '.env.local',
100
+ '.env.development',
101
+ '.env.production',
102
+ '.gitignore',
103
+ '.gitattributes',
104
+ '.npmignore',
105
+ '.dockerignore',
106
+ '.editorconfig',
107
+ '.prettierrc',
108
+ '.eslintrc',
109
+ '.lock', // package-lock.json, yarn.lock, etc. are text
110
+ '.csv',
111
+ '.tsv',
112
+ '.rst',
113
+ '.asciidoc',
114
+ '.adoc',
115
+ '.tex',
116
+ '.latex',
117
+ '.bib',
118
+ '.r',
119
+ '.R',
120
+ '.rmd',
121
+ '.lua',
122
+ '.pl',
123
+ '.pm',
124
+ '.perl',
125
+ '.asm',
126
+ '.s',
127
+ '.dart',
128
+ '.elm',
129
+ '.ex',
130
+ '.exs',
131
+ '.erl',
132
+ '.hrl',
133
+ '.hs',
134
+ '.lhs',
135
+ '.clj',
136
+ '.cljs',
137
+ '.cljc',
138
+ '.edn',
139
+ '.lisp',
140
+ '.cl',
141
+ '.el',
142
+ '.ml',
143
+ '.mli',
144
+ '.fs',
145
+ '.fsi',
146
+ '.fsx',
147
+ '.nim',
148
+ '.v',
149
+ '.sv',
150
+ '.vhd',
151
+ '.vhdl',
152
+ '.proto',
153
+ '.tf',
154
+ '.tfvars',
155
+ '.hcl',
156
+ '.cmake',
157
+ '.makefile',
158
+ '.mk',
159
+ '.dockerfile',
160
+ '.containerfile',
161
+ ]);
162
+ // Known binary file extensions for fast-path binary detection
163
+ export const KNOWN_BINARY_EXTENSIONS = new Set([
164
+ // Images
165
+ '.png',
166
+ '.jpg',
167
+ '.jpeg',
168
+ '.gif',
169
+ '.webp',
170
+ '.ico',
171
+ '.bmp',
172
+ '.tiff',
173
+ '.tif',
174
+ '.psd',
175
+ '.ai',
176
+ '.eps',
177
+ '.raw',
178
+ '.cr2',
179
+ '.nef',
180
+ '.heic',
181
+ '.heif',
182
+ '.avif',
183
+ // Audio
184
+ '.mp3',
185
+ '.wav',
186
+ '.flac',
187
+ '.aac',
188
+ '.ogg',
189
+ '.wma',
190
+ '.m4a',
191
+ '.opus',
192
+ '.aiff',
193
+ // Video
194
+ '.mp4',
195
+ '.avi',
196
+ '.mov',
197
+ '.wmv',
198
+ '.flv',
199
+ '.mkv',
200
+ '.webm',
201
+ '.m4v',
202
+ '.mpeg',
203
+ '.mpg',
204
+ // Archives
205
+ '.zip',
206
+ '.tar',
207
+ '.gz',
208
+ '.bz2',
209
+ '.xz',
210
+ '.7z',
211
+ '.rar',
212
+ '.cab',
213
+ '.iso',
214
+ '.dmg',
215
+ // Executables & Libraries
216
+ '.exe',
217
+ '.dll',
218
+ '.so',
219
+ '.dylib',
220
+ '.a',
221
+ '.lib',
222
+ '.o',
223
+ '.obj',
224
+ '.app',
225
+ '.msi',
226
+ '.deb',
227
+ '.rpm',
228
+ '.apk',
229
+ '.ipa',
230
+ // Fonts
231
+ '.ttf',
232
+ '.otf',
233
+ '.woff',
234
+ '.woff2',
235
+ '.eot',
236
+ // Documents (binary formats)
237
+ '.pdf',
238
+ '.doc',
239
+ '.docx',
240
+ '.xls',
241
+ '.xlsx',
242
+ '.ppt',
243
+ '.pptx',
244
+ '.odt',
245
+ '.ods',
246
+ '.odp',
247
+ // Databases
248
+ '.sqlite',
249
+ '.sqlite3',
250
+ '.db',
251
+ '.mdb',
252
+ '.accdb',
253
+ // WebAssembly
254
+ '.wasm',
255
+ // Other binary
256
+ '.bin',
257
+ '.dat',
258
+ '.pak',
259
+ '.bundle',
260
+ '.class',
261
+ '.pyc',
262
+ '.pyo',
263
+ '.node',
264
+ '.napi',
265
+ // Source maps (can be large and not useful for text search)
266
+ '.map',
267
+ ]);
268
+ // MIME type mappings for media files
269
+ export const MIME_TYPES = {
270
+ // Images
271
+ '.png': 'image/png',
272
+ '.jpg': 'image/jpeg',
273
+ '.jpeg': 'image/jpeg',
274
+ '.gif': 'image/gif',
275
+ '.webp': 'image/webp',
276
+ '.svg': 'image/svg+xml',
277
+ '.ico': 'image/x-icon',
278
+ '.bmp': 'image/bmp',
279
+ '.tiff': 'image/tiff',
280
+ '.tif': 'image/tiff',
281
+ '.avif': 'image/avif',
282
+ '.heic': 'image/heic',
283
+ '.heif': 'image/heif',
284
+ // Audio
285
+ '.mp3': 'audio/mpeg',
286
+ '.wav': 'audio/wav',
287
+ '.ogg': 'audio/ogg',
288
+ '.flac': 'audio/flac',
289
+ '.aac': 'audio/aac',
290
+ '.m4a': 'audio/mp4',
291
+ '.wma': 'audio/x-ms-wma',
292
+ '.opus': 'audio/opus',
293
+ // Video
294
+ '.mp4': 'video/mp4',
295
+ '.webm': 'video/webm',
296
+ '.avi': 'video/x-msvideo',
297
+ '.mov': 'video/quicktime',
298
+ '.wmv': 'video/x-ms-wmv',
299
+ '.mkv': 'video/x-matroska',
300
+ '.flv': 'video/x-flv',
301
+ // Documents
302
+ '.pdf': 'application/pdf',
303
+ // Common text (best-effort)
304
+ '.txt': 'text/plain',
305
+ '.log': 'text/plain',
306
+ '.md': 'text/markdown',
307
+ '.markdown': 'text/markdown',
308
+ '.json': 'application/json',
309
+ '.jsonc': 'application/json',
310
+ '.xml': 'application/xml',
311
+ '.yaml': 'text/yaml',
312
+ '.yml': 'text/yaml',
313
+ '.html': 'text/html',
314
+ '.htm': 'text/html',
315
+ '.css': 'text/css',
316
+ '.js': 'text/javascript',
317
+ '.mjs': 'text/javascript',
318
+ '.cjs': 'text/javascript',
319
+ '.ts': 'text/typescript',
320
+ '.tsx': 'text/typescript',
321
+ // Archives
322
+ '.zip': 'application/zip',
323
+ '.tar': 'application/x-tar',
324
+ '.gz': 'application/gzip',
325
+ '.7z': 'application/x-7z-compressed',
326
+ '.rar': 'application/vnd.rar',
327
+ // Fonts
328
+ '.ttf': 'font/ttf',
329
+ '.otf': 'font/otf',
330
+ '.woff': 'font/woff',
331
+ '.woff2': 'font/woff2',
332
+ // Other
333
+ '.wasm': 'application/wasm',
334
+ };
335
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Structured error handling utilities for consistent error responses
3
+ */
4
+ import { type DetailedError, ErrorCode, type ErrorResponse } from '../config/types.js';
5
+ export { ErrorCode };
6
+ export declare class McpError extends Error {
7
+ code: ErrorCode;
8
+ path?: string | undefined;
9
+ details?: Record<string, unknown> | undefined;
10
+ constructor(code: ErrorCode, message: string, path?: string | undefined, details?: Record<string, unknown> | undefined, cause?: unknown);
11
+ /**
12
+ * Create an McpError from an existing error with proper cause chaining
13
+ */
14
+ static fromError(code: ErrorCode, message: string, originalError: unknown, path?: string, details?: Record<string, unknown>): McpError;
15
+ }
16
+ /**
17
+ * Classify an error into an appropriate error code based on message patterns and Node.js error codes
18
+ */
19
+ export declare function classifyError(error: unknown): ErrorCode;
20
+ /**
21
+ * Create a detailed error object with suggestions
22
+ */
23
+ export declare function createDetailedError(error: unknown, path?: string, additionalDetails?: Record<string, unknown>): DetailedError;
24
+ /**
25
+ * Format a detailed error for display
26
+ */
27
+ export declare function formatDetailedError(error: DetailedError): string;
28
+ /**
29
+ * Get suggestion for an error code
30
+ */
31
+ export declare function getSuggestion(code: ErrorCode): string;
32
+ export declare function createErrorResponse(error: unknown, defaultCode: ErrorCode, path?: string): ErrorResponse;
33
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,KAAK,aAAa,EAClB,SAAS,EACT,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,qBAAa,QAAS,SAAQ,KAAK;IAExB,IAAI,EAAE,SAAS;IAEf,IAAI,CAAC,EAAE,MAAM;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjC,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA,EACxC,KAAK,CAAC,EAAE,OAAO;IAQjB;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,QAAQ;CAQZ;AAkCD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAmHvD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,MAAM,EACb,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,aAAa,CAmBf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAYhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAErD;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,SAAS,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAoBf"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Structured error handling utilities for consistent error responses
3
+ */
4
+ import { ErrorCode, } from '../config/types.js';
5
+ // Re-export ErrorCode from centralized location
6
+ export { ErrorCode };
7
+ export class McpError extends Error {
8
+ code;
9
+ path;
10
+ details;
11
+ constructor(code, message, path, details, cause) {
12
+ super(message, { cause });
13
+ this.code = code;
14
+ this.path = path;
15
+ this.details = details;
16
+ this.name = 'McpError';
17
+ // Ensure proper prototype chain for instanceof checks
18
+ Object.setPrototypeOf(this, McpError.prototype);
19
+ }
20
+ /**
21
+ * Create an McpError from an existing error with proper cause chaining
22
+ */
23
+ static fromError(code, message, originalError, path, details) {
24
+ const mcpError = new McpError(code, message, path, details, originalError);
25
+ // Preserve stack trace if available
26
+ if (originalError instanceof Error && originalError.stack) {
27
+ mcpError.stack = `${String(mcpError.stack)}\nCaused by: ${originalError.stack}`;
28
+ }
29
+ return mcpError;
30
+ }
31
+ }
32
+ /**
33
+ * Mapping of error codes to actionable suggestions for users
34
+ */
35
+ const ERROR_SUGGESTIONS = {
36
+ [ErrorCode.E_ACCESS_DENIED]: 'Check that the path is within an allowed directory. Use list_allowed_directories to see available paths.',
37
+ [ErrorCode.E_NOT_FOUND]: 'Verify the path exists. Use list_directory to explore available files and directories.',
38
+ [ErrorCode.E_NOT_FILE]: 'The path points to a directory or other non-file. Use list_directory to explore its contents.',
39
+ [ErrorCode.E_NOT_DIRECTORY]: 'The path points to a file, not a directory. Use read_file to read file contents.',
40
+ [ErrorCode.E_TOO_LARGE]: 'The file exceeds the size limit. Use head or tail parameters to read partial content, or increase maxSize.',
41
+ [ErrorCode.E_BINARY_FILE]: 'This appears to be a binary file. Use read_media_file for images/audio, or set skipBinary=false to include.',
42
+ [ErrorCode.E_TIMEOUT]: 'The operation timed out. Try with a smaller scope, fewer files, or increase timeoutMs.',
43
+ [ErrorCode.E_INVALID_PATTERN]: 'The glob or regex pattern is invalid. Check syntax and escape special characters.',
44
+ [ErrorCode.E_INVALID_INPUT]: 'One or more input parameters are invalid. Check the tool documentation for correct usage.',
45
+ [ErrorCode.E_PERMISSION_DENIED]: 'Permission denied by the operating system. Check file permissions.',
46
+ [ErrorCode.E_SYMLINK_NOT_ALLOWED]: 'Symbolic links that escape allowed directories are not permitted for security reasons.',
47
+ [ErrorCode.E_PATH_TRAVERSAL]: 'Path traversal attempts (../) that escape allowed directories are not permitted.',
48
+ [ErrorCode.E_UNKNOWN]: 'An unexpected error occurred. Check the error message for details.',
49
+ };
50
+ /**
51
+ * Classify an error into an appropriate error code based on message patterns and Node.js error codes
52
+ */
53
+ export function classifyError(error) {
54
+ if (error instanceof McpError) {
55
+ return error.code;
56
+ }
57
+ // Extract Node.js error code if available
58
+ const nodeErrorCode = error instanceof Error && 'code' in error
59
+ ? error.code
60
+ : undefined;
61
+ // Classify by Node.js error code first (most reliable)
62
+ if (nodeErrorCode) {
63
+ switch (nodeErrorCode) {
64
+ case 'ENOENT':
65
+ return ErrorCode.E_NOT_FOUND;
66
+ case 'EACCES':
67
+ case 'EPERM':
68
+ return ErrorCode.E_PERMISSION_DENIED;
69
+ case 'ENOTDIR':
70
+ return ErrorCode.E_NOT_DIRECTORY;
71
+ case 'EISDIR':
72
+ return ErrorCode.E_NOT_FILE;
73
+ case 'ELOOP':
74
+ return ErrorCode.E_SYMLINK_NOT_ALLOWED;
75
+ case 'ENAMETOOLONG':
76
+ return ErrorCode.E_INVALID_INPUT;
77
+ case 'ETIMEDOUT':
78
+ return ErrorCode.E_TIMEOUT;
79
+ case 'EMFILE':
80
+ case 'ENFILE':
81
+ // Too many open files - treat as timeout/resource exhaustion
82
+ return ErrorCode.E_TIMEOUT;
83
+ case 'EBUSY':
84
+ return ErrorCode.E_PERMISSION_DENIED;
85
+ case 'ENOTEMPTY':
86
+ return ErrorCode.E_NOT_DIRECTORY;
87
+ }
88
+ }
89
+ const message = error instanceof Error ? error.message : String(error);
90
+ const lowerMessage = message.toLowerCase();
91
+ if (lowerMessage.includes('not within allowed') ||
92
+ lowerMessage.includes('access denied') ||
93
+ lowerMessage.includes('outside allowed')) {
94
+ return ErrorCode.E_ACCESS_DENIED;
95
+ }
96
+ if (lowerMessage.includes('enoent') ||
97
+ lowerMessage.includes('not found') ||
98
+ lowerMessage.includes('does not exist') ||
99
+ lowerMessage.includes('no such file')) {
100
+ return ErrorCode.E_NOT_FOUND;
101
+ }
102
+ if (lowerMessage.includes('not a file') ||
103
+ lowerMessage.includes('is a directory') ||
104
+ lowerMessage.includes('eisdir')) {
105
+ return ErrorCode.E_NOT_FILE;
106
+ }
107
+ if (lowerMessage.includes('not a directory') ||
108
+ lowerMessage.includes('enotdir')) {
109
+ return ErrorCode.E_NOT_DIRECTORY;
110
+ }
111
+ if (lowerMessage.includes('too large') ||
112
+ lowerMessage.includes('exceeds') ||
113
+ lowerMessage.includes('file size')) {
114
+ return ErrorCode.E_TOO_LARGE;
115
+ }
116
+ if (lowerMessage.includes('binary')) {
117
+ return ErrorCode.E_BINARY_FILE;
118
+ }
119
+ if (lowerMessage.includes('timeout') || lowerMessage.includes('etimedout')) {
120
+ return ErrorCode.E_TIMEOUT;
121
+ }
122
+ if (lowerMessage.includes('invalid') &&
123
+ (lowerMessage.includes('pattern') ||
124
+ lowerMessage.includes('regex') ||
125
+ lowerMessage.includes('regexp') ||
126
+ lowerMessage.includes('glob'))) {
127
+ return ErrorCode.E_INVALID_PATTERN;
128
+ }
129
+ if (lowerMessage.includes('invalid') ||
130
+ lowerMessage.includes('cannot specify multiple') ||
131
+ lowerMessage.includes('must be')) {
132
+ return ErrorCode.E_INVALID_INPUT;
133
+ }
134
+ if (lowerMessage.includes('eacces') ||
135
+ lowerMessage.includes('eperm') ||
136
+ lowerMessage.includes('permission')) {
137
+ return ErrorCode.E_PERMISSION_DENIED;
138
+ }
139
+ if (lowerMessage.includes('symlink') || lowerMessage.includes('eloop')) {
140
+ return ErrorCode.E_SYMLINK_NOT_ALLOWED;
141
+ }
142
+ if (lowerMessage.includes('traversal')) {
143
+ return ErrorCode.E_PATH_TRAVERSAL;
144
+ }
145
+ return ErrorCode.E_UNKNOWN;
146
+ }
147
+ /**
148
+ * Create a detailed error object with suggestions
149
+ */
150
+ export function createDetailedError(error, path, additionalDetails) {
151
+ const message = error instanceof Error ? error.message : String(error);
152
+ const code = classifyError(error);
153
+ const suggestion = ERROR_SUGGESTIONS[code];
154
+ const effectivePath = path ?? (error instanceof McpError ? error.path : undefined);
155
+ const mergedDetails = {
156
+ ...(error instanceof McpError ? error.details : undefined),
157
+ ...(additionalDetails ?? undefined),
158
+ };
159
+ return {
160
+ code,
161
+ message,
162
+ path: effectivePath,
163
+ suggestion,
164
+ details: Object.keys(mergedDetails).length > 0 ? mergedDetails : undefined,
165
+ };
166
+ }
167
+ /**
168
+ * Format a detailed error for display
169
+ */
170
+ export function formatDetailedError(error) {
171
+ const lines = [`Error [${error.code}]: ${error.message}`];
172
+ if (error.path) {
173
+ lines.push(`Path: ${error.path}`);
174
+ }
175
+ if (error.suggestion) {
176
+ lines.push(`Suggestion: ${error.suggestion}`);
177
+ }
178
+ return lines.join('\n');
179
+ }
180
+ /**
181
+ * Get suggestion for an error code
182
+ */
183
+ export function getSuggestion(code) {
184
+ return ERROR_SUGGESTIONS[code];
185
+ }
186
+ export function createErrorResponse(error, defaultCode, path) {
187
+ const detailed = createDetailedError(error, path);
188
+ // Use more specific code if classified, otherwise use default
189
+ const finalCode = detailed.code === ErrorCode.E_UNKNOWN ? defaultCode : detailed.code;
190
+ detailed.code = finalCode;
191
+ return {
192
+ content: [{ type: 'text', text: formatDetailedError(detailed) }],
193
+ structuredContent: {
194
+ ok: false,
195
+ error: {
196
+ code: detailed.code,
197
+ message: detailed.message,
198
+ path: detailed.path,
199
+ suggestion: detailed.suggestion,
200
+ },
201
+ },
202
+ isError: true,
203
+ };
204
+ }
205
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { AnalyzeDirectoryResult, DirectoryTreeResult, FileInfo, ListDirectoryResult, MediaFileResult, SearchContentResult, SearchFilesResult } from '../config/types.js';
2
+ import { readFile } from './fs-helpers.js';
3
+ export declare function getFileInfo(filePath: string): Promise<FileInfo>;
4
+ export declare function listDirectory(dirPath: string, options?: {
5
+ recursive?: boolean;
6
+ includeHidden?: boolean;
7
+ maxDepth?: number;
8
+ maxEntries?: number;
9
+ sortBy?: 'name' | 'size' | 'modified' | 'type';
10
+ includeSymlinkTargets?: boolean;
11
+ }): Promise<ListDirectoryResult>;
12
+ export declare function searchFiles(basePath: string, pattern: string, excludePatterns?: string[], options?: {
13
+ maxResults?: number;
14
+ sortBy?: 'name' | 'size' | 'modified' | 'path';
15
+ maxDepth?: number;
16
+ }): Promise<SearchFilesResult>;
17
+ export { readFile };
18
+ /**
19
+ * Read multiple files in parallel.
20
+ * Individual file errors don't fail the entire operation.
21
+ */
22
+ export declare function readMultipleFiles(filePaths: string[], options?: {
23
+ encoding?: BufferEncoding;
24
+ maxSize?: number;
25
+ head?: number;
26
+ tail?: number;
27
+ }): Promise<{
28
+ path: string;
29
+ content?: string;
30
+ error?: string;
31
+ }[]>;
32
+ export declare function searchContent(basePath: string, searchPattern: string, options?: {
33
+ filePattern?: string;
34
+ excludePatterns?: string[];
35
+ caseSensitive?: boolean;
36
+ maxResults?: number;
37
+ maxFileSize?: number;
38
+ maxFilesScanned?: number;
39
+ timeoutMs?: number;
40
+ skipBinary?: boolean;
41
+ contextLines?: number;
42
+ wholeWord?: boolean;
43
+ isLiteral?: boolean;
44
+ }): Promise<SearchContentResult>;
45
+ export declare function analyzeDirectory(dirPath: string, options?: {
46
+ maxDepth?: number;
47
+ topN?: number;
48
+ excludePatterns?: string[];
49
+ includeHidden?: boolean;
50
+ }): Promise<AnalyzeDirectoryResult>;
51
+ /**
52
+ * Build a JSON tree structure of a directory.
53
+ * More efficient for AI parsing than flat file lists.
54
+ */
55
+ export declare function getDirectoryTree(dirPath: string, options?: {
56
+ maxDepth?: number;
57
+ excludePatterns?: string[];
58
+ includeHidden?: boolean;
59
+ includeSize?: boolean;
60
+ maxFiles?: number;
61
+ }): Promise<DirectoryTreeResult>;
62
+ /**
63
+ * Read a media/binary file and return as base64.
64
+ * Useful for images, audio, and other binary content.
65
+ */
66
+ export declare function readMediaFile(filePath: string, options?: {
67
+ maxSize?: number;
68
+ }): Promise<MediaFileResult>;
69
+ //# sourceMappingURL=file-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-operations.d.ts","sourceRoot":"","sources":["../../src/lib/file-operations.ts"],"names":[],"mappings":"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"}