@j0hanz/filesystem-context-mcp 1.0.3 → 1.0.6

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 (116) hide show
  1. package/README.md +27 -26
  2. package/dist/__tests__/lib/formatters.test.js +0 -3
  3. package/dist/__tests__/lib/formatters.test.js.map +1 -1
  4. package/dist/__tests__/lib/image-parsing.test.js +0 -3
  5. package/dist/__tests__/lib/image-parsing.test.js.map +1 -1
  6. package/dist/config/types.d.ts +0 -68
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/config/types.js +0 -7
  9. package/dist/config/types.js.map +1 -1
  10. package/dist/index.js +2 -17
  11. package/dist/index.js.map +1 -1
  12. package/dist/instructions.md +245 -0
  13. package/dist/lib/constants.d.ts +0 -8
  14. package/dist/lib/constants.d.ts.map +1 -1
  15. package/dist/lib/constants.js +14 -19
  16. package/dist/lib/constants.js.map +1 -1
  17. package/dist/lib/errors.d.ts +0 -12
  18. package/dist/lib/errors.d.ts.map +1 -1
  19. package/dist/lib/errors.js +50 -32
  20. package/dist/lib/errors.js.map +1 -1
  21. package/dist/lib/file-operations.d.ts.map +1 -1
  22. package/dist/lib/file-operations.js +50 -12
  23. package/dist/lib/file-operations.js.map +1 -1
  24. package/dist/lib/formatters.d.ts +0 -21
  25. package/dist/lib/formatters.d.ts.map +1 -1
  26. package/dist/lib/formatters.js +6 -32
  27. package/dist/lib/formatters.js.map +1 -1
  28. package/dist/lib/fs-helpers.d.ts +0 -4
  29. package/dist/lib/fs-helpers.d.ts.map +1 -1
  30. package/dist/lib/fs-helpers.js +24 -23
  31. package/dist/lib/fs-helpers.js.map +1 -1
  32. package/dist/lib/image-parsing.d.ts +0 -4
  33. package/dist/lib/image-parsing.d.ts.map +1 -1
  34. package/dist/lib/image-parsing.js +1 -4
  35. package/dist/lib/image-parsing.js.map +1 -1
  36. package/dist/lib/path-utils.d.ts +0 -10
  37. package/dist/lib/path-utils.d.ts.map +1 -1
  38. package/dist/lib/path-utils.js +1 -16
  39. package/dist/lib/path-utils.js.map +1 -1
  40. package/dist/lib/path-validation.d.ts +0 -18
  41. package/dist/lib/path-validation.d.ts.map +1 -1
  42. package/dist/lib/path-validation.js +3 -60
  43. package/dist/lib/path-validation.js.map +1 -1
  44. package/dist/prompts/analyze-codebase.d.ts +3 -0
  45. package/dist/prompts/analyze-codebase.d.ts.map +1 -0
  46. package/dist/prompts/analyze-codebase.js +58 -0
  47. package/dist/prompts/analyze-codebase.js.map +1 -0
  48. package/dist/prompts/filesystem-query.d.ts +3 -0
  49. package/dist/prompts/filesystem-query.d.ts.map +1 -0
  50. package/dist/prompts/filesystem-query.js +113 -0
  51. package/dist/prompts/filesystem-query.js.map +1 -0
  52. package/dist/prompts/find-duplicates.d.ts +3 -0
  53. package/dist/prompts/find-duplicates.d.ts.map +1 -0
  54. package/dist/prompts/find-duplicates.js +68 -0
  55. package/dist/prompts/find-duplicates.js.map +1 -0
  56. package/dist/prompts/index.d.ts +3 -0
  57. package/dist/prompts/index.d.ts.map +1 -0
  58. package/dist/prompts/index.js +13 -0
  59. package/dist/prompts/index.js.map +1 -0
  60. package/dist/prompts/project-overview.d.ts +3 -0
  61. package/dist/prompts/project-overview.d.ts.map +1 -0
  62. package/dist/prompts/project-overview.js +51 -0
  63. package/dist/prompts/project-overview.js.map +1 -0
  64. package/dist/prompts/search-and-replace.d.ts +3 -0
  65. package/dist/prompts/search-and-replace.d.ts.map +1 -0
  66. package/dist/prompts/search-and-replace.js +83 -0
  67. package/dist/prompts/search-and-replace.js.map +1 -0
  68. package/dist/schemas/common.d.ts +0 -4
  69. package/dist/schemas/common.d.ts.map +1 -1
  70. package/dist/schemas/common.js +10 -12
  71. package/dist/schemas/common.js.map +1 -1
  72. package/dist/schemas/index.d.ts +0 -1
  73. package/dist/schemas/index.d.ts.map +1 -1
  74. package/dist/schemas/index.js +0 -3
  75. package/dist/schemas/index.js.map +1 -1
  76. package/dist/schemas/inputs.d.ts +2 -2
  77. package/dist/schemas/inputs.d.ts.map +1 -1
  78. package/dist/schemas/inputs.js +15 -1
  79. package/dist/schemas/inputs.js.map +1 -1
  80. package/dist/schemas/outputs.d.ts +4 -4
  81. package/dist/schemas/validators.js +2 -2
  82. package/dist/schemas/validators.js.map +1 -1
  83. package/dist/server.d.ts.map +1 -1
  84. package/dist/server.js +15 -0
  85. package/dist/server.js.map +1 -1
  86. package/dist/tools/analyze-directory.d.ts.map +1 -1
  87. package/dist/tools/analyze-directory.js +1 -0
  88. package/dist/tools/analyze-directory.js.map +1 -1
  89. package/dist/tools/directory-tree.d.ts.map +1 -1
  90. package/dist/tools/directory-tree.js +1 -0
  91. package/dist/tools/directory-tree.js.map +1 -1
  92. package/dist/tools/get-file-info.d.ts.map +1 -1
  93. package/dist/tools/get-file-info.js +1 -0
  94. package/dist/tools/get-file-info.js.map +1 -1
  95. package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
  96. package/dist/tools/list-allowed-dirs.js +1 -0
  97. package/dist/tools/list-allowed-dirs.js.map +1 -1
  98. package/dist/tools/list-directory.d.ts.map +1 -1
  99. package/dist/tools/list-directory.js +1 -0
  100. package/dist/tools/list-directory.js.map +1 -1
  101. package/dist/tools/read-file.d.ts.map +1 -1
  102. package/dist/tools/read-file.js +1 -0
  103. package/dist/tools/read-file.js.map +1 -1
  104. package/dist/tools/read-media-file.d.ts.map +1 -1
  105. package/dist/tools/read-media-file.js +1 -0
  106. package/dist/tools/read-media-file.js.map +1 -1
  107. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  108. package/dist/tools/read-multiple-files.js +1 -0
  109. package/dist/tools/read-multiple-files.js.map +1 -1
  110. package/dist/tools/search-content.d.ts.map +1 -1
  111. package/dist/tools/search-content.js +1 -0
  112. package/dist/tools/search-content.js.map +1 -1
  113. package/dist/tools/search-files.d.ts.map +1 -1
  114. package/dist/tools/search-files.js +1 -0
  115. package/dist/tools/search-files.js.map +1 -1
  116. package/package.json +3 -2
@@ -1,3 +1,4 @@
1
+ // Image format signatures
1
2
  const PNG_SIGNATURE = [0x89, 0x50, 0x4e, 0x47];
2
3
  const JPEG_SIGNATURE = [0xff, 0xd8];
3
4
  const GIF_SIGNATURE = [0x47, 0x49, 0x46];
@@ -103,10 +104,6 @@ const IMAGE_PARSERS = {
103
104
  '.bmp': parseBmp,
104
105
  '.webp': parseWebp,
105
106
  };
106
- /**
107
- * Parse image dimensions from common image format headers.
108
- * Supports PNG, JPEG, GIF, BMP, and WebP.
109
- */
110
107
  export function parseImageDimensions(buffer, ext) {
111
108
  try {
112
109
  const parser = IMAGE_PARSERS[ext];
@@ -1 +1 @@
1
- {"version":3,"file":"image-parsing.js","sourceRoot":"","sources":["../../src/lib/image-parsing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image-parsing.js","sourceRoot":"","sources":["../../src/lib/image-parsing.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,2 @@
1
- /**
2
- * Normalize a path to a canonical, absolute form.
3
- *
4
- * - Expands ~ to home directory
5
- * - Resolves to absolute path
6
- * - On Windows, normalizes drive letter to lowercase for consistent comparison
7
- *
8
- * @param p - The path to normalize (relative or absolute)
9
- * @returns The normalized absolute path
10
- */
11
1
  export declare function normalizePath(p: string): string;
12
2
  //# sourceMappingURL=path-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/lib/path-utils.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU/C"}
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/lib/path-utils.ts"],"names":[],"mappings":"AAWA,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU/C"}
@@ -1,27 +1,12 @@
1
- /**
2
- * Path normalization utilities for cross-platform consistency.
3
- */
4
1
  import * as os from 'node:os';
5
2
  import * as path from 'node:path';
6
- /**
7
- * Expand home directory shorthand (~/) to actual home path.
8
- */
9
3
  function expandHome(filepath) {
10
4
  if (filepath.startsWith('~/') || filepath === '~') {
11
5
  return path.join(os.homedir(), filepath.slice(1));
12
6
  }
13
7
  return filepath;
14
8
  }
15
- /**
16
- * Normalize a path to a canonical, absolute form.
17
- *
18
- * - Expands ~ to home directory
19
- * - Resolves to absolute path
20
- * - On Windows, normalizes drive letter to lowercase for consistent comparison
21
- *
22
- * @param p - The path to normalize (relative or absolute)
23
- * @returns The normalized absolute path
24
- */
9
+ // Normalize path to canonical absolute form
25
10
  export function normalizePath(p) {
26
11
  const expanded = expandHome(p);
27
12
  const resolved = path.resolve(expanded);
@@ -1 +1 @@
1
- {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/lib/path-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;GAEG;AACH,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,6DAA6D;IAC7D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/lib/path-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,6DAA6D;IAC7D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,31 +1,13 @@
1
1
  import type { Root } from '@modelcontextprotocol/sdk/types.js';
2
- /**
3
- * Set the list of directories that this server is allowed to access.
4
- * All paths are normalized before storage.
5
- */
6
2
  export declare function setAllowedDirectories(dirs: string[]): void;
7
- /**
8
- * Get a copy of the current allowed directories list.
9
- */
10
3
  export declare function getAllowedDirectories(): string[];
11
4
  interface ValidatedPathDetails {
12
- /** Normalized version of the originally requested path (may still be a symlink). */
13
5
  requestedPath: string;
14
- /** Realpath-resolved absolute path (symlinks resolved). */
15
6
  resolvedPath: string;
16
- /** Whether the originally requested path is a symbolic link. */
17
7
  isSymlink: boolean;
18
8
  }
19
- /**
20
- * Like validateExistingPath(), but also returns the normalized requested path and whether it was a symlink.
21
- * Useful for operations that need to report on symlinks without traversing them.
22
- */
23
9
  export declare function validateExistingPathDetailed(requestedPath: string): Promise<ValidatedPathDetails>;
24
10
  export declare function validateExistingPath(requestedPath: string): Promise<string>;
25
- /**
26
- * Validates and extracts valid directory paths from MCP Root objects.
27
- * Only file:// URIs pointing to existing directories are accepted.
28
- */
29
11
  export declare function getValidRootDirectories(roots: Root[]): Promise<string[]>;
30
12
  export {};
31
13
  //# sourceMappingURL=path-validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-validation.d.ts","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAQ/D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAG1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAyBD,UAAU,oBAAoB;IAC5B,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;CACpB;AA0GD;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,IAAI,EAAE,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCnB"}
1
+ {"version":3,"file":"path-validation.d.ts","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAO/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAG1D;AAED,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAmBD,UAAU,oBAAoB;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AA0GD,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAGD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,IAAI,EAAE,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCnB"}
@@ -1,71 +1,21 @@
1
- /**
2
- * Path validation and security module for filesystem access control.
3
- *
4
- * This module is the SECURITY BOUNDARY of the MCP server.
5
- * All filesystem operations MUST call validateExistingPath() before accessing any path.
6
- *
7
- * Security properties:
8
- * - Prevents access to paths outside allowed directories
9
- * - Prevents symlink escapes (validates both requested path and resolved realpath)
10
- * - Normalizes paths consistently across platforms
11
- *
12
- * ## TOCTOU (Time-of-Check-Time-of-Use) Considerations
13
- *
14
- * This module validates paths at a point in time. Between validation and actual
15
- * file operations, the filesystem state may change (race condition). This is an
16
- * inherent limitation of path-based filesystem access that cannot be fully mitigated
17
- * without kernel-level support.
18
- *
19
- * **Mitigations applied:**
20
- * 1. **Symlink resolution**: We resolve symlinks during validation via `fs.realpath()`,
21
- * ensuring the resolved target is within allowed directories at validation time.
22
- * 2. **Short validation window**: Validation is performed immediately before operations
23
- * to minimize the race window.
24
- * 3. **Read-only operations**: This server only performs read operations, limiting the
25
- * impact of TOCTOU races (no data corruption risk).
26
- *
27
- * **Residual risks:**
28
- * - A file could be replaced with a symlink between validation and read
29
- * - A directory could be replaced with a symlink junction (Windows)
30
- * - File permissions could change between validation and access
31
- *
32
- * **For higher security requirements:**
33
- * - Use `O_NOFOLLOW` flag where supported (Linux)
34
- * - Use file handles (`fs.open()`) and operate on handles instead of paths
35
- * - Consider sandboxing at the OS level (containers, namespaces)
36
- *
37
- * @see https://cwe.mitre.org/data/definitions/367.html - CWE-367: TOCTOU Race Condition
38
- */
1
+ // Path validation and security module - the SECURITY BOUNDARY of this server.
2
+ // All filesystem operations MUST call validateExistingPath() before accessing any path.
39
3
  import * as fs from 'node:fs/promises';
40
4
  import { fileURLToPath } from 'node:url';
41
5
  import { ErrorCode, McpError } from './errors.js';
42
6
  import { normalizePath } from './path-utils.js';
43
- /** Internal storage for allowed directories */
44
7
  let allowedDirectories = [];
45
- /**
46
- * Set the list of directories that this server is allowed to access.
47
- * All paths are normalized before storage.
48
- */
49
8
  export function setAllowedDirectories(dirs) {
50
9
  const normalized = dirs.map(normalizePath).filter((d) => d.length > 0);
51
10
  allowedDirectories = [...new Set(normalized)];
52
11
  }
53
- /**
54
- * Get a copy of the current allowed directories list.
55
- */
56
12
  export function getAllowedDirectories() {
57
13
  return [...allowedDirectories];
58
14
  }
59
15
  const PATH_SEPARATOR = process.platform === 'win32' ? '\\' : '/';
60
- /**
61
- * Normalize path for comparison (case-insensitive on Windows)
62
- */
63
16
  function normalizeForComparison(p) {
64
17
  return process.platform === 'win32' ? p.toLowerCase() : p;
65
18
  }
66
- /**
67
- * Check if a normalized path is within allowed directories.
68
- */
69
19
  function isPathWithinAllowedDirectories(normalizedPath) {
70
20
  const candidate = normalizeForComparison(normalizedPath);
71
21
  return allowedDirectories.some((allowedDir) => {
@@ -127,10 +77,6 @@ async function validateExistingPathDetailsInternal(requestedPath) {
127
77
  isSymlink,
128
78
  };
129
79
  }
130
- /**
131
- * Like validateExistingPath(), but also returns the normalized requested path and whether it was a symlink.
132
- * Useful for operations that need to report on symlinks without traversing them.
133
- */
134
80
  export async function validateExistingPathDetailed(requestedPath) {
135
81
  return validateExistingPathDetailsInternal(requestedPath);
136
82
  }
@@ -138,10 +84,7 @@ export async function validateExistingPath(requestedPath) {
138
84
  const details = await validateExistingPathDetailsInternal(requestedPath);
139
85
  return details.resolvedPath;
140
86
  }
141
- /**
142
- * Validates and extracts valid directory paths from MCP Root objects.
143
- * Only file:// URIs pointing to existing directories are accepted.
144
- */
87
+ // Extract valid directory paths from MCP Root objects (file:// URIs only)
145
88
  export async function getValidRootDirectories(roots) {
146
89
  const validDirs = [];
147
90
  for (const root of roots) {
@@ -1 +1 @@
1
- {"version":3,"file":"path-validation.js","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path-validation.js","sourceRoot":"","sources":["../../src/lib/path-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAnalyzeCodebasePrompt(server: McpServer): void;
3
+ //# sourceMappingURL=analyze-codebase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-codebase.d.ts","sourceRoot":"","sources":["../../src/prompts/analyze-codebase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkErE"}
@@ -0,0 +1,58 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { getAllowedDirectories } from '../lib/path-validation.js';
4
+ export function registerAnalyzeCodebasePrompt(server) {
5
+ server.registerPrompt('analyze-codebase', {
6
+ description: 'Deep analysis of code patterns, architecture, and implementation details in a codebase',
7
+ argsSchema: {
8
+ path: completable(z.string().min(1).describe('Root path of the codebase to analyze'), (value) => {
9
+ const dirs = getAllowedDirectories();
10
+ return dirs.filter((d) => d.toLowerCase().includes(value.toLowerCase()) ||
11
+ value.toLowerCase().includes(d.toLowerCase().slice(0, 10)));
12
+ }),
13
+ focus: z
14
+ .enum(['architecture', 'patterns', 'quality', 'security', 'all'])
15
+ .optional()
16
+ .default('all')
17
+ .describe('Analysis focus area (default: all)'),
18
+ filePattern: z
19
+ .string()
20
+ .optional()
21
+ .default('**/*.{ts,js,py,java,go,rs}')
22
+ .describe('Glob pattern for files to analyze (default: common source files)'),
23
+ },
24
+ }, ({ path, focus, filePattern }) => ({
25
+ messages: [
26
+ {
27
+ role: 'user',
28
+ content: {
29
+ type: 'text',
30
+ text: `Perform a deep analysis of the codebase at "${path}" with focus on: ${focus}.
31
+
32
+ Use the available filesystem tools systematically:
33
+
34
+ 1. **Discovery Phase**
35
+ - Use \`directory_tree\` to understand the overall structure
36
+ - Use \`search_files\` with pattern "${filePattern}" to find source files
37
+ - Use \`analyze_directory\` to get file statistics and identify largest/most recent files
38
+
39
+ 2. **Code Inspection Phase**
40
+ - Use \`search_content\` to find key patterns:
41
+ ${focus === 'architecture' || focus === 'all' ? '- Search for class/interface definitions, exports, imports' : ''}
42
+ ${focus === 'patterns' || focus === 'all' ? '- Search for common design patterns (Factory, Singleton, Observer, etc.)' : ''}
43
+ ${focus === 'quality' || focus === 'all' ? '- Search for TODO, FIXME, HACK comments' : ''}
44
+ ${focus === 'security' || focus === 'all' ? '- Search for potential security concerns (eval, exec, password, secret, token)' : ''}
45
+ - Use \`read_multiple_files\` to examine key files identified in discovery
46
+
47
+ 3. **Analysis Deliverables**
48
+ ${focus === 'architecture' || focus === 'all' ? '- **Architecture**: Module organization, dependency flow, layering patterns' : ''}
49
+ ${focus === 'patterns' || focus === 'all' ? '- **Design Patterns**: Identified patterns, their usage, and effectiveness' : ''}
50
+ ${focus === 'quality' || focus === 'all' ? '- **Code Quality**: Technical debt indicators, documentation coverage, consistency' : ''}
51
+ ${focus === 'security' || focus === 'all' ? '- **Security**: Potential vulnerabilities, hardcoded secrets, input validation' : ''}
52
+ - **Recommendations**: Prioritized list of improvements with rationale`,
53
+ },
54
+ },
55
+ ],
56
+ }));
57
+ }
58
+ //# sourceMappingURL=analyze-codebase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-codebase.js","sourceRoot":"","sources":["../../src/prompts/analyze-codebase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,cAAc,CACnB,kBAAkB,EAClB;QACE,WAAW,EACT,wFAAwF;QAC1F,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC,EAClE,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC7C,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAC7D,CAAC;YACJ,CAAC,CACF;YACD,KAAK,EAAE,CAAC;iBACL,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;iBAChE,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,oCAAoC,CAAC;YACjD,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,4BAA4B,CAAC;iBACrC,QAAQ,CACP,kEAAkE,CACnE;SACJ;KACF,EACD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACjC,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,+CAA+C,IAAI,oBAAoB,KAAK;;;;;;0CAMpD,WAAW;;;;;OAK9C,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC,EAAE;OAC/G,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,0EAA0E,CAAC,CAAC,CAAC,EAAE;OACzH,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE;OACvF,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,gFAAgF,CAAC,CAAC,CAAC,EAAE;;;;KAIjI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,6EAA6E,CAAC,CAAC,CAAC,EAAE;KAChI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,4EAA4E,CAAC,CAAC,CAAC,EAAE;KAC3H,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,oFAAoF,CAAC,CAAC,CAAC,EAAE;KAClI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,gFAAgF,CAAC,CAAC,CAAC,EAAE;0EAC1D;iBAC/D;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerFilesystemQueryPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=filesystem-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-query.d.ts","sourceRoot":"","sources":["../../src/prompts/filesystem-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkIrE"}
@@ -0,0 +1,113 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { getAllowedDirectories } from '../lib/path-validation.js';
4
+ export function registerFilesystemQueryPrompt(server) {
5
+ server.registerPrompt('filesystem-query', {
6
+ description: 'A guided prompt for performing common filesystem exploration and analysis tasks. Provides structured guidance based on the selected operation type.',
7
+ argsSchema: {
8
+ path: completable(z.string().min(1).describe('Target path for the operation'), (value) => {
9
+ const dirs = getAllowedDirectories();
10
+ return dirs.filter((d) => d.toLowerCase().includes(value.toLowerCase()) ||
11
+ value.toLowerCase().includes(d.toLowerCase().slice(0, 10)));
12
+ }),
13
+ operation: z
14
+ .enum([
15
+ 'explore',
16
+ 'find-files',
17
+ 'search-code',
18
+ 'analyze-size',
19
+ 'recent-changes',
20
+ ])
21
+ .describe('Operation type: explore (structure), find-files (by pattern), search-code (content search), analyze-size (disk usage), recent-changes (modified files)'),
22
+ pattern: z
23
+ .string()
24
+ .optional()
25
+ .describe('Search pattern (glob for find-files, regex for search-code)'),
26
+ depth: z
27
+ .number()
28
+ .int()
29
+ .min(1)
30
+ .max(20)
31
+ .optional()
32
+ .default(5)
33
+ .describe('Maximum depth for exploration (default: 5)'),
34
+ },
35
+ }, ({ path, operation, pattern, depth }) => {
36
+ const operationPrompts = {
37
+ explore: `Explore the filesystem structure at "${path}".
38
+
39
+ Use these tools in sequence:
40
+ 1. \`directory_tree\` with maxDepth=${String(depth)} to visualize the hierarchy
41
+ 2. \`analyze_directory\` to get file statistics (types, sizes, counts)
42
+ 3. \`list_directory\` with sortBy="modified" for recent activity
43
+
44
+ Provide:
45
+ - **Structure Overview**: Main directories and their purposes
46
+ - **File Distribution**: Breakdown by type and location
47
+ - **Key Files**: Important configuration or entry point files
48
+ - **Notable Findings**: Unusual patterns or large files`,
49
+ 'find-files': `Find files matching pattern "${pattern ?? '**/*'}" in "${path}".
50
+
51
+ Use these tools:
52
+ 1. \`search_files\` with pattern="${pattern ?? '**/*'}" to find matching files
53
+ 2. \`read_multiple_files\` to examine the most relevant matches
54
+ 3. Optionally \`get_file_info\` for detailed metadata on specific files
55
+
56
+ Provide:
57
+ - **Matched Files**: List with paths and sizes
58
+ - **Pattern Analysis**: What the pattern captured
59
+ - **Content Preview**: Summary of matched file contents
60
+ - **Suggestions**: Related patterns that might be useful`,
61
+ 'search-code': `Search for code pattern "${pattern ?? ''}" in "${path}".
62
+
63
+ Use these tools:
64
+ 1. \`search_content\` with pattern="${pattern ?? ''}" and contextLines=2
65
+ 2. \`read_multiple_files\` to get full context for important matches
66
+ 3. Group results by file and analyze patterns
67
+
68
+ Provide:
69
+ - **Match Summary**: Total matches, files affected
70
+ - **Code Context**: Key matches with surrounding code
71
+ - **Pattern Usage**: How and where the pattern appears
72
+ - **Related Code**: Suggest related patterns to explore`,
73
+ 'analyze-size': `Analyze disk usage and file sizes in "${path}".
74
+
75
+ Use these tools:
76
+ 1. \`analyze_directory\` to get size statistics and largest files
77
+ 2. \`directory_tree\` with includeSize=true for size visualization
78
+ 3. \`search_files\` to find specific file types if needed
79
+
80
+ Provide:
81
+ - **Size Summary**: Total size, file count, directory count
82
+ - **Largest Files**: Top 10 with sizes and paths
83
+ - **Type Breakdown**: Size by file extension
84
+ - **Cleanup Suggestions**: Files that could be removed or compressed`,
85
+ 'recent-changes': `Find recently modified files in "${path}".
86
+
87
+ Use these tools:
88
+ 1. \`analyze_directory\` to see recentlyModified list
89
+ 2. \`list_directory\` with sortBy="modified" for detailed listing
90
+ 3. \`read_multiple_files\` to examine recent changes
91
+
92
+ Provide:
93
+ - **Recent Activity**: Files modified in last 24h, week, month
94
+ - **Change Patterns**: Which areas are most active
95
+ - **File Diffs**: Summary of what changed in key files
96
+ - **Activity Insights**: Development patterns or areas of focus`,
97
+ };
98
+ const promptText = operationPrompts[operation] ??
99
+ `Perform "${operation}" operation at "${path}".`;
100
+ return {
101
+ messages: [
102
+ {
103
+ role: 'user',
104
+ content: {
105
+ type: 'text',
106
+ text: promptText,
107
+ },
108
+ },
109
+ ],
110
+ };
111
+ });
112
+ }
113
+ //# sourceMappingURL=filesystem-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-query.js","sourceRoot":"","sources":["../../src/prompts/filesystem-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,cAAc,CACnB,kBAAkB,EAClB;QACE,WAAW,EACT,qJAAqJ;QACvJ,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAC3D,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC7C,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAC7D,CAAC;YACJ,CAAC,CACF;YACD,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC;gBACJ,SAAS;gBACT,YAAY;gBACZ,aAAa;gBACb,cAAc;gBACd,gBAAgB;aACjB,CAAC;iBACD,QAAQ,CACP,wJAAwJ,CACzJ;YACH,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,6DAA6D,CAC9D;YACH,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,4CAA4C,CAAC;SAC1D;KACF,EACD,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;QACtC,MAAM,gBAAgB,GAA2B;YAC/C,OAAO,EAAE,wCAAwC,IAAI;;;sCAGvB,MAAM,CAAC,KAAK,CAAC;;;;;;;;wDAQK;YAEhD,YAAY,EAAE,gCAAgC,OAAO,IAAI,MAAM,SAAS,IAAI;;;oCAGhD,OAAO,IAAI,MAAM;;;;;;;;yDAQI;YAEjD,aAAa,EAAE,4BAA4B,OAAO,IAAI,EAAE,SAAS,IAAI;;;sCAGvC,OAAO,IAAI,EAAE;;;;;;;;wDAQK;YAEhD,cAAc,EAAE,yCAAyC,IAAI;;;;;;;;;;;qEAWA;YAE7D,gBAAgB,EAAE,oCAAoC,IAAI;;;;;;;;;;;gEAWF;SACzD,CAAC;QAEF,MAAM,UAAU,GACd,gBAAgB,CAAC,SAAS,CAAC;YAC3B,YAAY,SAAS,mBAAmB,IAAI,IAAI,CAAC;QAEnD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU;qBACjB;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerFindDuplicatesPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=find-duplicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-duplicates.d.ts","sourceRoot":"","sources":["../../src/prompts/find-duplicates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8EpE"}
@@ -0,0 +1,68 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { getAllowedDirectories } from '../lib/path-validation.js';
4
+ export function registerFindDuplicatesPrompt(server) {
5
+ server.registerPrompt('find-duplicates', {
6
+ description: 'Find duplicate or similar code patterns, files, and potential refactoring opportunities',
7
+ argsSchema: {
8
+ path: completable(z.string().min(1).describe('Root path to search for duplicates'), (value) => {
9
+ const dirs = getAllowedDirectories();
10
+ return dirs.filter((d) => d.toLowerCase().includes(value.toLowerCase()) ||
11
+ value.toLowerCase().includes(d.toLowerCase().slice(0, 10)));
12
+ }),
13
+ pattern: z
14
+ .string()
15
+ .optional()
16
+ .default('**/*.{ts,js,tsx,jsx,py,java}')
17
+ .describe('Glob pattern for files to check (default: source files)'),
18
+ searchTerm: z
19
+ .string()
20
+ .optional()
21
+ .describe('Optional specific pattern or function name to find duplicates of'),
22
+ },
23
+ }, ({ path, pattern, searchTerm }) => ({
24
+ messages: [
25
+ {
26
+ role: 'user',
27
+ content: {
28
+ type: 'text',
29
+ text: `Find duplicate code and refactoring opportunities in "${path}".
30
+
31
+ Use the available filesystem tools:
32
+
33
+ 1. **File Discovery**
34
+ - Use \`search_files\` with pattern "${pattern}" to find all relevant files
35
+ - Use \`analyze_directory\` to identify files of similar sizes (potential duplicates)
36
+
37
+ 2. **Content Analysis**
38
+ ${searchTerm
39
+ ? `- Use \`search_content\` to find all occurrences of "${searchTerm}"`
40
+ : `- Use \`search_content\` to find common duplicate patterns:
41
+ - Similar function signatures
42
+ - Repeated import statements
43
+ - Common utility patterns (error handling, logging, validation)
44
+ - Copied configuration blocks`}
45
+
46
+ 3. **Detailed Inspection**
47
+ - Use \`read_multiple_files\` to compare files with similar sizes or names
48
+ - Look for:
49
+ - Copy-pasted code blocks
50
+ - Functions with similar logic but different names
51
+ - Repeated patterns that could be abstracted
52
+ - Similar error handling or validation logic
53
+
54
+ 4. **Report Findings**
55
+ - **Exact Duplicates**: Files or code blocks that are identical
56
+ - **Near Duplicates**: Similar code with minor variations
57
+ - **Pattern Opportunities**: Repeated patterns that could be abstracted into utilities
58
+ - **Refactoring Suggestions**: Specific recommendations with:
59
+ - Which files are affected
60
+ - Proposed abstraction or consolidation
61
+ - Estimated complexity reduction
62
+ - Potential risks of refactoring`,
63
+ },
64
+ },
65
+ ],
66
+ }));
67
+ }
68
+ //# sourceMappingURL=find-duplicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-duplicates.js","sourceRoot":"","sources":["../../src/prompts/find-duplicates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,WAAW,EACT,yFAAyF;QAC3F,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAChE,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC7C,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAC7D,CAAC;YACJ,CAAC,CACF;YACD,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,8BAA8B,CAAC;iBACvC,QAAQ,CAAC,yDAAyD,CAAC;YACtE,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,kEAAkE,CACnE;SACJ;KACF,EACD,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yDAAyD,IAAI;;;;;0CAKrC,OAAO;;;;KAK5C,UAAU;wBACR,CAAC,CAAC,wDAAwD,UAAU,GAAG;wBACvE,CAAC,CAAC;;;;mCAKN;;;;;;;;;;;;;;;;;;sCAkBmC;iBAC3B;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAllPrompts(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAM1D"}
@@ -0,0 +1,13 @@
1
+ import { registerAnalyzeCodebasePrompt } from './analyze-codebase.js';
2
+ import { registerFilesystemQueryPrompt } from './filesystem-query.js';
3
+ import { registerFindDuplicatesPrompt } from './find-duplicates.js';
4
+ import { registerProjectOverviewPrompt } from './project-overview.js';
5
+ import { registerSearchAndReplacePrompt } from './search-and-replace.js';
6
+ export function registerAllPrompts(server) {
7
+ registerProjectOverviewPrompt(server);
8
+ registerAnalyzeCodebasePrompt(server);
9
+ registerFindDuplicatesPrompt(server);
10
+ registerSearchAndReplacePrompt(server);
11
+ registerFilesystemQueryPrompt(server);
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerProjectOverviewPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=project-overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-overview.d.ts","sourceRoot":"","sources":["../../src/prompts/project-overview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyDrE"}
@@ -0,0 +1,51 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { getAllowedDirectories } from '../lib/path-validation.js';
4
+ export function registerProjectOverviewPrompt(server) {
5
+ server.registerPrompt('project-overview', {
6
+ description: 'Get a comprehensive overview of a project directory structure, key files, and organization patterns',
7
+ argsSchema: {
8
+ path: completable(z.string().min(1).describe('Root path of the project to analyze'), (value) => {
9
+ const dirs = getAllowedDirectories();
10
+ return dirs.filter((d) => d.toLowerCase().includes(value.toLowerCase()) ||
11
+ value.toLowerCase().includes(d.toLowerCase().slice(0, 10)));
12
+ }),
13
+ depth: z
14
+ .number()
15
+ .int()
16
+ .min(1)
17
+ .max(10)
18
+ .optional()
19
+ .default(4)
20
+ .describe('Maximum depth to explore (default: 4)'),
21
+ },
22
+ }, ({ path, depth }) => ({
23
+ messages: [
24
+ {
25
+ role: 'user',
26
+ content: {
27
+ type: 'text',
28
+ text: `Please provide a comprehensive overview of the project at "${path}".
29
+
30
+ Use the available filesystem tools to:
31
+
32
+ 1. **Directory Structure** - Use \`directory_tree\` with maxDepth=${String(depth)} to visualize the project layout
33
+ 2. **Project Analysis** - Use \`analyze_directory\` to get statistics about file types, sizes, and recent activity
34
+ 3. **Key Configuration Files** - Use \`read_multiple_files\` to read common config files if they exist:
35
+ - package.json, tsconfig.json, pyproject.toml, Cargo.toml
36
+ - .gitignore, README.md, LICENSE
37
+ - Any config files in the root directory
38
+
39
+ Based on the gathered information, provide:
40
+ - **Project Type**: Identify the language(s), framework(s), and build tools
41
+ - **Directory Organization**: Explain the folder structure and conventions used
42
+ - **Key Entry Points**: Identify main files, entry points, or important modules
43
+ - **Dependencies**: Summarize key dependencies if package manifest is found
44
+ - **Notable Patterns**: Highlight any interesting architectural patterns or conventions
45
+ - **Recommendations**: Suggest any improvements to project organization if applicable`,
46
+ },
47
+ },
48
+ ],
49
+ }));
50
+ }
51
+ //# sourceMappingURL=project-overview.js.map