@j0hanz/filesystem-context-mcp 1.0.1 → 1.0.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 (79) hide show
  1. package/README.md +571 -532
  2. package/dist/__tests__/lib/errors.test.js +36 -1
  3. package/dist/__tests__/lib/errors.test.js.map +1 -1
  4. package/dist/__tests__/lib/file-operations.test.js +1 -1
  5. package/dist/__tests__/lib/file-operations.test.js.map +1 -1
  6. package/dist/__tests__/lib/formatters.test.d.ts +2 -0
  7. package/dist/__tests__/lib/formatters.test.d.ts.map +1 -0
  8. package/dist/__tests__/lib/formatters.test.js +251 -0
  9. package/dist/__tests__/lib/formatters.test.js.map +1 -0
  10. package/dist/__tests__/lib/image-parsing.test.d.ts +2 -0
  11. package/dist/__tests__/lib/image-parsing.test.d.ts.map +1 -0
  12. package/dist/__tests__/lib/image-parsing.test.js +265 -0
  13. package/dist/__tests__/lib/image-parsing.test.js.map +1 -0
  14. package/dist/__tests__/schemas/validators.test.d.ts +2 -0
  15. package/dist/__tests__/schemas/validators.test.d.ts.map +1 -0
  16. package/dist/__tests__/schemas/validators.test.js +142 -0
  17. package/dist/__tests__/schemas/validators.test.js.map +1 -0
  18. package/dist/config/types.d.ts +29 -3
  19. package/dist/config/types.d.ts.map +1 -1
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/index.js +5 -12
  22. package/dist/index.js.map +1 -1
  23. package/dist/lib/constants.d.ts +8 -0
  24. package/dist/lib/constants.d.ts.map +1 -1
  25. package/dist/lib/constants.js +10 -0
  26. package/dist/lib/constants.js.map +1 -1
  27. package/dist/lib/errors.d.ts +2 -6
  28. package/dist/lib/errors.d.ts.map +1 -1
  29. package/dist/lib/errors.js +59 -58
  30. package/dist/lib/errors.js.map +1 -1
  31. package/dist/lib/file-operations.d.ts +0 -12
  32. package/dist/lib/file-operations.d.ts.map +1 -1
  33. package/dist/lib/file-operations.js +70 -207
  34. package/dist/lib/file-operations.js.map +1 -1
  35. package/dist/lib/fs-helpers.d.ts.map +1 -1
  36. package/dist/lib/fs-helpers.js +50 -11
  37. package/dist/lib/fs-helpers.js.map +1 -1
  38. package/dist/lib/image-parsing.d.ts +8 -0
  39. package/dist/lib/image-parsing.d.ts.map +1 -0
  40. package/dist/lib/image-parsing.js +119 -0
  41. package/dist/lib/image-parsing.js.map +1 -0
  42. package/dist/lib/path-validation.d.ts.map +1 -1
  43. package/dist/lib/path-validation.js +1 -4
  44. package/dist/lib/path-validation.js.map +1 -1
  45. package/dist/schemas/index.d.ts +1 -0
  46. package/dist/schemas/index.d.ts.map +1 -1
  47. package/dist/schemas/index.js +2 -0
  48. package/dist/schemas/index.js.map +1 -1
  49. package/dist/schemas/inputs.d.ts.map +1 -1
  50. package/dist/schemas/inputs.js +9 -4
  51. package/dist/schemas/inputs.js.map +1 -1
  52. package/dist/schemas/outputs.d.ts +12 -9
  53. package/dist/schemas/outputs.d.ts.map +1 -1
  54. package/dist/schemas/outputs.js +10 -3
  55. package/dist/schemas/outputs.js.map +1 -1
  56. package/dist/schemas/validators.d.ts +12 -0
  57. package/dist/schemas/validators.d.ts.map +1 -0
  58. package/dist/schemas/validators.js +35 -0
  59. package/dist/schemas/validators.js.map +1 -0
  60. package/dist/server.d.ts +3 -2
  61. package/dist/server.d.ts.map +1 -1
  62. package/dist/server.js +26 -15
  63. package/dist/server.js.map +1 -1
  64. package/dist/tools/analyze-directory.js +1 -1
  65. package/dist/tools/analyze-directory.js.map +1 -1
  66. package/dist/tools/directory-tree.js +1 -1
  67. package/dist/tools/directory-tree.js.map +1 -1
  68. package/dist/tools/list-directory.js +1 -1
  69. package/dist/tools/list-directory.js.map +1 -1
  70. package/dist/tools/read-file.d.ts.map +1 -1
  71. package/dist/tools/read-file.js +3 -0
  72. package/dist/tools/read-file.js.map +1 -1
  73. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  74. package/dist/tools/read-multiple-files.js +3 -0
  75. package/dist/tools/read-multiple-files.js.map +1 -1
  76. package/dist/tools/search-content.d.ts.map +1 -1
  77. package/dist/tools/search-content.js +4 -3
  78. package/dist/tools/search-content.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,265 @@
1
+ /**
2
+ * Tests for image metadata parsing in readMediaFile
3
+ */
4
+ import * as fs from 'node:fs/promises';
5
+ import * as os from 'node:os';
6
+ import * as path from 'node:path';
7
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
8
+ import { readMediaFile } from '../../lib/file-operations.js';
9
+ import { normalizePath } from '../../lib/path-utils.js';
10
+ import { setAllowedDirectories } from '../../lib/path-validation.js';
11
+ describe('image parsing', () => {
12
+ let testDir;
13
+ // Test image generators - create minimal valid images
14
+ const createMinimalPng = () => {
15
+ // Minimal 1x1 transparent PNG
16
+ return Buffer.from([
17
+ 0x89,
18
+ 0x50,
19
+ 0x4e,
20
+ 0x47,
21
+ 0x0d,
22
+ 0x0a,
23
+ 0x1a,
24
+ 0x0a, // PNG signature
25
+ 0x00,
26
+ 0x00,
27
+ 0x00,
28
+ 0x0d, // IHDR length
29
+ 0x49,
30
+ 0x48,
31
+ 0x44,
32
+ 0x52, // 'IHDR'
33
+ 0x00,
34
+ 0x00,
35
+ 0x00,
36
+ 0x01, // width: 1
37
+ 0x00,
38
+ 0x00,
39
+ 0x00,
40
+ 0x01, // height: 1
41
+ 0x08,
42
+ 0x06, // bit depth: 8, color type: RGBA
43
+ 0x00,
44
+ 0x00,
45
+ 0x00, // compression, filter, interlace
46
+ 0x1f,
47
+ 0x15,
48
+ 0xc4,
49
+ 0x89, // CRC
50
+ 0x00,
51
+ 0x00,
52
+ 0x00,
53
+ 0x0a, // IDAT length
54
+ 0x49,
55
+ 0x44,
56
+ 0x41,
57
+ 0x54, // 'IDAT'
58
+ 0x78,
59
+ 0x9c,
60
+ 0x63,
61
+ 0x00,
62
+ 0x01,
63
+ 0x00,
64
+ 0x00,
65
+ 0x05,
66
+ 0x00,
67
+ 0x01, // compressed data
68
+ 0x0d,
69
+ 0x0a,
70
+ 0x2d,
71
+ 0xb4, // CRC
72
+ 0x00,
73
+ 0x00,
74
+ 0x00,
75
+ 0x00, // IEND length
76
+ 0x49,
77
+ 0x45,
78
+ 0x4e,
79
+ 0x44, // 'IEND'
80
+ 0xae,
81
+ 0x42,
82
+ 0x60,
83
+ 0x82, // CRC
84
+ ]);
85
+ };
86
+ const createMinimalJpeg = (width, height) => {
87
+ // Minimal JPEG with SOF0 frame containing dimensions
88
+ const wHi = (width >> 8) & 0xff;
89
+ const wLo = width & 0xff;
90
+ const hHi = (height >> 8) & 0xff;
91
+ const hLo = height & 0xff;
92
+ return Buffer.from([
93
+ 0xff,
94
+ 0xd8, // SOI
95
+ 0xff,
96
+ 0xe0, // APP0
97
+ 0x00,
98
+ 0x10, // length
99
+ 0x4a,
100
+ 0x46,
101
+ 0x49,
102
+ 0x46,
103
+ 0x00, // 'JFIF\0'
104
+ 0x01,
105
+ 0x01, // version
106
+ 0x00, // aspect ratio units
107
+ 0x00,
108
+ 0x01, // X density
109
+ 0x00,
110
+ 0x01, // Y density
111
+ 0x00,
112
+ 0x00, // thumbnail dimensions
113
+ 0xff,
114
+ 0xc0, // SOF0 (baseline)
115
+ 0x00,
116
+ 0x0b, // length
117
+ 0x08, // precision
118
+ hHi,
119
+ hLo, // height
120
+ wHi,
121
+ wLo, // width
122
+ 0x01, // components
123
+ 0x01,
124
+ 0x11,
125
+ 0x00, // component data
126
+ 0xff,
127
+ 0xd9, // EOI
128
+ ]);
129
+ };
130
+ const createMinimalGif = (width, height) => {
131
+ // Minimal GIF89a
132
+ const wLo = width & 0xff;
133
+ const wHi = (width >> 8) & 0xff;
134
+ const hLo = height & 0xff;
135
+ const hHi = (height >> 8) & 0xff;
136
+ return Buffer.from([
137
+ 0x47,
138
+ 0x49,
139
+ 0x46,
140
+ 0x38,
141
+ 0x39,
142
+ 0x61, // GIF89a
143
+ wLo,
144
+ wHi, // width
145
+ hLo,
146
+ hHi, // height
147
+ 0x00, // packed byte
148
+ 0x00, // background color
149
+ 0x00, // pixel aspect ratio
150
+ 0x3b, // trailer
151
+ ]);
152
+ };
153
+ const createMinimalBmp = (width, height) => {
154
+ // Minimal BMP header
155
+ const wBytes = Buffer.alloc(4);
156
+ const hBytes = Buffer.alloc(4);
157
+ wBytes.writeInt32LE(width, 0);
158
+ hBytes.writeInt32LE(height, 0);
159
+ return Buffer.concat([
160
+ Buffer.from([0x42, 0x4d]), // 'BM'
161
+ Buffer.alloc(4), // file size (placeholder)
162
+ Buffer.alloc(4), // reserved
163
+ Buffer.from([0x36, 0x00, 0x00, 0x00]), // pixel offset
164
+ Buffer.from([0x28, 0x00, 0x00, 0x00]), // DIB header size
165
+ wBytes, // width
166
+ hBytes, // height
167
+ Buffer.from([0x01, 0x00]), // planes
168
+ Buffer.from([0x18, 0x00]), // bits per pixel
169
+ Buffer.alloc(24), // rest of header
170
+ ]);
171
+ };
172
+ const createMinimalWebp = (width, height) => {
173
+ // Minimal VP8L WebP (lossless)
174
+ // This creates a valid WebP header with VP8L chunk
175
+ // Layout: RIFF[4] + size[4] + WEBP[4] + VP8L[4] + chunkSize[4] + signature[1] + packed[4]
176
+ const wMinus1 = width - 1;
177
+ const hMinus1 = height - 1;
178
+ // VP8L packed bits at offset 21: 14-bit width, 14-bit height
179
+ const packed = (wMinus1 & 0x3fff) | ((hMinus1 & 0x3fff) << 14);
180
+ const signature = 0x2f; // VP8L signature byte
181
+ // VP8L chunk data: signature byte + 4-byte packed dimensions
182
+ const vp8lData = Buffer.alloc(5);
183
+ vp8lData[0] = signature;
184
+ vp8lData.writeUInt32LE(packed, 1);
185
+ // Build the complete WebP file
186
+ const buffer = Buffer.alloc(30);
187
+ buffer.write('RIFF', 0);
188
+ buffer.writeUInt32LE(22, 4); // File size - 8
189
+ buffer.write('WEBP', 8);
190
+ buffer.write('VP8L', 12);
191
+ buffer.writeUInt32LE(5, 16); // VP8L chunk size
192
+ vp8lData.copy(buffer, 20);
193
+ return buffer;
194
+ };
195
+ beforeAll(async () => {
196
+ testDir = await fs.mkdtemp(path.join(os.tmpdir(), 'mcp-img-test-'));
197
+ setAllowedDirectories([normalizePath(testDir)]);
198
+ // Create test images
199
+ await fs.writeFile(path.join(testDir, 'test.png'), createMinimalPng());
200
+ await fs.writeFile(path.join(testDir, 'test.jpg'), createMinimalJpeg(320, 240));
201
+ await fs.writeFile(path.join(testDir, 'test.gif'), createMinimalGif(100, 50));
202
+ await fs.writeFile(path.join(testDir, 'test.bmp'), createMinimalBmp(640, 480));
203
+ await fs.writeFile(path.join(testDir, 'test.webp'), createMinimalWebp(200, 150));
204
+ // Create a corrupt image (PNG signature but invalid data)
205
+ await fs.writeFile(path.join(testDir, 'corrupt.png'), Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00]));
206
+ });
207
+ afterAll(async () => {
208
+ await fs.rm(testDir, { recursive: true, force: true });
209
+ });
210
+ describe('PNG parsing', () => {
211
+ it('should parse PNG dimensions correctly', async () => {
212
+ const result = await readMediaFile(path.join(testDir, 'test.png'));
213
+ expect(result.mimeType).toBe('image/png');
214
+ expect(result.width).toBe(1);
215
+ expect(result.height).toBe(1);
216
+ expect(result.data).toBeDefined();
217
+ });
218
+ });
219
+ describe('JPEG parsing', () => {
220
+ it('should parse JPEG dimensions correctly', async () => {
221
+ const result = await readMediaFile(path.join(testDir, 'test.jpg'));
222
+ expect(result.mimeType).toBe('image/jpeg');
223
+ expect(result.width).toBe(320);
224
+ expect(result.height).toBe(240);
225
+ expect(result.data).toBeDefined();
226
+ });
227
+ });
228
+ describe('GIF parsing', () => {
229
+ it('should parse GIF dimensions correctly', async () => {
230
+ const result = await readMediaFile(path.join(testDir, 'test.gif'));
231
+ expect(result.mimeType).toBe('image/gif');
232
+ expect(result.width).toBe(100);
233
+ expect(result.height).toBe(50);
234
+ expect(result.data).toBeDefined();
235
+ });
236
+ });
237
+ describe('BMP parsing', () => {
238
+ it('should parse BMP dimensions correctly', async () => {
239
+ const result = await readMediaFile(path.join(testDir, 'test.bmp'));
240
+ expect(result.mimeType).toBe('image/bmp');
241
+ expect(result.width).toBe(640);
242
+ expect(result.height).toBe(480);
243
+ expect(result.data).toBeDefined();
244
+ });
245
+ });
246
+ describe('WebP parsing', () => {
247
+ it('should parse WebP dimensions correctly', async () => {
248
+ const result = await readMediaFile(path.join(testDir, 'test.webp'));
249
+ expect(result.mimeType).toBe('image/webp');
250
+ expect(result.width).toBe(200);
251
+ expect(result.height).toBe(150);
252
+ expect(result.data).toBeDefined();
253
+ });
254
+ });
255
+ describe('corrupt image handling', () => {
256
+ it('should handle corrupt PNG gracefully (no dimensions)', async () => {
257
+ const result = await readMediaFile(path.join(testDir, 'corrupt.png'));
258
+ expect(result.mimeType).toBe('image/png');
259
+ // Corrupt images should not throw but may not have dimensions
260
+ expect(result.data).toBeDefined();
261
+ // Width/height may be undefined or 0 for corrupt images
262
+ });
263
+ });
264
+ });
265
+ //# sourceMappingURL=image-parsing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-parsing.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/image-parsing.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validators.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/schemas/validators.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,142 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ErrorCode, McpError } from '../../lib/errors.js';
3
+ import { validateHeadTail, validateLineRange, } from '../../schemas/validators.js';
4
+ describe('validateLineRange', () => {
5
+ it('should accept valid lineRange with both lineStart and lineEnd', () => {
6
+ expect(() => {
7
+ validateLineRange({ lineStart: 1, lineEnd: 10, path: '/test/file.txt' });
8
+ }).not.toThrow();
9
+ });
10
+ it('should accept when no line options are specified', () => {
11
+ expect(() => {
12
+ validateLineRange({ path: '/test/file.txt' });
13
+ }).not.toThrow();
14
+ });
15
+ it('should accept head option alone', () => {
16
+ expect(() => {
17
+ validateLineRange({ head: 10, path: '/test/file.txt' });
18
+ }).not.toThrow();
19
+ });
20
+ it('should accept tail option alone', () => {
21
+ expect(() => {
22
+ validateLineRange({ tail: 10, path: '/test/file.txt' });
23
+ }).not.toThrow();
24
+ });
25
+ it('should reject lineStart without lineEnd', () => {
26
+ try {
27
+ validateLineRange({ lineStart: 5, path: '/test/file.txt' });
28
+ expect.fail('Expected McpError to be thrown');
29
+ }
30
+ catch (error) {
31
+ expect(error).toBeInstanceOf(McpError);
32
+ const mcpError = error;
33
+ expect(mcpError.code).toBe(ErrorCode.E_INVALID_INPUT);
34
+ expect(mcpError.message).toContain('lineStart requires lineEnd');
35
+ }
36
+ });
37
+ it('should reject lineEnd without lineStart', () => {
38
+ try {
39
+ validateLineRange({ lineEnd: 10, path: '/test/file.txt' });
40
+ expect.fail('Expected McpError to be thrown');
41
+ }
42
+ catch (error) {
43
+ expect(error).toBeInstanceOf(McpError);
44
+ const mcpError = error;
45
+ expect(mcpError.code).toBe(ErrorCode.E_INVALID_INPUT);
46
+ expect(mcpError.message).toContain('lineEnd requires lineStart');
47
+ }
48
+ });
49
+ it('should reject lineEnd < lineStart', () => {
50
+ try {
51
+ validateLineRange({ lineStart: 10, lineEnd: 5, path: '/test/file.txt' });
52
+ expect.fail('Expected McpError to be thrown');
53
+ }
54
+ catch (error) {
55
+ expect(error).toBeInstanceOf(McpError);
56
+ const mcpError = error;
57
+ expect(mcpError.code).toBe(ErrorCode.E_INVALID_INPUT);
58
+ expect(mcpError.message).toContain('lineEnd (5) must be >= lineStart (10)');
59
+ }
60
+ });
61
+ it('should accept lineEnd equal to lineStart (single line)', () => {
62
+ expect(() => {
63
+ validateLineRange({ lineStart: 5, lineEnd: 5, path: '/test/file.txt' });
64
+ }).not.toThrow();
65
+ });
66
+ it('should reject lineRange with head', () => {
67
+ try {
68
+ validateLineRange({
69
+ lineStart: 1,
70
+ lineEnd: 10,
71
+ head: 5,
72
+ path: '/test/file.txt',
73
+ });
74
+ expect.fail('Expected McpError to be thrown');
75
+ }
76
+ catch (error) {
77
+ expect(error).toBeInstanceOf(McpError);
78
+ const mcpError = error;
79
+ expect(mcpError.code).toBe(ErrorCode.E_INVALID_INPUT);
80
+ expect(mcpError.message).toContain('Cannot specify multiple');
81
+ }
82
+ });
83
+ it('should reject lineRange with tail', () => {
84
+ try {
85
+ validateLineRange({
86
+ lineStart: 1,
87
+ lineEnd: 10,
88
+ tail: 5,
89
+ path: '/test/file.txt',
90
+ });
91
+ expect.fail('Expected McpError to be thrown');
92
+ }
93
+ catch (error) {
94
+ expect(error).toBeInstanceOf(McpError);
95
+ const mcpError = error;
96
+ expect(mcpError.code).toBe(ErrorCode.E_INVALID_INPUT);
97
+ expect(mcpError.message).toContain('Cannot specify multiple');
98
+ }
99
+ });
100
+ it('should reject head with tail', () => {
101
+ try {
102
+ validateLineRange({ head: 5, tail: 5, path: '/test/file.txt' });
103
+ expect.fail('Expected McpError to be thrown');
104
+ }
105
+ catch (error) {
106
+ expect(error).toBeInstanceOf(McpError);
107
+ const mcpError = error;
108
+ expect(mcpError.code).toBe(ErrorCode.E_INVALID_INPUT);
109
+ expect(mcpError.message).toContain('Cannot specify multiple');
110
+ }
111
+ });
112
+ });
113
+ describe('validateHeadTail', () => {
114
+ it('should accept head alone', () => {
115
+ expect(() => {
116
+ validateHeadTail({ head: 10 });
117
+ }).not.toThrow();
118
+ });
119
+ it('should accept tail alone', () => {
120
+ expect(() => {
121
+ validateHeadTail({ tail: 10 });
122
+ }).not.toThrow();
123
+ });
124
+ it('should accept neither head nor tail', () => {
125
+ expect(() => {
126
+ validateHeadTail({});
127
+ }).not.toThrow();
128
+ });
129
+ it('should reject both head and tail', () => {
130
+ try {
131
+ validateHeadTail({ head: 5, tail: 5 });
132
+ expect.fail('Expected McpError to be thrown');
133
+ }
134
+ catch (error) {
135
+ expect(error).toBeInstanceOf(McpError);
136
+ const mcpError = error;
137
+ expect(mcpError.code).toBe(ErrorCode.E_INVALID_INPUT);
138
+ expect(mcpError.message).toContain('Cannot specify both head and tail');
139
+ }
140
+ });
141
+ });
142
+ //# sourceMappingURL=validators.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.test.js","sourceRoot":"","sources":["../../../src/__tests__/schemas/validators.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Buffer } from 'node:buffer';
1
2
  /**
2
3
  * File and Directory Types
3
4
  */
@@ -46,7 +47,7 @@ export interface ListDirectoryResult {
46
47
  maxDepthReached: number;
47
48
  truncated: boolean;
48
49
  skippedInaccessible: number;
49
- skippedSymlinks: number;
50
+ symlinksNotFollowed: number;
50
51
  };
51
52
  }
52
53
  /**
@@ -98,6 +99,7 @@ export interface SearchContentResult {
98
99
  skippedTooLarge: number;
99
100
  skippedBinary: number;
100
101
  skippedInaccessible: number;
102
+ linesSkippedDueToRegexTimeout: number;
101
103
  stoppedReason?: 'maxResults' | 'maxFiles' | 'timeout';
102
104
  };
103
105
  }
@@ -128,7 +130,7 @@ export interface AnalyzeDirectoryResult {
128
130
  summary: {
129
131
  truncated: boolean;
130
132
  skippedInaccessible: number;
131
- skippedSymlinks: number;
133
+ symlinksNotFollowed: number;
132
134
  };
133
135
  }
134
136
  /**
@@ -151,7 +153,7 @@ export interface DirectoryTreeResult {
151
153
  maxDepthReached: number;
152
154
  truncated: boolean;
153
155
  skippedInaccessible: number;
154
- skippedSymlinks: number;
156
+ symlinksNotFollowed: number;
155
157
  };
156
158
  }
157
159
  /**
@@ -219,4 +221,28 @@ export interface ErrorResponse {
219
221
  };
220
222
  isError: true;
221
223
  }
224
+ /**
225
+ * Result of parsing command-line arguments.
226
+ */
227
+ export interface ParseArgsResult {
228
+ allowedDirs: string[];
229
+ allowCwd: boolean;
230
+ }
231
+ /**
232
+ * Options for server configuration.
233
+ */
234
+ export interface ServerOptions {
235
+ allowCwd?: boolean;
236
+ }
237
+ /**
238
+ * Image width and height dimensions.
239
+ */
240
+ export interface ImageDimensions {
241
+ width: number;
242
+ height: number;
243
+ }
244
+ /**
245
+ * Function signature for parsing image dimensions from a buffer.
246
+ */
247
+ export type ImageParser = (buffer: Buffer) => ImageDimensions | null;
222
248
  //# sourceMappingURL=types.d.ts.map
@@ -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":"AAwLA,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;GAGG;AACH,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,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,gBAAgB,EAAE,kBAAkB;IACpC,SAAS,EAAE,WAAW;CACd,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AA2LA,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;;GAGG;AACH,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,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,gBAAgB,EAAE,kBAAkB;IACpC,SAAS,EAAE,WAAW;CACd,CAAC"}
package/dist/index.js CHANGED
@@ -11,40 +11,33 @@
11
11
  *
12
12
  * Usage:
13
13
  * filesystem-context-mcp /path/to/dir1 /path/to/dir2
14
+ * filesystem-context-mcp --allow-cwd # Use current working directory
14
15
  *
15
16
  * Or with MCP Roots protocol (no CLI args needed).
16
17
  */
17
18
  import { setAllowedDirectories } from './lib/path-validation.js';
18
19
  import { createServer, parseArgs, startServer } from './server.js';
19
20
  async function main() {
20
- const allowedDirs = await parseArgs();
21
+ const { allowedDirs, allowCwd } = await parseArgs();
21
22
  if (allowedDirs.length > 0) {
22
23
  setAllowedDirectories(allowedDirs);
23
- console.error('Filesystem Context MCP Server starting...');
24
24
  console.error('Allowed directories (from CLI):');
25
- for (const dir of allowedDirs) {
26
- console.error(` - ${dir}`);
27
- }
28
25
  }
29
26
  else {
30
- console.error('Filesystem Context MCP Server starting...');
31
- console.error('No directories specified via CLI. Will use MCP Roots protocol if available.');
27
+ console.error(`No directories specified via CLI. Will use MCP Roots${allowCwd ? ' or current working directory' : ''}.`);
32
28
  }
33
- const server = createServer();
29
+ const server = createServer({ allowCwd });
34
30
  await startServer(server);
35
31
  }
36
32
  // Graceful shutdown handlers
37
33
  process.on('SIGTERM', () => {
38
- console.error('Received SIGTERM, shutting down gracefully...');
39
34
  process.exit(0);
40
35
  });
41
36
  process.on('SIGINT', () => {
42
- console.error('Received SIGINT, shutting down gracefully...');
43
37
  process.exit(0);
44
38
  });
45
39
  // Run main and handle fatal errors
46
- main().catch((error) => {
47
- console.error('Fatal error:', error);
40
+ main().catch(() => {
48
41
  process.exit(1);
49
42
  });
50
43
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnE,KAAK,UAAU,IAAI;IACjB,MAAM,WAAW,GAAG,MAAM,SAAS,EAAE,CAAC;IAEtC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CACX,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,6BAA6B;AAC7B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,mCAAmC;AACnC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,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,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACnC,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,CAAC;IAC1C,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,6BAA6B;AAC7B,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,mCAAmC;AACnC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -12,5 +12,13 @@ export declare const DEFAULT_TOP_N = 10;
12
12
  export declare const DEFAULT_TREE_DEPTH = 5;
13
13
  export declare const KNOWN_TEXT_EXTENSIONS: Set<string>;
14
14
  export declare const KNOWN_BINARY_EXTENSIONS: Set<string>;
15
+ /**
16
+ * Get the MIME type for a file extension.
17
+ * Returns 'application/octet-stream' for unknown extensions.
18
+ *
19
+ * @param ext - File extension including the dot (e.g., '.png')
20
+ * @returns The MIME type string
21
+ */
22
+ export declare function getMimeType(ext: string): string;
15
23
  export declare const MIME_TYPES: Record<string, string>;
16
24
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAG3C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAG1C,eAAO,MAAM,wBAAwB,QAAc,CAAC;AACpD,eAAO,MAAM,kBAAkB,QAAmB,CAAC;AACnD,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAG5C,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAGpC,eAAO,MAAM,qBAAqB,aA+IhC,CAAC;AAGH,eAAO,MAAM,uBAAuB,aAwGlC,CAAC;AAGH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiE7C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAG3C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAG1C,eAAO,MAAM,wBAAwB,QAAc,CAAC;AACpD,eAAO,MAAM,kBAAkB,QAAmB,CAAC;AACnD,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAG5C,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAGpC,eAAO,MAAM,qBAAqB,aA+IhC,CAAC;AAGH,eAAO,MAAM,uBAAuB,aAwGlC,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAGD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAiE7C,CAAC"}
@@ -265,6 +265,16 @@ export const KNOWN_BINARY_EXTENSIONS = new Set([
265
265
  // Source maps (can be large and not useful for text search)
266
266
  '.map',
267
267
  ]);
268
+ /**
269
+ * Get the MIME type for a file extension.
270
+ * Returns 'application/octet-stream' for unknown extensions.
271
+ *
272
+ * @param ext - File extension including the dot (e.g., '.png')
273
+ * @returns The MIME type string
274
+ */
275
+ export function getMimeType(ext) {
276
+ return MIME_TYPES[ext.toLowerCase()] ?? 'application/octet-stream';
277
+ }
268
278
  // MIME type mappings for media files
269
279
  export const MIME_TYPES = {
270
280
  // Images