@j0hanz/filesystem-context-mcp 1.0.0 → 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.
- package/README.md +426 -224
- package/dist/__tests__/lib/errors.test.js +36 -1
- package/dist/__tests__/lib/errors.test.js.map +1 -1
- package/dist/__tests__/lib/file-operations.test.js +1 -1
- package/dist/__tests__/lib/file-operations.test.js.map +1 -1
- package/dist/__tests__/lib/formatters.test.d.ts +2 -0
- package/dist/__tests__/lib/formatters.test.d.ts.map +1 -0
- package/dist/__tests__/lib/formatters.test.js +251 -0
- package/dist/__tests__/lib/formatters.test.js.map +1 -0
- package/dist/__tests__/lib/image-parsing.test.d.ts +2 -0
- package/dist/__tests__/lib/image-parsing.test.d.ts.map +1 -0
- package/dist/__tests__/lib/image-parsing.test.js +265 -0
- package/dist/__tests__/lib/image-parsing.test.js.map +1 -0
- package/dist/__tests__/schemas/validators.test.d.ts +2 -0
- package/dist/__tests__/schemas/validators.test.d.ts.map +1 -0
- package/dist/__tests__/schemas/validators.test.js +142 -0
- package/dist/__tests__/schemas/validators.test.js.map +1 -0
- package/dist/config/types.d.ts +29 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +5 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/constants.d.ts +8 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +10 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/errors.d.ts +2 -6
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +59 -58
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/file-operations.d.ts +0 -12
- package/dist/lib/file-operations.d.ts.map +1 -1
- package/dist/lib/file-operations.js +70 -207
- package/dist/lib/file-operations.js.map +1 -1
- package/dist/lib/fs-helpers.d.ts.map +1 -1
- package/dist/lib/fs-helpers.js +50 -11
- package/dist/lib/fs-helpers.js.map +1 -1
- package/dist/lib/image-parsing.d.ts +8 -0
- package/dist/lib/image-parsing.d.ts.map +1 -0
- package/dist/lib/image-parsing.js +119 -0
- package/dist/lib/image-parsing.js.map +1 -0
- package/dist/lib/path-validation.d.ts.map +1 -1
- package/dist/lib/path-validation.js +1 -4
- package/dist/lib/path-validation.js.map +1 -1
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +2 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +9 -4
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/schemas/outputs.d.ts +12 -9
- package/dist/schemas/outputs.d.ts.map +1 -1
- package/dist/schemas/outputs.js +10 -3
- package/dist/schemas/outputs.js.map +1 -1
- package/dist/schemas/validators.d.ts +12 -0
- package/dist/schemas/validators.d.ts.map +1 -0
- package/dist/schemas/validators.js +35 -0
- package/dist/schemas/validators.js.map +1 -0
- package/dist/server.d.ts +3 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +26 -15
- package/dist/server.js.map +1 -1
- package/dist/tools/analyze-directory.js +1 -1
- package/dist/tools/analyze-directory.js.map +1 -1
- package/dist/tools/directory-tree.js +1 -1
- package/dist/tools/directory-tree.js.map +1 -1
- package/dist/tools/list-directory.js +1 -1
- package/dist/tools/list-directory.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +3 -0
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/read-multiple-files.d.ts.map +1 -1
- package/dist/tools/read-multiple-files.js +3 -0
- package/dist/tools/read-multiple-files.js.map +1 -1
- package/dist/tools/search-content.d.ts.map +1 -1
- package/dist/tools/search-content.js +4 -3
- package/dist/tools/search-content.js.map +1 -1
- 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 @@
|
|
|
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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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAElE;;GAEG;AACH,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;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"
|
|
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(
|
|
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((
|
|
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
|
|
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"}
|
package/dist/lib/constants.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/lib/constants.js
CHANGED
|
@@ -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
|