@mcp-monorepo/file-browser 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 (65) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +26 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/lib/env.d.ts +10 -0
  6. package/dist/lib/env.d.ts.map +1 -0
  7. package/dist/lib/env.js +20 -0
  8. package/dist/lib/env.js.map +1 -0
  9. package/dist/lib/find-best-patch-match.d.ts +31 -0
  10. package/dist/lib/find-best-patch-match.d.ts.map +1 -0
  11. package/dist/lib/find-best-patch-match.js +74 -0
  12. package/dist/lib/find-best-patch-match.js.map +1 -0
  13. package/dist/lib/finder.d.ts +46 -0
  14. package/dist/lib/finder.d.ts.map +1 -0
  15. package/dist/lib/finder.js +90 -0
  16. package/dist/lib/finder.js.map +1 -0
  17. package/dist/lib/validators.d.ts +12 -0
  18. package/dist/lib/validators.d.ts.map +1 -0
  19. package/dist/lib/validators.js +57 -0
  20. package/dist/lib/validators.js.map +1 -0
  21. package/dist/lib/walker/better-walker.d.ts +52 -0
  22. package/dist/lib/walker/better-walker.d.ts.map +1 -0
  23. package/dist/lib/walker/better-walker.js +120 -0
  24. package/dist/lib/walker/better-walker.js.map +1 -0
  25. package/dist/lib/walker/ignore-file-service.d.ts +8 -0
  26. package/dist/lib/walker/ignore-file-service.d.ts.map +1 -0
  27. package/dist/lib/walker/ignore-file-service.js +128 -0
  28. package/dist/lib/walker/ignore-file-service.js.map +1 -0
  29. package/dist/tools/find-or-replace.d.ts +3 -0
  30. package/dist/tools/find-or-replace.d.ts.map +1 -0
  31. package/dist/tools/find-or-replace.js +102 -0
  32. package/dist/tools/find-or-replace.js.map +1 -0
  33. package/dist/tools/list-directory.d.ts +3 -0
  34. package/dist/tools/list-directory.d.ts.map +1 -0
  35. package/dist/tools/list-directory.js +75 -0
  36. package/dist/tools/list-directory.js.map +1 -0
  37. package/dist/tools/mk-dir.d.ts +3 -0
  38. package/dist/tools/mk-dir.d.ts.map +1 -0
  39. package/dist/tools/mk-dir.js +45 -0
  40. package/dist/tools/mk-dir.js.map +1 -0
  41. package/dist/tools/move-path.d.ts +3 -0
  42. package/dist/tools/move-path.d.ts.map +1 -0
  43. package/dist/tools/move-path.js +35 -0
  44. package/dist/tools/move-path.js.map +1 -0
  45. package/dist/tools/open-file.d.ts +3 -0
  46. package/dist/tools/open-file.d.ts.map +1 -0
  47. package/dist/tools/open-file.js +31 -0
  48. package/dist/tools/open-file.js.map +1 -0
  49. package/dist/tools/patch-file.d.ts +3 -0
  50. package/dist/tools/patch-file.d.ts.map +1 -0
  51. package/dist/tools/patch-file.js +80 -0
  52. package/dist/tools/patch-file.js.map +1 -0
  53. package/dist/tools/remove-file.d.ts +3 -0
  54. package/dist/tools/remove-file.d.ts.map +1 -0
  55. package/dist/tools/remove-file.js +52 -0
  56. package/dist/tools/remove-file.js.map +1 -0
  57. package/dist/tools/tree-directory.d.ts +3 -0
  58. package/dist/tools/tree-directory.d.ts.map +1 -0
  59. package/dist/tools/tree-directory.js +71 -0
  60. package/dist/tools/tree-directory.js.map +1 -0
  61. package/dist/tools/write-tool.d.ts +3 -0
  62. package/dist/tools/write-tool.d.ts.map +1 -0
  63. package/dist/tools/write-tool.js +45 -0
  64. package/dist/tools/write-tool.js.map +1 -0
  65. package/package.json +39 -0
@@ -0,0 +1,52 @@
1
+ import { rm, stat } from 'node:fs/promises';
2
+ import { normalize, resolve } from 'node:path';
3
+ import { registerTool } from '@mcp-monorepo/shared';
4
+ import { z } from 'zod';
5
+ import { getWorkingDir } from '../lib/env.js';
6
+ import { validateExists, validateWithinBasePath } from '../lib/validators.js';
7
+ import { getTypeFromStats } from '../lib/walker/better-walker.js';
8
+ export const registerRemoveFileTool = (server) => registerTool(server, {
9
+ name: 'remove-file',
10
+ title: 'Remove File',
11
+ description: 'Removes a file or directory. For directories, removes recursively including all contents.',
12
+ inputSchema: {
13
+ filepath: z.string().nonempty('Filepath must be provided'),
14
+ },
15
+ outputSchema: {
16
+ removed: z.string(),
17
+ type: z.enum([
18
+ 'file',
19
+ 'folder',
20
+ 'block device',
21
+ 'character device',
22
+ 'FIFO',
23
+ 'socket',
24
+ 'symbolic link',
25
+ 'unknown',
26
+ ]),
27
+ },
28
+ isReadOnly: false,
29
+ isDestructive: true,
30
+ async fetcher({ filepath }) {
31
+ const workingDir = getWorkingDir();
32
+ const path = resolve(workingDir, normalize(filepath));
33
+ validateWithinBasePath(workingDir, path);
34
+ await validateExists(path);
35
+ // Check if it's a file or directory before removal
36
+ const stats = await stat(path);
37
+ const type = getTypeFromStats(stats);
38
+ // Remove file or directory recursively
39
+ await rm(path, { recursive: true, force: true });
40
+ return {
41
+ removed: filepath,
42
+ type: type,
43
+ };
44
+ },
45
+ formatter({ removed, type }) {
46
+ return {
47
+ removed,
48
+ type: type,
49
+ };
50
+ },
51
+ });
52
+ //# sourceMappingURL=remove-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-file.js","sourceRoot":"","sources":["../../src/tools/remove-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAiB,MAAM,gCAAgC,CAAA;AAIhF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,MAAiB,EAAE,EAAE,CAC1D,YAAY,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,2FAA2F;IACxG,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAC3D;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;YACX,MAAM;YACN,QAAQ;YACR,cAAc;YACd,kBAAkB;YAClB,MAAM;YACN,QAAQ;YACR,eAAe;YACf,SAAS;SACV,CAAC;KACH;IACD,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,IAAI;IACnB,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE;QACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;QACrD,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QACxC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;QAE1B,mDAAmD;QACnD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEpC,uCAAuC;QACvC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAEhD,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,IAAgB;SACvB,CAAA;IACH,CAAC;IACD,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QACzB,OAAO;YACL,OAAO;YACP,IAAI,EAAE,IAAgB;SACvB,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const registerTreeDirectoryTool: (server: McpServer) => void;
3
+ //# sourceMappingURL=tree-directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-directory.d.ts","sourceRoot":"","sources":["../../src/tools/tree-directory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAIxE,eAAO,MAAM,yBAAyB,GAAI,QAAQ,SAAS,SAoEvD,CAAA"}
@@ -0,0 +1,71 @@
1
+ import { posix, resolve } from 'node:path';
2
+ import { registerTool } from '@mcp-monorepo/shared';
3
+ import { z } from 'zod';
4
+ import { getWorkingDir } from '../lib/env.js';
5
+ import { validateIsDir, validateWithinBasePath } from '../lib/validators.js';
6
+ import { traverseDirectoryBFS } from '../lib/walker/better-walker.js';
7
+ export const registerTreeDirectoryTool = (server) => registerTool(server, {
8
+ name: 'tree-directory',
9
+ title: 'Tree Directory Contents',
10
+ description: 'Generates a nested JSON representation with optional filtering of the directory contents.',
11
+ inputSchema: {
12
+ dirpath: z
13
+ .string()
14
+ .optional()
15
+ .describe('Relative path to the tree root directory. Defaults to current working directory.'),
16
+ depth: z.number().min(1).optional().describe('Maximum depth to traverse'),
17
+ regexp: z
18
+ .string()
19
+ .optional()
20
+ .describe('Only relative paths in unix style (e.g. "dir/to/file.txt") matching this regexp (e.g. "to/.*\\.txt") will be returned.'),
21
+ },
22
+ outputSchema: {
23
+ content: z.unknown(),
24
+ total: z.number(),
25
+ message: z.string().optional(),
26
+ },
27
+ isReadOnly: true,
28
+ async fetcher({ dirpath, depth, regexp }) {
29
+ const workingDir = getWorkingDir();
30
+ const basePath = resolve(workingDir, dirpath ? posix.normalize(dirpath) : './');
31
+ validateWithinBasePath(workingDir, basePath);
32
+ await validateIsDir(basePath);
33
+ const regex = regexp ? new RegExp(regexp, 'i') : undefined;
34
+ const files = [];
35
+ let isLimited = false;
36
+ for await (const filePath of traverseDirectoryBFS({
37
+ absoluteFolderPath: basePath,
38
+ maxDepth: depth,
39
+ })) {
40
+ if (!regex || regex.test(filePath.relPath))
41
+ files.push(filePath);
42
+ if (files.length > 200) {
43
+ isLimited = true;
44
+ break;
45
+ }
46
+ }
47
+ return { files, isLimited };
48
+ },
49
+ async formatter({ files, isLimited }) {
50
+ const content = {};
51
+ for (const { relPath } of files) {
52
+ const parts = relPath.split(posix.sep);
53
+ let current = content;
54
+ for (let i = 0; i < parts.length; i++) {
55
+ const part = parts[i];
56
+ if (!current[part]) {
57
+ current[part] = {};
58
+ }
59
+ current = current[part];
60
+ }
61
+ }
62
+ return {
63
+ content,
64
+ total: files.length,
65
+ message: isLimited
66
+ ? 'Number of items exceedeed 200. Results limited in depth. Try a more narrow scope with another dirpath or regex filter.'
67
+ : undefined,
68
+ };
69
+ },
70
+ });
71
+ //# sourceMappingURL=tree-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-directory.js","sourceRoot":"","sources":["../../src/tools/tree-directory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const registerWriteFileTool: (server: McpServer) => void;
3
+ //# sourceMappingURL=write-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-tool.d.ts","sourceRoot":"","sources":["../../src/tools/write-tool.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,SA0CnD,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { stat, writeFile } from 'node:fs/promises';
2
+ import { mkdir } from 'node:fs/promises';
3
+ import { dirname, normalize, resolve } from 'node:path';
4
+ import { registerTool } from '@mcp-monorepo/shared';
5
+ import { z } from 'zod';
6
+ import { getWorkingDir } from '../lib/env.js';
7
+ import { validateWithinBasePath } from '../lib/validators.js';
8
+ export const registerWriteFileTool = (server) => registerTool(server, {
9
+ name: 'write-file',
10
+ title: 'Write File',
11
+ description: "Create or completely overwrite a file with new content. Creates parent directories if they don't exist.",
12
+ inputSchema: {
13
+ filepath: z.string().nonempty('Filepath must be provided'),
14
+ content: z.string().describe('Content to write to the file'),
15
+ },
16
+ outputSchema: {
17
+ bytesWritten: z.number(),
18
+ existed: z.boolean(),
19
+ },
20
+ isReadOnly: false,
21
+ async fetcher({ filepath, content }) {
22
+ const workingDir = getWorkingDir();
23
+ const path = resolve(workingDir, normalize(filepath));
24
+ validateWithinBasePath(workingDir, path);
25
+ const parentDir = dirname(path);
26
+ await mkdir(parentDir, { recursive: true });
27
+ const existed = await stat(path)
28
+ .then((stat) => (stat.isFile() ? true : 'existed, but not a file'))
29
+ .catch(() => false);
30
+ if (typeof existed === 'string')
31
+ throw new Error(`Cannot write to file ${filepath} because it already exists and is not a file.`);
32
+ await writeFile(path, content, 'utf-8');
33
+ return {
34
+ existed,
35
+ bytesWritten: Buffer.byteLength(content, 'utf-8'),
36
+ };
37
+ },
38
+ formatter({ existed, bytesWritten }) {
39
+ return {
40
+ existed,
41
+ bytesWritten,
42
+ };
43
+ },
44
+ });
45
+ //# sourceMappingURL=write-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-tool.js","sourceRoot":"","sources":["../../src/tools/write-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAI7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAiB,EAAE,EAAE,CACzD,YAAY,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,YAAY;IACnB,WAAW,EACT,yGAAyG;IAC3G,WAAW,EAAE;QACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC7D;IACD,YAAY,EAAE;QACZ,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB;IACD,UAAU,EAAE,KAAK;IACjB,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;QACjC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;QACrD,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAExC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;aAC7B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,yBAAmC,CAAC,CAAC;aAC7E,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;QAErB,IAAI,OAAO,OAAO,KAAK,QAAQ;YAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,+CAA+C,CAAC,CAAA;QAClG,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAEvC,OAAO;YACL,OAAO;YACP,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;SAClD,CAAA;IACH,CAAC;IACD,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;QACjC,OAAO;YACL,OAAO;YACP,YAAY;SACb,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@mcp-monorepo/file-browser",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "MCP server for file system browsing and manipulation (search, ls, tree, grep, open, write, move, mkdir)",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "mcp-npm-server": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc -b",
19
+ "dev": "tsc --watch",
20
+ "start": "node dist/index.js",
21
+ "test": "vitest run --passWithNoTests",
22
+ "test:watch": "vitest",
23
+ "test:coverage": "vitest run --coverage",
24
+ "typecheck": "tsc --noEmit",
25
+ "clean": "rimraf dist tsconfig.tsbuildinfo"
26
+ },
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.0.0",
29
+ "zod": "^3.25.76",
30
+ "@mcp-monorepo/shared": "*",
31
+ "minimatch": "^10.0.3"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^22.14.1",
35
+ "typescript": "^5.8.3",
36
+ "vitest": "^3.2.4",
37
+ "rimraf": "^6.0.1"
38
+ }
39
+ }