@j0hanz/filesystem-context-mcp 1.0.4 → 1.0.7

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 (95) hide show
  1. package/README.md +27 -26
  2. package/dist/config/types.d.ts +1 -1
  3. package/dist/config/types.d.ts.map +1 -1
  4. package/dist/instructions.md +209 -0
  5. package/dist/lib/directory-helpers.d.ts +5 -0
  6. package/dist/lib/directory-helpers.d.ts.map +1 -0
  7. package/dist/lib/directory-helpers.js +39 -0
  8. package/dist/lib/directory-helpers.js.map +1 -0
  9. package/dist/lib/file-operations.d.ts.map +1 -1
  10. package/dist/lib/file-operations.js +9 -74
  11. package/dist/lib/file-operations.js.map +1 -1
  12. package/dist/lib/fs-helpers.d.ts.map +1 -1
  13. package/dist/lib/fs-helpers.js +0 -5
  14. package/dist/lib/fs-helpers.js.map +1 -1
  15. package/dist/lib/mcp-logger.d.ts +11 -0
  16. package/dist/lib/mcp-logger.d.ts.map +1 -0
  17. package/dist/lib/mcp-logger.js +45 -0
  18. package/dist/lib/mcp-logger.js.map +1 -0
  19. package/dist/lib/sorting.d.ts +12 -0
  20. package/dist/lib/sorting.d.ts.map +1 -0
  21. package/dist/lib/sorting.js +41 -0
  22. package/dist/lib/sorting.js.map +1 -0
  23. package/dist/prompts/analyze-codebase.d.ts +3 -0
  24. package/dist/prompts/analyze-codebase.d.ts.map +1 -0
  25. package/dist/prompts/analyze-codebase.js +144 -0
  26. package/dist/prompts/analyze-codebase.js.map +1 -0
  27. package/dist/prompts/filesystem-query.d.ts +3 -0
  28. package/dist/prompts/filesystem-query.d.ts.map +1 -0
  29. package/dist/prompts/filesystem-query.js +168 -0
  30. package/dist/prompts/filesystem-query.js.map +1 -0
  31. package/dist/prompts/find-duplicates.d.ts +3 -0
  32. package/dist/prompts/find-duplicates.d.ts.map +1 -0
  33. package/dist/prompts/find-duplicates.js +77 -0
  34. package/dist/prompts/find-duplicates.js.map +1 -0
  35. package/dist/prompts/index.d.ts +3 -0
  36. package/dist/prompts/index.d.ts.map +1 -0
  37. package/dist/prompts/index.js +13 -0
  38. package/dist/prompts/index.js.map +1 -0
  39. package/dist/prompts/project-overview.d.ts +3 -0
  40. package/dist/prompts/project-overview.d.ts.map +1 -0
  41. package/dist/prompts/project-overview.js +122 -0
  42. package/dist/prompts/project-overview.js.map +1 -0
  43. package/dist/prompts/search-and-replace.d.ts +3 -0
  44. package/dist/prompts/search-and-replace.d.ts.map +1 -0
  45. package/dist/prompts/search-and-replace.js +130 -0
  46. package/dist/prompts/search-and-replace.js.map +1 -0
  47. package/dist/prompts/shared.d.ts +3 -0
  48. package/dist/prompts/shared.d.ts.map +1 -0
  49. package/dist/prompts/shared.js +17 -0
  50. package/dist/prompts/shared.js.map +1 -0
  51. package/dist/resources/index.d.ts +3 -0
  52. package/dist/resources/index.d.ts.map +1 -0
  53. package/dist/resources/index.js +54 -0
  54. package/dist/resources/index.js.map +1 -0
  55. package/dist/schemas/inputs.d.ts.map +1 -1
  56. package/dist/schemas/inputs.js +11 -7
  57. package/dist/schemas/inputs.js.map +1 -1
  58. package/dist/schemas/outputs.d.ts +10 -8
  59. package/dist/schemas/outputs.d.ts.map +1 -1
  60. package/dist/schemas/outputs.js +2 -0
  61. package/dist/schemas/outputs.js.map +1 -1
  62. package/dist/server.d.ts.map +1 -1
  63. package/dist/server.js +37 -15
  64. package/dist/server.js.map +1 -1
  65. package/dist/tools/analyze-directory.d.ts.map +1 -1
  66. package/dist/tools/analyze-directory.js +14 -4
  67. package/dist/tools/analyze-directory.js.map +1 -1
  68. package/dist/tools/directory-tree.d.ts.map +1 -1
  69. package/dist/tools/directory-tree.js +19 -2
  70. package/dist/tools/directory-tree.js.map +1 -1
  71. package/dist/tools/get-file-info.d.ts.map +1 -1
  72. package/dist/tools/get-file-info.js +5 -1
  73. package/dist/tools/get-file-info.js.map +1 -1
  74. package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
  75. package/dist/tools/list-allowed-dirs.js +16 -2
  76. package/dist/tools/list-allowed-dirs.js.map +1 -1
  77. package/dist/tools/list-directory.d.ts.map +1 -1
  78. package/dist/tools/list-directory.js +19 -7
  79. package/dist/tools/list-directory.js.map +1 -1
  80. package/dist/tools/read-file.d.ts.map +1 -1
  81. package/dist/tools/read-file.js +6 -1
  82. package/dist/tools/read-file.js.map +1 -1
  83. package/dist/tools/read-media-file.d.ts.map +1 -1
  84. package/dist/tools/read-media-file.js +5 -1
  85. package/dist/tools/read-media-file.js.map +1 -1
  86. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  87. package/dist/tools/read-multiple-files.js +5 -1
  88. package/dist/tools/read-multiple-files.js.map +1 -1
  89. package/dist/tools/search-content.d.ts.map +1 -1
  90. package/dist/tools/search-content.js +44 -4
  91. package/dist/tools/search-content.js.map +1 -1
  92. package/dist/tools/search-files.d.ts.map +1 -1
  93. package/dist/tools/search-files.js +19 -4
  94. package/dist/tools/search-files.js.map +1 -1
  95. package/package.json +3 -2
@@ -0,0 +1,168 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { DEFAULT_EXCLUDES, pathCompleter } from './shared.js';
4
+ const OPERATIONS = {
5
+ explore: {
6
+ tools: `1. \`directory_tree\` maxDepth={depth} excludePatterns={excludes} → hierarchy
7
+ 2. \`analyze_directory\` excludePatterns={excludes} → stats
8
+ 3. \`list_directory\` sortBy="modified" → recent activity`,
9
+ deliverables: `- Structure overview & folder purposes
10
+ - File distribution by type
11
+ - Key config/entry files
12
+ - Notable findings`,
13
+ requiresPattern: false,
14
+ usesDepth: true,
15
+ },
16
+ 'find-files': {
17
+ tools: `1. \`search_files\` pattern="{pattern}" excludePatterns={excludes} maxResults=100 → find matches
18
+ 2. \`read_multiple_files\` → batch examine contents
19
+ 3. \`get_file_info\` → metadata if needed`,
20
+ deliverables: `- Matched files with sizes (up to 100 results)
21
+ - Content summary of key files
22
+ - Related pattern suggestions`,
23
+ requiresPattern: true,
24
+ usesDepth: true,
25
+ maxResults: 100,
26
+ },
27
+ 'search-code': {
28
+ tools: `1. \`search_content\` pattern="{pattern}" contextLines=2 maxResults=50 excludePatterns={excludes} → find matches
29
+ 2. \`read_multiple_files\` → batch read for full context`,
30
+ deliverables: `- Match count & files affected (up to 50 matches)
31
+ - Key matches with surrounding context
32
+ - Pattern usage analysis
33
+ - Suggested refactoring if duplicates found`,
34
+ requiresPattern: true,
35
+ usesDepth: false,
36
+ maxResults: 50,
37
+ },
38
+ 'analyze-size': {
39
+ tools: `1. \`analyze_directory\` maxDepth={depth} excludePatterns={excludes} → size stats
40
+ 2. \`directory_tree\` includeSize=true maxDepth={depth} excludePatterns={excludes} → visualize
41
+ 3. \`search_files\` sortBy="size" maxResults=20 → largest files`,
42
+ deliverables: `- Total size & file counts
43
+ - Top 10 largest files with paths
44
+ - Size breakdown by extension
45
+ - Cleanup suggestions (large/unused files)`,
46
+ requiresPattern: false,
47
+ usesDepth: true,
48
+ },
49
+ 'recent-changes': {
50
+ tools: `1. \`analyze_directory\` maxDepth={depth} excludePatterns={excludes} → recentlyModified
51
+ 2. \`list_directory\` sortBy="modified" recursive=true maxDepth={depth}
52
+ 3. \`read_multiple_files\` → batch examine recent files`,
53
+ deliverables: `- Recent activity timeline (last 24h, 7d, 30d)
54
+ - Most active directories
55
+ - Change patterns & hot spots
56
+ - Files to review`,
57
+ requiresPattern: false,
58
+ usesDepth: true,
59
+ },
60
+ };
61
+ export function registerFilesystemQueryPrompt(server) {
62
+ server.registerPrompt('filesystem-query', {
63
+ description: 'Guided filesystem operations: explore, find, search, size, changes',
64
+ argsSchema: {
65
+ path: completable(z.string().min(1).describe('Target path'), pathCompleter),
66
+ operation: z
67
+ .enum([
68
+ 'explore',
69
+ 'find-files',
70
+ 'search-code',
71
+ 'analyze-size',
72
+ 'recent-changes',
73
+ ])
74
+ .describe('Operation type'),
75
+ pattern: z
76
+ .string()
77
+ .optional()
78
+ .describe('Search pattern (glob for find-files, regex for search-code)'),
79
+ depth: z
80
+ .number()
81
+ .int()
82
+ .min(1)
83
+ .max(20)
84
+ .optional()
85
+ .default(5)
86
+ .describe('Max depth (1-20, default: 5)'),
87
+ caseSensitive: z
88
+ .boolean()
89
+ .optional()
90
+ .default(false)
91
+ .describe('Case-sensitive search (search-code only)'),
92
+ },
93
+ }, ({ path, operation, pattern, depth, caseSensitive }) => {
94
+ const config = OPERATIONS[operation];
95
+ // Type guard - should never happen with enum validation, but TypeScript needs this
96
+ if (!config) {
97
+ return {
98
+ messages: [
99
+ {
100
+ role: 'user',
101
+ content: {
102
+ type: 'text',
103
+ text: `Unknown operation: "${operation}". Valid operations: ${Object.keys(OPERATIONS).join(', ')}`,
104
+ },
105
+ },
106
+ ],
107
+ };
108
+ }
109
+ const excludesJson = JSON.stringify(DEFAULT_EXCLUDES);
110
+ // Validate pattern requirement
111
+ if (config.requiresPattern && !pattern) {
112
+ return {
113
+ messages: [
114
+ {
115
+ role: 'user',
116
+ content: {
117
+ type: 'text',
118
+ text: `⚠️ The "${operation}" operation requires a pattern.
119
+
120
+ Please provide:
121
+ - For **find-files**: a glob pattern (e.g., "**/*.ts", "src/**/*.json")
122
+ - For **search-code**: a regex pattern (e.g., "TODO|FIXME", "function\\s+\\w+")`,
123
+ },
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ // Build tools section with substitutions
129
+ const tools = config.tools
130
+ .replace(/{depth}/g, String(depth))
131
+ .replace(/{excludes}/g, excludesJson)
132
+ .replace(/{pattern}/g, pattern ?? '*');
133
+ // Build search options for search-code
134
+ const searchOptions = operation === 'search-code'
135
+ ? ` caseSensitive=${String(caseSensitive)}`
136
+ : '';
137
+ const patternInfo = pattern ? ` pattern="${pattern}"` : '';
138
+ const depthInfo = config.usesDepth ? ` maxDepth=${String(depth)}` : '';
139
+ const promptText = `**${operation.charAt(0).toUpperCase() + operation.slice(1)}** "${path}"${patternInfo}${depthInfo}${searchOptions}
140
+
141
+ ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
142
+
143
+ **Default excludes:** ${DEFAULT_EXCLUDES.join(', ')}
144
+
145
+ **Tools:**
146
+ ${tools}
147
+
148
+ **Deliverables:**
149
+ ${config.deliverables}
150
+
151
+ **Best Practices:**
152
+ - Use \`read_multiple_files\` to batch read (more efficient than sequential reads)
153
+ - Stop early if results are sufficient
154
+ - Report any inaccessible paths encountered`;
155
+ return {
156
+ messages: [
157
+ {
158
+ role: 'user',
159
+ content: {
160
+ type: 'text',
161
+ text: promptText,
162
+ },
163
+ },
164
+ ],
165
+ };
166
+ });
167
+ }
168
+ //# sourceMappingURL=filesystem-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-query.js","sourceRoot":"","sources":["../../src/prompts/filesystem-query.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 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;AASzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgFpE"}
@@ -0,0 +1,77 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { DEFAULT_EXCLUDES, pathCompleter } from './shared.js';
4
+ // Extended excludes for duplicate scanning (adds minified/bundled files to base excludes)
5
+ const DUPLICATE_EXCLUDES = [...DEFAULT_EXCLUDES, '*.min.js', '*.bundle.js'];
6
+ export function registerFindDuplicatesPrompt(server) {
7
+ server.registerPrompt('find-duplicates', {
8
+ description: 'Find duplicate code, similar patterns, and refactoring opportunities',
9
+ argsSchema: {
10
+ path: completable(z.string().min(1).describe('Root path to search'), pathCompleter),
11
+ pattern: z
12
+ .string()
13
+ .optional()
14
+ .default('**/*.{ts,js,tsx,jsx,py,java}')
15
+ .describe('Source file glob pattern'),
16
+ searchTerm: z
17
+ .string()
18
+ .optional()
19
+ .describe('Specific function/pattern to find duplicates of'),
20
+ minLines: z
21
+ .number()
22
+ .int()
23
+ .min(2)
24
+ .max(50)
25
+ .optional()
26
+ .default(5)
27
+ .describe('Minimum lines to consider as duplicate (default: 5)'),
28
+ },
29
+ }, ({ path, pattern, searchTerm, minLines }) => {
30
+ const excludePatterns = JSON.stringify(DUPLICATE_EXCLUDES);
31
+ const searchInstructions = searchTerm
32
+ ? `\`search_content\` pattern="${searchTerm}" contextLines=2 → find all occurrences`
33
+ : `\`search_content\` → find duplicates using these patterns:
34
+ - Function signatures: \`(export )?(async )?(function|const)\\s+\\w+\`
35
+ - Import blocks: \`^import .+ from\`
36
+ - Error handlers: \`catch\\s*\\(\` or \`\\.catch\\(\`
37
+ - Repeated utility patterns: loops, conditionals, API calls`;
38
+ return {
39
+ messages: [
40
+ {
41
+ role: 'user',
42
+ content: {
43
+ type: 'text',
44
+ text: `Find duplicate code in "${path}".
45
+
46
+ ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
47
+
48
+ **Workflow:**
49
+ 1. \`search_files\` pattern="${pattern}" excludePatterns=${excludePatterns}
50
+ 2. \`analyze_directory\` excludePatterns=${excludePatterns} → identify similar-sized files (potential copies)
51
+ 3. ${searchInstructions}
52
+ 4. \`read_multiple_files\` → batch compare suspect files
53
+
54
+ **Duplicate Detection Criteria (minimum ${minLines} lines):**
55
+ - Code blocks that are character-for-character identical
56
+ - Code with only variable/parameter name differences
57
+ - Structural duplicates: same logic, different formatting
58
+
59
+ **Report Format:**
60
+ | Category | Description |
61
+ |----------|-------------|
62
+ | **Exact duplicates** | Identical code blocks with file:line locations |
63
+ | **Near duplicates** | 80%+ similar code, highlight differences |
64
+ | **Extractable patterns** | Repeated logic → shared utility/hook candidates |
65
+ | **Refactoring plan** | Priority order, files affected, breaking change risks |
66
+
67
+ **For each duplicate found, provide:**
68
+ 1. File locations (all occurrences)
69
+ 2. Code snippet (first occurrence)
70
+ 3. Suggested abstraction (function name, module location)`,
71
+ },
72
+ },
73
+ ],
74
+ };
75
+ });
76
+ }
77
+ //# 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,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,0FAA0F;AAC1F,MAAM,kBAAkB,GAAG,CAAC,GAAG,gBAAgB,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAE5E,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,WAAW,EACT,sEAAsE;QACxE,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACjD,aAAa,CACd;YACD,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,8BAA8B,CAAC;iBACvC,QAAQ,CAAC,0BAA0B,CAAC;YACvC,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,QAAQ,EAAE,CAAC;iBACR,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,qDAAqD,CAAC;SACnE;KACF,EACD,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAE3D,MAAM,kBAAkB,GAAG,UAAU;YACnC,CAAC,CAAC,+BAA+B,UAAU,yCAAyC;YACpF,CAAC,CAAC;;;;4DAIkD,CAAC;QAEvD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,IAAI;;;;;+BAKpB,OAAO,qBAAqB,eAAe;2CAC/B,eAAe;KACrD,kBAAkB;;;0CAGmB,QAAQ;;;;;;;;;;;;;;;;0DAgBQ;qBAC7C;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 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;AA4CzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+FrE"}
@@ -0,0 +1,122 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { DEFAULT_EXCLUDES, pathCompleter } from './shared.js';
4
+ // Extended excludes for project overview (adds framework-specific dirs)
5
+ const PROJECT_EXCLUDES = [...DEFAULT_EXCLUDES, '.next/**', '.nuxt/**'];
6
+ // Config files to look for by category
7
+ const CONFIG_FILES = {
8
+ project: [
9
+ 'package.json',
10
+ 'pyproject.toml',
11
+ 'Cargo.toml',
12
+ 'go.mod',
13
+ 'pom.xml',
14
+ 'build.gradle',
15
+ ],
16
+ typescript: ['tsconfig.json', 'jsconfig.json'],
17
+ build: [
18
+ 'vite.config.*',
19
+ 'webpack.config.*',
20
+ 'rollup.config.*',
21
+ 'next.config.*',
22
+ 'nuxt.config.*',
23
+ ],
24
+ lint: ['.eslintrc*', 'eslint.config.*', '.prettierrc*', 'biome.json'],
25
+ docker: ['Dockerfile', 'docker-compose.yml', 'docker-compose.yaml'],
26
+ ci: ['.github/workflows/*.yml', '.gitlab-ci.yml'],
27
+ docs: ['README.md', 'CHANGELOG.md', 'CONTRIBUTING.md', 'LICENSE'],
28
+ env: ['.env.example', '.env.sample', '.env.template'],
29
+ };
30
+ // Build flat list of priority config files for the prompt
31
+ function getConfigFileList() {
32
+ return Object.entries(CONFIG_FILES)
33
+ .map(([category, files]) => `- **${category}**: ${files.slice(0, 3).join(', ')}`)
34
+ .join('\n');
35
+ }
36
+ export function registerProjectOverviewPrompt(server) {
37
+ server.registerPrompt('project-overview', {
38
+ description: 'Quick overview of project structure, tech stack, and key files',
39
+ argsSchema: {
40
+ path: completable(z.string().min(1).describe('Project root path'), pathCompleter),
41
+ depth: z
42
+ .number()
43
+ .int()
44
+ .min(1)
45
+ .max(10)
46
+ .optional()
47
+ .default(4)
48
+ .describe('Tree depth (1-10, default: 4)'),
49
+ includeCI: z
50
+ .boolean()
51
+ .optional()
52
+ .default(false)
53
+ .describe('Include CI/CD config analysis'),
54
+ },
55
+ }, ({ path, depth, includeCI }) => {
56
+ const excludesJson = JSON.stringify(PROJECT_EXCLUDES);
57
+ const configList = getConfigFileList();
58
+ // Priority files to always try reading
59
+ const priorityFiles = [
60
+ 'package.json',
61
+ 'README.md',
62
+ 'tsconfig.json',
63
+ ...(includeCI ? ['.github/workflows/*.yml'] : []),
64
+ ];
65
+ return {
66
+ messages: [
67
+ {
68
+ role: 'user',
69
+ content: {
70
+ type: 'text',
71
+ text: `Analyze project at "${path}".
72
+
73
+ ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
74
+
75
+ **Default excludes:** ${PROJECT_EXCLUDES.slice(0, 4).join(', ')}
76
+
77
+ **Workflow:**
78
+ 1. \`directory_tree\` maxDepth=${String(depth)} excludePatterns=${excludesJson} → structure
79
+ 2. \`search_files\` pattern="*config*|*.json|*.toml|*.yml" excludePatterns=${excludesJson} → find config files
80
+ 3. \`analyze_directory\` excludePatterns=${excludesJson} → stats & largest files
81
+ 4. \`read_multiple_files\` → batch read found configs (priority: ${priorityFiles.join(', ')})
82
+
83
+ **Config files to look for:**
84
+ ${configList}
85
+
86
+ **Deliverables:**
87
+
88
+ | Section | Details |
89
+ |---------|---------|
90
+ | **Tech Stack** | Languages, frameworks, runtime versions |
91
+ | **Package Manager** | npm/yarn/pnpm + lock file present |
92
+ | **Build System** | Bundler, compiler, scripts |
93
+ | **Folder Structure** | src/, lib/, tests/ conventions |
94
+ | **Entry Points** | main, bin, exports in package.json |
95
+ | **Dependencies** | Key deps vs devDeps, outdated indicators |
96
+ | **Code Quality** | Linting, formatting, type checking setup |
97
+ ${includeCI ? '| **CI/CD** | Workflows, test/deploy pipelines |' : ''}
98
+
99
+ **Output Format:**
100
+ \`\`\`
101
+ ## Project: {name}
102
+ **Type**: {monorepo|library|application|cli}
103
+ **Stack**: {languages} + {frameworks}
104
+ **Build**: {tool} → {output}
105
+
106
+ ### Structure
107
+ {tree summary}
108
+
109
+ ### Key Findings
110
+ - {finding 1}
111
+ - {finding 2}
112
+
113
+ ### Recommendations
114
+ - {recommendation if any}
115
+ \`\`\``,
116
+ },
117
+ },
118
+ ],
119
+ };
120
+ });
121
+ }
122
+ //# sourceMappingURL=project-overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-overview.js","sourceRoot":"","sources":["../../src/prompts/project-overview.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 registerSearchAndReplacePrompt(server: McpServer): void;
3
+ //# sourceMappingURL=search-and-replace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-and-replace.d.ts","sourceRoot":"","sources":["../../src/prompts/search-and-replace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkJtE"}
@@ -0,0 +1,130 @@
1
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
+ import { z } from 'zod';
3
+ import { DEFAULT_EXCLUDES, pathCompleter } from './shared.js';
4
+ // Extended excludes for search-and-replace (adds lock/minified files)
5
+ const SEARCH_REPLACE_EXCLUDES = [...DEFAULT_EXCLUDES, '*.lock', '*.min.js'];
6
+ export function registerSearchAndReplacePrompt(server) {
7
+ server.registerPrompt('search-and-replace-plan', {
8
+ description: 'Plan search & replace with impact analysis and safety categorization (read-only analysis)',
9
+ argsSchema: {
10
+ path: completable(z.string().min(1).describe('Root path to search'), pathCompleter),
11
+ searchPattern: z
12
+ .string()
13
+ .min(1)
14
+ .describe('Search pattern (regex supported, use isLiteral=true for plain text)'),
15
+ replacement: z.string().describe('Replacement text'),
16
+ filePattern: z
17
+ .string()
18
+ .optional()
19
+ .default('**/*.{ts,js,tsx,jsx,py,java,go,rs,md,json}')
20
+ .describe('File glob pattern'),
21
+ caseSensitive: z
22
+ .boolean()
23
+ .optional()
24
+ .default(false)
25
+ .describe('Case sensitive match'),
26
+ wholeWord: z
27
+ .boolean()
28
+ .optional()
29
+ .default(false)
30
+ .describe('Match whole words only'),
31
+ isLiteral: z
32
+ .boolean()
33
+ .optional()
34
+ .default(false)
35
+ .describe('Treat search pattern as literal text (auto-escape regex chars)'),
36
+ maxResults: z
37
+ .number()
38
+ .int()
39
+ .min(1)
40
+ .max(500)
41
+ .optional()
42
+ .default(100)
43
+ .describe('Maximum matches to analyze (default: 100)'),
44
+ },
45
+ }, ({ path, searchPattern, replacement, filePattern, caseSensitive, wholeWord, isLiteral, maxResults, }) => {
46
+ const excludesJson = JSON.stringify(SEARCH_REPLACE_EXCLUDES);
47
+ // Build search options string
48
+ const searchOptions = [
49
+ `pattern="${searchPattern}"`,
50
+ `filePattern="${filePattern}"`,
51
+ `excludePatterns=${excludesJson}`,
52
+ 'contextLines=2',
53
+ `maxResults=${maxResults}`,
54
+ `caseSensitive=${String(caseSensitive)}`,
55
+ `wholeWord=${String(wholeWord)}`,
56
+ `isLiteral=${String(isLiteral)}`,
57
+ ].join(' ');
58
+ return {
59
+ messages: [
60
+ {
61
+ role: 'user',
62
+ content: {
63
+ type: 'text',
64
+ text: `**Search & Replace Analysis** for "${path}"
65
+
66
+ ⚠️ **READ-ONLY ANALYSIS** - This server cannot modify files. This prompt generates a replacement plan for manual execution or use with other tools.
67
+
68
+ ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
69
+
70
+ **Operation:**
71
+ | Field | Value |
72
+ |-------|-------|
73
+ | Search | \`${searchPattern}\` |
74
+ | Replace | \`${replacement}\` |
75
+ | Files | \`${filePattern}\` |
76
+ | Case-sensitive | ${String(caseSensitive)} |
77
+ | Whole word | ${String(wholeWord)} |
78
+ | Literal (no regex) | ${String(isLiteral)} |
79
+ | Max results | ${maxResults} |
80
+
81
+ **Default excludes:** ${SEARCH_REPLACE_EXCLUDES.slice(0, 4).join(', ')}
82
+
83
+ **Workflow:**
84
+ 1. \`search_content\` ${searchOptions}
85
+ 2. \`read_multiple_files\` → batch examine files with complex matches
86
+
87
+ **Categorize each match:**
88
+ | Category | Criteria | Action |
89
+ |----------|----------|--------|
90
+ | ✅ **Safe** | Simple, isolated, no side effects | Auto-replaceable |
91
+ | ⚠️ **Review** | In comments, strings, or complex context | Manual verification needed |
92
+ | ❌ **Skip** | False positive, partial match, generated code | Do not replace |
93
+
94
+ **Impact Analysis:**
95
+ - API changes (function signatures, exports)
96
+ - Import/require statements
97
+ - Test files & assertions
98
+ - Documentation & comments
99
+ - Config files (may need special handling)
100
+
101
+ **Deliverables:**
102
+
103
+ 1. **Summary Table:**
104
+ | File | Matches | Safe | Review | Skip |
105
+ |------|---------|------|--------|------|
106
+
107
+ 2. **Diff Preview** (for each match):
108
+ \`\`\`diff
109
+ - {original line with match highlighted}
110
+ + {line after replacement}
111
+ \`\`\`
112
+
113
+ 3. **Execution Plan:**
114
+ - Phase 1: Safe replacements (list files)
115
+ - Phase 2: Review required (list files + concerns)
116
+ - Phase 3: Related updates (imports, tests, docs)
117
+
118
+ 4. **Risk Assessment:**
119
+ - Breaking change likelihood (High/Medium/Low)
120
+ - Rollback strategy
121
+ - Files to backup first
122
+
123
+ ⚠️ **If matches exceed ${maxResults}**: Report total count and recommend narrowing \`filePattern\` or \`searchPattern\`.`,
124
+ },
125
+ },
126
+ ],
127
+ };
128
+ });
129
+ }
130
+ //# sourceMappingURL=search-and-replace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-and-replace.js","sourceRoot":"","sources":["../../src/prompts/search-and-replace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function pathCompleter(value: string): string[];
2
+ export declare const DEFAULT_EXCLUDES: readonly ["node_modules/**", ".git/**", "dist/**", "build/**", "coverage/**"];
3
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/prompts/shared.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAQrD;AAGD,eAAO,MAAM,gBAAgB,+EAMnB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { getAllowedDirectories } from '../lib/path-validation.js';
2
+ // Path autocompletion for prompt arguments
3
+ export function pathCompleter(value) {
4
+ const dirs = getAllowedDirectories();
5
+ const lowerValue = value.toLowerCase();
6
+ return dirs.filter((d) => d.toLowerCase().includes(lowerValue) ||
7
+ lowerValue.includes(d.toLowerCase().slice(0, 10)));
8
+ }
9
+ // Common directories to exclude from filesystem operations
10
+ export const DEFAULT_EXCLUDES = [
11
+ 'node_modules/**',
12
+ '.git/**',
13
+ 'dist/**',
14
+ 'build/**',
15
+ 'coverage/**',
16
+ ];
17
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/prompts/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,2CAA2C;AAC3C,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACpC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACpD,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,SAAS;IACT,SAAS;IACT,UAAU;IACV,aAAa;CACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAllResources(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwE5D"}