@merabylabs/promptarchitect-mcp 0.3.1 → 0.3.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.
@@ -0,0 +1,463 @@
1
+ /**
2
+ * Workspace Tools
3
+ * File system and workspace operations for the MCP agent
4
+ *
5
+ * These tools enable the agent to:
6
+ * - Read files from the workspace
7
+ * - Write/create files
8
+ * - List directory contents
9
+ * - Search for files by pattern
10
+ * - Get workspace context
11
+ */
12
+ import { z } from 'zod';
13
+ import * as fs from 'fs/promises';
14
+ import * as path from 'path';
15
+ import { logger } from '../utils/index.js';
16
+ // ============================================================================
17
+ // READ FILE TOOL
18
+ // ============================================================================
19
+ export const readFileSchema = z.object({
20
+ filePath: z.string().describe('The path to the file to read (absolute or relative to workspace)'),
21
+ startLine: z.number().optional().describe('Start reading from this line (1-indexed)'),
22
+ endLine: z.number().optional().describe('Stop reading at this line (inclusive)'),
23
+ encoding: z.enum(['utf-8', 'base64']).optional().default('utf-8').describe('File encoding'),
24
+ });
25
+ export async function readFile(input) {
26
+ const { filePath, startLine, endLine, encoding } = input;
27
+ logger.info('Reading file', { filePath, startLine, endLine });
28
+ try {
29
+ const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(process.cwd(), filePath);
30
+ const content = await fs.readFile(absolutePath, encoding === 'base64' ? 'base64' : 'utf-8');
31
+ let lines = content.split('\n');
32
+ const totalLines = lines.length;
33
+ let truncated = false;
34
+ // Apply line range if specified
35
+ if (startLine !== undefined || endLine !== undefined) {
36
+ const start = (startLine ?? 1) - 1;
37
+ const end = endLine ?? lines.length;
38
+ lines = lines.slice(start, end);
39
+ truncated = start > 0 || end < totalLines;
40
+ }
41
+ // Limit to prevent massive outputs
42
+ const MAX_LINES = 500;
43
+ if (lines.length > MAX_LINES) {
44
+ lines = lines.slice(0, MAX_LINES);
45
+ truncated = true;
46
+ }
47
+ const language = detectLanguage(filePath);
48
+ return {
49
+ content: lines.join('\n'),
50
+ filePath: absolutePath,
51
+ lineCount: totalLines,
52
+ language,
53
+ truncated,
54
+ startLine,
55
+ endLine,
56
+ };
57
+ }
58
+ catch (error) {
59
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
60
+ logger.error('Failed to read file', { filePath, error: errorMessage });
61
+ throw new Error(`Failed to read file: ${errorMessage}`);
62
+ }
63
+ }
64
+ // ============================================================================
65
+ // WRITE FILE TOOL
66
+ // ============================================================================
67
+ export const writeFileSchema = z.object({
68
+ filePath: z.string().describe('The path where to write the file'),
69
+ content: z.string().describe('The content to write to the file'),
70
+ createDirectories: z.boolean().optional().default(true).describe('Create parent directories if they don\'t exist'),
71
+ overwrite: z.boolean().optional().default(false).describe('Overwrite existing file (false = fail if exists)'),
72
+ });
73
+ export async function writeFile(input) {
74
+ const { filePath, content, createDirectories, overwrite } = input;
75
+ logger.info('Writing file', { filePath, contentLength: content.length });
76
+ try {
77
+ const absolutePath = path.isAbsolute(filePath) ? filePath : path.resolve(process.cwd(), filePath);
78
+ // Check if file exists
79
+ let fileExists = false;
80
+ try {
81
+ await fs.access(absolutePath);
82
+ fileExists = true;
83
+ }
84
+ catch {
85
+ fileExists = false;
86
+ }
87
+ if (fileExists && !overwrite) {
88
+ throw new Error(`File already exists: ${filePath}. Set overwrite=true to replace it.`);
89
+ }
90
+ // Create directories if needed
91
+ if (createDirectories) {
92
+ const dir = path.dirname(absolutePath);
93
+ await fs.mkdir(dir, { recursive: true });
94
+ }
95
+ // Write the file
96
+ await fs.writeFile(absolutePath, content, 'utf-8');
97
+ const bytesWritten = Buffer.byteLength(content, 'utf-8');
98
+ return {
99
+ filePath: absolutePath,
100
+ created: !fileExists,
101
+ bytesWritten,
102
+ message: fileExists ? 'File updated successfully' : 'File created successfully',
103
+ };
104
+ }
105
+ catch (error) {
106
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
107
+ logger.error('Failed to write file', { filePath, error: errorMessage });
108
+ throw new Error(`Failed to write file: ${errorMessage}`);
109
+ }
110
+ }
111
+ // ============================================================================
112
+ // LIST FILES TOOL
113
+ // ============================================================================
114
+ export const listFilesSchema = z.object({
115
+ directory: z.string().optional().default('.').describe('Directory to list (default: current directory)'),
116
+ pattern: z.string().optional().describe('Glob pattern to filter files (e.g., "*.ts", "**/*.json")'),
117
+ recursive: z.boolean().optional().default(false).describe('List files recursively'),
118
+ includeHidden: z.boolean().optional().default(false).describe('Include hidden files (starting with .)'),
119
+ maxDepth: z.number().optional().default(5).describe('Maximum recursion depth'),
120
+ });
121
+ export async function listFiles(input) {
122
+ const { directory, pattern, recursive, includeHidden, maxDepth } = input;
123
+ logger.info('Listing files', { directory, pattern, recursive });
124
+ try {
125
+ const absolutePath = path.isAbsolute(directory) ? directory : path.resolve(process.cwd(), directory);
126
+ const files = [];
127
+ const MAX_FILES = 200;
128
+ await scanDirectory(absolutePath, absolutePath, files, {
129
+ recursive,
130
+ includeHidden,
131
+ maxDepth,
132
+ pattern,
133
+ currentDepth: 0,
134
+ });
135
+ const truncated = files.length > MAX_FILES;
136
+ const result = truncated ? files.slice(0, MAX_FILES) : files;
137
+ return {
138
+ directory: absolutePath,
139
+ files: result,
140
+ totalCount: files.length,
141
+ truncated,
142
+ };
143
+ }
144
+ catch (error) {
145
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
146
+ logger.error('Failed to list files', { directory, error: errorMessage });
147
+ throw new Error(`Failed to list files: ${errorMessage}`);
148
+ }
149
+ }
150
+ async function scanDirectory(basePath, currentPath, files, options) {
151
+ if (options.currentDepth > options.maxDepth)
152
+ return;
153
+ const entries = await fs.readdir(currentPath, { withFileTypes: true });
154
+ for (const entry of entries) {
155
+ // Skip hidden files unless requested
156
+ if (!options.includeHidden && entry.name.startsWith('.'))
157
+ continue;
158
+ // Skip common non-essential directories
159
+ if (entry.isDirectory() && SKIP_DIRECTORIES.has(entry.name))
160
+ continue;
161
+ const fullPath = path.join(currentPath, entry.name);
162
+ const relativePath = path.relative(basePath, fullPath);
163
+ // Check pattern match if specified
164
+ if (options.pattern && !matchesPattern(entry.name, options.pattern)) {
165
+ if (!entry.isDirectory())
166
+ continue;
167
+ }
168
+ if (entry.isDirectory()) {
169
+ files.push({
170
+ name: entry.name,
171
+ path: relativePath,
172
+ type: 'directory',
173
+ });
174
+ if (options.recursive) {
175
+ await scanDirectory(basePath, fullPath, files, {
176
+ ...options,
177
+ currentDepth: options.currentDepth + 1,
178
+ });
179
+ }
180
+ }
181
+ else {
182
+ const stats = await fs.stat(fullPath);
183
+ files.push({
184
+ name: entry.name,
185
+ path: relativePath,
186
+ type: 'file',
187
+ size: stats.size,
188
+ language: detectLanguage(entry.name),
189
+ });
190
+ }
191
+ }
192
+ }
193
+ // ============================================================================
194
+ // SEARCH FILES TOOL
195
+ // ============================================================================
196
+ export const searchFilesSchema = z.object({
197
+ query: z.string().describe('Text or regex pattern to search for'),
198
+ directory: z.string().optional().default('.').describe('Directory to search in'),
199
+ filePattern: z.string().optional().describe('File pattern to limit search (e.g., "*.ts")'),
200
+ caseSensitive: z.boolean().optional().default(false).describe('Case-sensitive search'),
201
+ maxResults: z.number().optional().default(50).describe('Maximum number of results'),
202
+ contextLines: z.number().optional().default(2).describe('Lines of context around matches'),
203
+ });
204
+ export async function searchFiles(input) {
205
+ const { query, directory, filePattern, caseSensitive, maxResults, contextLines } = input;
206
+ logger.info('Searching files', { query, directory, filePattern });
207
+ try {
208
+ const absolutePath = path.isAbsolute(directory) ? directory : path.resolve(process.cwd(), directory);
209
+ const matches = [];
210
+ let filesSearched = 0;
211
+ let totalMatches = 0;
212
+ const regex = new RegExp(query, caseSensitive ? 'g' : 'gi');
213
+ // Get all files
214
+ const filesResult = await listFiles({
215
+ directory: absolutePath,
216
+ pattern: filePattern,
217
+ recursive: true,
218
+ includeHidden: false,
219
+ maxDepth: 10,
220
+ });
221
+ for (const file of filesResult.files) {
222
+ if (file.type !== 'file')
223
+ continue;
224
+ if (!isSearchableFile(file.name))
225
+ continue;
226
+ if (matches.length >= maxResults)
227
+ break;
228
+ filesSearched++;
229
+ try {
230
+ const fullPath = path.join(absolutePath, file.path);
231
+ const content = await fs.readFile(fullPath, 'utf-8');
232
+ const lines = content.split('\n');
233
+ for (let i = 0; i < lines.length; i++) {
234
+ const line = lines[i];
235
+ let match;
236
+ regex.lastIndex = 0;
237
+ while ((match = regex.exec(line)) !== null) {
238
+ totalMatches++;
239
+ if (matches.length < maxResults) {
240
+ // Get context lines
241
+ const startLine = Math.max(0, i - contextLines);
242
+ const endLine = Math.min(lines.length - 1, i + contextLines);
243
+ const contextText = lines.slice(startLine, endLine + 1).join('\n');
244
+ matches.push({
245
+ file: file.path,
246
+ line: i + 1,
247
+ column: match.index + 1,
248
+ match: match[0],
249
+ context: contextText,
250
+ });
251
+ }
252
+ }
253
+ }
254
+ }
255
+ catch {
256
+ // Skip files that can't be read
257
+ }
258
+ }
259
+ return {
260
+ query,
261
+ matches,
262
+ filesSearched,
263
+ totalMatches,
264
+ truncated: totalMatches > maxResults,
265
+ };
266
+ }
267
+ catch (error) {
268
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
269
+ logger.error('Failed to search files', { query, error: errorMessage });
270
+ throw new Error(`Failed to search files: ${errorMessage}`);
271
+ }
272
+ }
273
+ // ============================================================================
274
+ // GET WORKSPACE CONTEXT TOOL
275
+ // ============================================================================
276
+ export const getWorkspaceContextSchema = z.object({
277
+ directory: z.string().optional().default('.').describe('Workspace root directory'),
278
+ includePackageJson: z.boolean().optional().default(true).describe('Parse package.json for dependencies'),
279
+ maxFiles: z.number().optional().default(100).describe('Max files to include in structure'),
280
+ });
281
+ export async function getWorkspaceContext(input) {
282
+ const { directory, includePackageJson, maxFiles } = input;
283
+ logger.info('Getting workspace context', { directory });
284
+ try {
285
+ const absolutePath = path.isAbsolute(directory) ? directory : path.resolve(process.cwd(), directory);
286
+ const workspaceName = path.basename(absolutePath);
287
+ let dependencies = {};
288
+ let devDependencies = {};
289
+ const techStack = [];
290
+ const patterns = [];
291
+ // Parse package.json if exists
292
+ if (includePackageJson) {
293
+ try {
294
+ const pkgPath = path.join(absolutePath, 'package.json');
295
+ const pkgContent = await fs.readFile(pkgPath, 'utf-8');
296
+ const pkg = JSON.parse(pkgContent);
297
+ dependencies = pkg.dependencies || {};
298
+ devDependencies = pkg.devDependencies || {};
299
+ // Detect tech stack from dependencies
300
+ const allDeps = { ...dependencies, ...devDependencies };
301
+ if (allDeps['react'])
302
+ techStack.push('React');
303
+ if (allDeps['next'])
304
+ techStack.push('Next.js');
305
+ if (allDeps['vue'])
306
+ techStack.push('Vue.js');
307
+ if (allDeps['svelte'])
308
+ techStack.push('Svelte');
309
+ if (allDeps['express'])
310
+ techStack.push('Express.js');
311
+ if (allDeps['typescript'])
312
+ techStack.push('TypeScript');
313
+ if (allDeps['tailwindcss'])
314
+ techStack.push('Tailwind CSS');
315
+ if (allDeps['prisma'])
316
+ techStack.push('Prisma');
317
+ if (allDeps['firebase'])
318
+ techStack.push('Firebase');
319
+ if (allDeps['@google/generative-ai'])
320
+ techStack.push('Google Gemini');
321
+ if (allDeps['openai'])
322
+ techStack.push('OpenAI');
323
+ if (allDeps['@anthropic-ai/sdk'])
324
+ techStack.push('Anthropic Claude');
325
+ if (allDeps['zod'])
326
+ techStack.push('Zod');
327
+ if (allDeps['vite'])
328
+ techStack.push('Vite');
329
+ }
330
+ catch {
331
+ // No package.json or can't parse
332
+ }
333
+ }
334
+ // Get file structure
335
+ const filesResult = await listFiles({
336
+ directory: absolutePath,
337
+ recursive: true,
338
+ includeHidden: false,
339
+ maxDepth: 3,
340
+ });
341
+ const structure = filesResult.files
342
+ .slice(0, maxFiles)
343
+ .map(f => f.type === 'directory' ? `${f.path}/` : f.path);
344
+ // Detect patterns from structure
345
+ const dirs = new Set(structure.filter(s => s.endsWith('/')).map(s => s.split('/')[0]));
346
+ if (dirs.has('src/'))
347
+ patterns.push('src/ directory structure');
348
+ if (dirs.has('components/') || structure.some(s => s.includes('/components/')))
349
+ patterns.push('Component-based architecture');
350
+ if (dirs.has('api/') || dirs.has('routes/'))
351
+ patterns.push('API routes');
352
+ if (dirs.has('hooks/') || structure.some(s => s.includes('/use')))
353
+ patterns.push('Custom hooks');
354
+ if (dirs.has('services/'))
355
+ patterns.push('Service layer');
356
+ if (dirs.has('utils/'))
357
+ patterns.push('Utility functions');
358
+ if (structure.some(s => s.includes('.test.') || s.includes('.spec.')))
359
+ patterns.push('Test suite');
360
+ if (structure.some(s => s.endsWith('.ts') || s.endsWith('.tsx')))
361
+ patterns.push('TypeScript');
362
+ // Generate summary
363
+ const summaryParts = [];
364
+ if (techStack.length > 0) {
365
+ summaryParts.push(`${techStack.slice(0, 3).join(', ')} project`);
366
+ }
367
+ else {
368
+ summaryParts.push(`${workspaceName} project`);
369
+ }
370
+ if (patterns.length > 0) {
371
+ summaryParts.push(`with ${patterns.slice(0, 2).join(' and ')}`);
372
+ }
373
+ return {
374
+ name: workspaceName,
375
+ path: absolutePath,
376
+ techStack,
377
+ dependencies,
378
+ devDependencies,
379
+ structure,
380
+ patterns,
381
+ summary: summaryParts.join(' '),
382
+ };
383
+ }
384
+ catch (error) {
385
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
386
+ logger.error('Failed to get workspace context', { directory, error: errorMessage });
387
+ throw new Error(`Failed to get workspace context: ${errorMessage}`);
388
+ }
389
+ }
390
+ // ============================================================================
391
+ // HELPER FUNCTIONS
392
+ // ============================================================================
393
+ const SKIP_DIRECTORIES = new Set([
394
+ 'node_modules', '.git', 'dist', 'build', 'out', '.next', '.nuxt',
395
+ 'coverage', '.vscode', '.idea', '__pycache__', 'venv', 'vendor',
396
+ 'target', 'bin', 'obj', '.cache', '.turbo',
397
+ ]);
398
+ const SEARCHABLE_EXTENSIONS = new Set([
399
+ '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
400
+ '.py', '.java', '.go', '.rs', '.c', '.cpp', '.h', '.hpp',
401
+ '.cs', '.rb', '.php', '.swift', '.kt',
402
+ '.vue', '.svelte', '.html', '.css', '.scss', '.less',
403
+ '.json', '.yaml', '.yml', '.toml', '.xml',
404
+ '.md', '.mdx', '.txt',
405
+ '.sql', '.sh', '.bash',
406
+ ]);
407
+ function detectLanguage(filePath) {
408
+ const ext = path.extname(filePath).toLowerCase();
409
+ const languageMap = {
410
+ '.ts': 'TypeScript',
411
+ '.tsx': 'TypeScript React',
412
+ '.js': 'JavaScript',
413
+ '.jsx': 'JavaScript React',
414
+ '.py': 'Python',
415
+ '.java': 'Java',
416
+ '.go': 'Go',
417
+ '.rs': 'Rust',
418
+ '.c': 'C',
419
+ '.cpp': 'C++',
420
+ '.cs': 'C#',
421
+ '.rb': 'Ruby',
422
+ '.php': 'PHP',
423
+ '.swift': 'Swift',
424
+ '.kt': 'Kotlin',
425
+ '.vue': 'Vue',
426
+ '.svelte': 'Svelte',
427
+ '.html': 'HTML',
428
+ '.css': 'CSS',
429
+ '.scss': 'SCSS',
430
+ '.json': 'JSON',
431
+ '.yaml': 'YAML',
432
+ '.yml': 'YAML',
433
+ '.md': 'Markdown',
434
+ '.sql': 'SQL',
435
+ '.sh': 'Shell',
436
+ };
437
+ return languageMap[ext] || 'Text';
438
+ }
439
+ function isSearchableFile(filename) {
440
+ const ext = path.extname(filename).toLowerCase();
441
+ return SEARCHABLE_EXTENSIONS.has(ext);
442
+ }
443
+ function matchesPattern(filename, pattern) {
444
+ // Simple glob matching
445
+ const regexPattern = pattern
446
+ .replace(/\./g, '\\.')
447
+ .replace(/\*/g, '.*')
448
+ .replace(/\?/g, '.');
449
+ return new RegExp(`^${regexPattern}$`, 'i').test(filename);
450
+ }
451
+ export default {
452
+ readFile,
453
+ readFileSchema,
454
+ writeFile,
455
+ writeFileSchema,
456
+ listFiles,
457
+ listFilesSchema,
458
+ searchFiles,
459
+ searchFilesSchema,
460
+ getWorkspaceContext,
461
+ getWorkspaceContextSchema,
462
+ };
463
+ //# sourceMappingURL=workspaceTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaceTools.js","sourceRoot":"","sources":["../../src/tools/workspaceTools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@merabylabs/promptarchitect-mcp",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "MCP server for PromptArchitect Prompt Lab - AI-powered prompt engineering with workspace-aware refinement. Works with Claude, Cursor, VS Code, Windsurf, Zed & more",
5
5
  "keywords": [
6
6
  "mcp",