@stacksfinder/mcp-server 1.1.0 → 1.2.1

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 (94) hide show
  1. package/LICENSE +16 -16
  2. package/README.md +92 -3
  3. package/dist/compatibility/index.d.ts +11 -0
  4. package/dist/compatibility/index.d.ts.map +1 -0
  5. package/dist/compatibility/index.js +13 -0
  6. package/dist/compatibility/index.js.map +1 -0
  7. package/dist/compatibility/rules.d.ts +29 -0
  8. package/dist/compatibility/rules.d.ts.map +1 -0
  9. package/dist/compatibility/rules.js +419 -0
  10. package/dist/compatibility/rules.js.map +1 -0
  11. package/dist/compatibility/scoring.d.ts +54 -0
  12. package/dist/compatibility/scoring.d.ts.map +1 -0
  13. package/dist/compatibility/scoring.js +209 -0
  14. package/dist/compatibility/scoring.js.map +1 -0
  15. package/dist/compatibility/types.d.ts +176 -0
  16. package/dist/compatibility/types.d.ts.map +1 -0
  17. package/dist/compatibility/types.js +26 -0
  18. package/dist/compatibility/types.js.map +1 -0
  19. package/dist/compatibility/utils.d.ts +82 -0
  20. package/dist/compatibility/utils.d.ts.map +1 -0
  21. package/dist/compatibility/utils.js +269 -0
  22. package/dist/compatibility/utils.js.map +1 -0
  23. package/dist/data/357/200/242/357/200/212cp H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serversrcdatacompatibility_matrix.json H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serverdistdata/357/200/242" +226 -0
  24. package/dist/http.d.ts +7 -0
  25. package/dist/http.d.ts.map +1 -0
  26. package/dist/http.js +69 -0
  27. package/dist/http.js.map +1 -0
  28. package/dist/lib/mcp-compatibility/index.d.ts +33 -0
  29. package/dist/lib/mcp-compatibility/index.d.ts.map +1 -0
  30. package/dist/lib/mcp-compatibility/index.js +35 -0
  31. package/dist/lib/mcp-compatibility/index.js.map +1 -0
  32. package/dist/lib/mcp-compatibility/rules.d.ts +29 -0
  33. package/dist/lib/mcp-compatibility/rules.d.ts.map +1 -0
  34. package/dist/lib/mcp-compatibility/rules.js +419 -0
  35. package/dist/lib/mcp-compatibility/rules.js.map +1 -0
  36. package/dist/lib/mcp-compatibility/scoring.d.ts +54 -0
  37. package/dist/lib/mcp-compatibility/scoring.d.ts.map +1 -0
  38. package/dist/lib/mcp-compatibility/scoring.js +209 -0
  39. package/dist/lib/mcp-compatibility/scoring.js.map +1 -0
  40. package/dist/lib/mcp-compatibility/types.d.ts +176 -0
  41. package/dist/lib/mcp-compatibility/types.d.ts.map +1 -0
  42. package/dist/lib/mcp-compatibility/types.js +26 -0
  43. package/dist/lib/mcp-compatibility/types.js.map +1 -0
  44. package/dist/lib/mcp-compatibility/utils.d.ts +82 -0
  45. package/dist/lib/mcp-compatibility/utils.d.ts.map +1 -0
  46. package/dist/lib/mcp-compatibility/utils.js +269 -0
  47. package/dist/lib/mcp-compatibility/utils.js.map +1 -0
  48. package/dist/server.d.ts.map +1 -1
  49. package/dist/server.js +296 -1
  50. package/dist/server.js.map +1 -1
  51. package/dist/tools/check-compatibility.d.ts +43 -0
  52. package/dist/tools/check-compatibility.d.ts.map +1 -0
  53. package/dist/tools/check-compatibility.js +133 -0
  54. package/dist/tools/check-compatibility.js.map +1 -0
  55. package/dist/tools/project-kit/analyze-repo.d.ts +50 -0
  56. package/dist/tools/project-kit/analyze-repo.d.ts.map +1 -0
  57. package/dist/tools/project-kit/analyze-repo.js +456 -0
  58. package/dist/tools/project-kit/analyze-repo.js.map +1 -0
  59. package/dist/tools/project-kit/detect-stack.d.ts +16 -0
  60. package/dist/tools/project-kit/detect-stack.d.ts.map +1 -0
  61. package/dist/tools/project-kit/detect-stack.js +572 -0
  62. package/dist/tools/project-kit/detect-stack.js.map +1 -0
  63. package/dist/tools/project-kit/execute-installation.d.ts +50 -0
  64. package/dist/tools/project-kit/execute-installation.d.ts.map +1 -0
  65. package/dist/tools/project-kit/execute-installation.js +440 -0
  66. package/dist/tools/project-kit/execute-installation.js.map +1 -0
  67. package/dist/tools/project-kit/generate.d.ts +70 -0
  68. package/dist/tools/project-kit/generate.d.ts.map +1 -0
  69. package/dist/tools/project-kit/generate.js +455 -0
  70. package/dist/tools/project-kit/generate.js.map +1 -0
  71. package/dist/tools/project-kit/index.d.ts +18 -0
  72. package/dist/tools/project-kit/index.d.ts.map +1 -0
  73. package/dist/tools/project-kit/index.js +21 -0
  74. package/dist/tools/project-kit/index.js.map +1 -0
  75. package/dist/tools/project-kit/installation-types.d.ts +147 -0
  76. package/dist/tools/project-kit/installation-types.d.ts.map +1 -0
  77. package/dist/tools/project-kit/installation-types.js +491 -0
  78. package/dist/tools/project-kit/installation-types.js.map +1 -0
  79. package/dist/tools/project-kit/match-mcps.d.ts +67 -0
  80. package/dist/tools/project-kit/match-mcps.d.ts.map +1 -0
  81. package/dist/tools/project-kit/match-mcps.js +497 -0
  82. package/dist/tools/project-kit/match-mcps.js.map +1 -0
  83. package/dist/tools/project-kit/prepare-installation.d.ts +54 -0
  84. package/dist/tools/project-kit/prepare-installation.d.ts.map +1 -0
  85. package/dist/tools/project-kit/prepare-installation.js +382 -0
  86. package/dist/tools/project-kit/prepare-installation.js.map +1 -0
  87. package/dist/tools/project-kit/types.d.ts +200 -0
  88. package/dist/tools/project-kit/types.d.ts.map +1 -0
  89. package/dist/tools/project-kit/types.js +76 -0
  90. package/dist/tools/project-kit/types.js.map +1 -0
  91. package/dist/tools/recommend.d.ts.map +1 -1
  92. package/dist/tools/recommend.js +26 -10
  93. package/dist/tools/recommend.js.map +1 -1
  94. package/package.json +8 -3
@@ -0,0 +1,382 @@
1
+ /**
2
+ * prepare_mcp_installation Tool
3
+ *
4
+ * Analyzes a repository, detects needed MCPs, and generates a .env-mcp
5
+ * template file for the user to fill in with their API keys.
6
+ */
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
9
+ import { z } from 'zod';
10
+ import { PrepareMCPInstallationInputSchema, getMCPRegistryEntry } from './installation-types.js';
11
+ import { analyzeRepo } from './analyze-repo.js';
12
+ import { info, error, debug } from '../../utils/logger.js';
13
+ // ============================================================================
14
+ // ENV-MCP FILE GENERATION
15
+ // ============================================================================
16
+ /**
17
+ * Generate the content for .env-mcp file.
18
+ */
19
+ function generateEnvMcpContent(mcpsToInstall) {
20
+ const lines = [];
21
+ const timestamp = new Date().toISOString();
22
+ // Header
23
+ lines.push('# ============================================================================');
24
+ lines.push('# MCP INSTALLATION CONFIGURATION');
25
+ lines.push(`# Generated: ${timestamp}`);
26
+ lines.push('# ============================================================================');
27
+ lines.push('#');
28
+ lines.push('# This file contains environment variables needed for MCP server installation.');
29
+ lines.push('# Fill in the values for the MCPs you want to install.');
30
+ lines.push('#');
31
+ lines.push('# Requirements:');
32
+ lines.push('# [REQUIRED] - Must be filled for the MCP to work');
33
+ lines.push('# [OPTIONAL] - Can be left empty, MCP will use defaults');
34
+ lines.push('# [CONDITIONAL] - Required only if specific feature is used');
35
+ lines.push('#');
36
+ lines.push('# After filling in the values, run the execute_mcp_installation tool');
37
+ lines.push('# to install the MCPs.');
38
+ lines.push('# ============================================================================');
39
+ lines.push('');
40
+ // Installation Control Section
41
+ lines.push('# ============================================================================');
42
+ lines.push('# INSTALLATION CONTROL');
43
+ lines.push('# ============================================================================');
44
+ lines.push('# Set to "true" for MCPs you want to install, "false" to skip.');
45
+ lines.push('');
46
+ for (const mcp of mcpsToInstall) {
47
+ const varName = `INSTALL_${mcp.slug.toUpperCase().replace(/-/g, '_')}`;
48
+ lines.push(`# ${mcp.name} - ${mcp.description}`);
49
+ lines.push(`# Priority: ${mcp.priority.toUpperCase()} | Matched: ${mcp.matchedTech}`);
50
+ lines.push(`${varName}=true`);
51
+ lines.push('');
52
+ }
53
+ // Group MCPs by category
54
+ const mcpsByCategory = new Map();
55
+ for (const mcp of mcpsToInstall) {
56
+ const category = mcp.category;
57
+ if (!mcpsByCategory.has(category)) {
58
+ mcpsByCategory.set(category, []);
59
+ }
60
+ mcpsByCategory.get(category).push(mcp);
61
+ }
62
+ // Generate env vars by category
63
+ for (const [category, mcps] of mcpsByCategory) {
64
+ lines.push('# ============================================================================');
65
+ lines.push(`# ${category.toUpperCase().replace(/-/g, ' ')}`);
66
+ lines.push('# ============================================================================');
67
+ lines.push('');
68
+ for (const mcp of mcps) {
69
+ lines.push(`# --- ${mcp.name} ---`);
70
+ if (mcp.docsUrl) {
71
+ lines.push(`# Docs: ${mcp.docsUrl}`);
72
+ }
73
+ if (mcp.githubUrl) {
74
+ lines.push(`# GitHub: ${mcp.githubUrl}`);
75
+ }
76
+ lines.push('');
77
+ if (mcp.envVars.length === 0) {
78
+ lines.push('# No environment variables required for this MCP.');
79
+ lines.push('');
80
+ }
81
+ else {
82
+ for (const envVar of mcp.envVars) {
83
+ const requirementTag = `[${envVar.requirement.toUpperCase()}]`;
84
+ lines.push(`# ${requirementTag} ${envVar.description}`);
85
+ if (envVar.example) {
86
+ lines.push(`# Example: ${envVar.example}`);
87
+ }
88
+ if (envVar.condition) {
89
+ lines.push(`# Condition: ${envVar.condition}`);
90
+ }
91
+ lines.push(`${envVar.name}=`);
92
+ lines.push('');
93
+ }
94
+ }
95
+ }
96
+ }
97
+ // Footer
98
+ lines.push('# ============================================================================');
99
+ lines.push('# END OF CONFIGURATION');
100
+ lines.push('# ============================================================================');
101
+ lines.push('# Run: execute_mcp_installation to install the MCPs with these settings.');
102
+ lines.push('');
103
+ return lines.join('\n');
104
+ }
105
+ /**
106
+ * Convert MCPRecommendation to MCPInstallInfo with full details.
107
+ */
108
+ function enrichMCPRecommendation(slug, matchedTech, priority, category) {
109
+ const registryEntry = getMCPRegistryEntry(slug);
110
+ if (!registryEntry) {
111
+ // Fallback for MCPs not in registry
112
+ debug(`MCP ${slug} not found in registry, using minimal info`);
113
+ return {
114
+ slug,
115
+ name: formatMCPName(slug),
116
+ description: `MCP server for ${matchedTech}`,
117
+ priority: priority,
118
+ matchedTech,
119
+ category,
120
+ installCommand: `npx -y ${slug}`,
121
+ envVars: []
122
+ };
123
+ }
124
+ return {
125
+ slug: registryEntry.slug,
126
+ name: registryEntry.name,
127
+ description: registryEntry.description,
128
+ priority: priority,
129
+ matchedTech,
130
+ category: registryEntry.category,
131
+ installCommand: `npx -y ${registryEntry.npmPackage}`,
132
+ envVars: registryEntry.envVars,
133
+ githubUrl: registryEntry.githubUrl,
134
+ docsUrl: registryEntry.docsUrl
135
+ };
136
+ }
137
+ /**
138
+ * Format MCP slug into human-readable name.
139
+ */
140
+ function formatMCPName(slug) {
141
+ return slug
142
+ .replace(/-mcp$/, '')
143
+ .split('-')
144
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
145
+ .join(' ')
146
+ .concat(' MCP');
147
+ }
148
+ // ============================================================================
149
+ // TOOL IMPLEMENTATION
150
+ // ============================================================================
151
+ /**
152
+ * Prepare MCP installation by analyzing repo and generating .env-mcp.
153
+ */
154
+ export async function prepareMCPInstallation(input) {
155
+ const workspaceRoot = input.workspaceRoot || process.cwd();
156
+ const envMcpPath = input.envMcpPath || path.join(workspaceRoot, '.env-mcp');
157
+ info(`Preparing MCP installation for workspace: ${workspaceRoot}`);
158
+ // Step 1: Analyze the repository
159
+ const analysisResult = await analyzeRepo({
160
+ workspaceRoot,
161
+ mcpConfigPath: input.mcpConfigPath,
162
+ includeInstalled: input.includeInstalled
163
+ });
164
+ // Step 2: Enrich recommendations with full install info
165
+ const mcpsToInstall = [];
166
+ for (const rec of analysisResult.recommendedMcps) {
167
+ const installInfo = enrichMCPRecommendation(rec.slug, rec.matchedTech, rec.priority, rec.category);
168
+ if (installInfo) {
169
+ mcpsToInstall.push(installInfo);
170
+ }
171
+ }
172
+ info(`Found ${mcpsToInstall.length} MCPs to install`);
173
+ // Step 3: Generate .env-mcp content
174
+ const envMcpContent = generateEnvMcpContent(mcpsToInstall);
175
+ // Step 4: Write .env-mcp file
176
+ try {
177
+ await fs.writeFile(envMcpPath, envMcpContent, 'utf-8');
178
+ info(`Generated .env-mcp at: ${envMcpPath}`);
179
+ }
180
+ catch (err) {
181
+ error(`Failed to write .env-mcp: ${err}`);
182
+ throw new Error(`Failed to write .env-mcp file: ${err}`);
183
+ }
184
+ // Step 5: Generate summary message
185
+ const requiredVarsCount = mcpsToInstall.reduce((count, mcp) => count + mcp.envVars.filter((v) => v.requirement === 'required').length, 0);
186
+ const message = [
187
+ `✅ Generated .env-mcp with ${mcpsToInstall.length} MCP(s) to install.`,
188
+ '',
189
+ '📋 Next steps:',
190
+ `1. Open ${envMcpPath}`,
191
+ `2. Fill in the ${requiredVarsCount} required environment variable(s)`,
192
+ '3. Set INSTALL_xxx=false for any MCPs you want to skip',
193
+ '4. Run execute_mcp_installation to install the MCPs',
194
+ '',
195
+ `📁 File location: ${envMcpPath}`
196
+ ].join('\n');
197
+ return {
198
+ envMcpPath,
199
+ mcpsToInstall,
200
+ installedMcps: analysisResult.installedMcps,
201
+ message,
202
+ envMcpContent
203
+ };
204
+ }
205
+ // ============================================================================
206
+ // TOOL HANDLER
207
+ // ============================================================================
208
+ /**
209
+ * Tool definition for MCP server registration.
210
+ */
211
+ export const prepareMCPInstallationTool = {
212
+ name: 'prepare_mcp_installation',
213
+ description: `Analyze your repository and generate a .env-mcp configuration file for MCP server installation.
214
+
215
+ This tool:
216
+ 1. Detects your tech stack from project files (package.json, .env, etc.)
217
+ 2. Identifies which MCP servers would benefit your project
218
+ 3. Finds already installed MCPs to avoid duplicates
219
+ 4. Generates a .env-mcp template file with all required environment variables
220
+
221
+ The generated .env-mcp file contains:
222
+ - INSTALL_xxx flags to control which MCPs to install
223
+ - Required and optional environment variables for each MCP
224
+ - Documentation links and examples
225
+
226
+ After running this tool:
227
+ 1. Open the generated .env-mcp file
228
+ 2. Fill in the API keys and configuration values
229
+ 3. Set INSTALL_xxx=false for MCPs you don't want
230
+ 4. Run execute_mcp_installation to complete the setup
231
+
232
+ Example use cases:
233
+ - "Prepare MCP installation for my project"
234
+ - "Generate .env-mcp for my tech stack"
235
+ - "What MCPs do I need and what credentials do they require?"`,
236
+ inputSchema: {
237
+ type: 'object',
238
+ properties: {
239
+ workspaceRoot: {
240
+ type: 'string',
241
+ description: 'Workspace root directory (default: current directory)'
242
+ },
243
+ mcpConfigPath: {
244
+ type: 'string',
245
+ description: 'Override path to existing MCP configuration file'
246
+ },
247
+ includeInstalled: {
248
+ type: 'boolean',
249
+ description: 'Include already installed MCPs in the preparation (default: false)',
250
+ default: false
251
+ },
252
+ envMcpPath: {
253
+ type: 'string',
254
+ description: 'Path where .env-mcp will be created (default: .env-mcp in workspaceRoot)'
255
+ }
256
+ }
257
+ },
258
+ handler: async (params) => {
259
+ try {
260
+ const input = PrepareMCPInstallationInputSchema.parse(params);
261
+ const result = await prepareMCPInstallation(input);
262
+ // Format output for display
263
+ const output = formatPreparationOutput(result);
264
+ return {
265
+ content: [
266
+ {
267
+ type: 'text',
268
+ text: output
269
+ }
270
+ ]
271
+ };
272
+ }
273
+ catch (err) {
274
+ if (err instanceof z.ZodError) {
275
+ error('Invalid input:', err.errors);
276
+ return {
277
+ content: [
278
+ {
279
+ type: 'text',
280
+ text: `Invalid input: ${err.errors.map((e) => e.message).join(', ')}`
281
+ }
282
+ ],
283
+ isError: true
284
+ };
285
+ }
286
+ error('prepare_mcp_installation error:', err);
287
+ throw err;
288
+ }
289
+ }
290
+ };
291
+ // ============================================================================
292
+ // OUTPUT FORMATTING
293
+ // ============================================================================
294
+ /**
295
+ * Format preparation output for display.
296
+ */
297
+ function formatPreparationOutput(result) {
298
+ const lines = [];
299
+ lines.push('# MCP Installation Preparation\n');
300
+ // Summary
301
+ lines.push('## Summary\n');
302
+ lines.push(`- **MCPs to install**: ${result.mcpsToInstall.length}`);
303
+ lines.push(`- **Already installed**: ${result.installedMcps.length}`);
304
+ lines.push(`- **Config file**: \`${result.envMcpPath}\``);
305
+ lines.push('');
306
+ // Already installed
307
+ if (result.installedMcps.length > 0) {
308
+ lines.push('## Already Installed MCPs\n');
309
+ for (const mcp of result.installedMcps) {
310
+ lines.push(`- ✅ ${mcp}`);
311
+ }
312
+ lines.push('');
313
+ }
314
+ // MCPs to install
315
+ if (result.mcpsToInstall.length > 0) {
316
+ lines.push('## MCPs to Install\n');
317
+ // Group by priority
318
+ const highPriority = result.mcpsToInstall.filter((m) => m.priority === 'high');
319
+ const mediumPriority = result.mcpsToInstall.filter((m) => m.priority === 'medium');
320
+ const lowPriority = result.mcpsToInstall.filter((m) => m.priority === 'low');
321
+ if (highPriority.length > 0) {
322
+ lines.push('### 🔴 High Priority\n');
323
+ for (const mcp of highPriority) {
324
+ const requiredVars = mcp.envVars.filter((v) => v.requirement === 'required');
325
+ lines.push(`**${mcp.name}** (\`${mcp.slug}\`)`);
326
+ lines.push(`- ${mcp.description}`);
327
+ lines.push(`- Matched: ${mcp.matchedTech}`);
328
+ if (requiredVars.length > 0) {
329
+ lines.push(`- Required vars: ${requiredVars.map((v) => v.name).join(', ')}`);
330
+ }
331
+ else {
332
+ lines.push('- No credentials required');
333
+ }
334
+ lines.push('');
335
+ }
336
+ }
337
+ if (mediumPriority.length > 0) {
338
+ lines.push('### 🟡 Medium Priority\n');
339
+ for (const mcp of mediumPriority) {
340
+ const requiredVars = mcp.envVars.filter((v) => v.requirement === 'required');
341
+ lines.push(`**${mcp.name}** (\`${mcp.slug}\`)`);
342
+ lines.push(`- ${mcp.description}`);
343
+ lines.push(`- Matched: ${mcp.matchedTech}`);
344
+ if (requiredVars.length > 0) {
345
+ lines.push(`- Required vars: ${requiredVars.map((v) => v.name).join(', ')}`);
346
+ }
347
+ else {
348
+ lines.push('- No credentials required');
349
+ }
350
+ lines.push('');
351
+ }
352
+ }
353
+ if (lowPriority.length > 0) {
354
+ lines.push('### 🟢 Low Priority\n');
355
+ for (const mcp of lowPriority) {
356
+ const requiredVars = mcp.envVars.filter((v) => v.requirement === 'required');
357
+ lines.push(`**${mcp.name}** (\`${mcp.slug}\`)`);
358
+ lines.push(`- ${mcp.description}`);
359
+ lines.push(`- Matched: ${mcp.matchedTech}`);
360
+ if (requiredVars.length > 0) {
361
+ lines.push(`- Required vars: ${requiredVars.map((v) => v.name).join(', ')}`);
362
+ }
363
+ else {
364
+ lines.push('- No credentials required');
365
+ }
366
+ lines.push('');
367
+ }
368
+ }
369
+ }
370
+ // Next steps
371
+ lines.push('## Next Steps\n');
372
+ lines.push('1. 📝 Open the generated `.env-mcp` file');
373
+ lines.push('2. 🔑 Fill in the required API keys and credentials');
374
+ lines.push('3. ⚙️ Set `INSTALL_xxx=false` for MCPs you want to skip');
375
+ lines.push('4. 🚀 Run `execute_mcp_installation` to install the MCPs');
376
+ lines.push('');
377
+ // File location
378
+ lines.push('---\n');
379
+ lines.push(`📁 Configuration file: \`${result.envMcpPath}\``);
380
+ return lines.join('\n');
381
+ }
382
+ //# sourceMappingURL=prepare-installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-installation.js","sourceRoot":"","sources":["../../../src/tools/project-kit/prepare-installation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Shared types for MCPFinder project-kit tools.
3
+ *
4
+ * These types define the input/output schemas for:
5
+ * - generate_mcp_kit: Project description -> stack + MCPs
6
+ * - analyze_repo_mcps: Repo files -> detected stack -> MCPs
7
+ */
8
+ import { z } from 'zod';
9
+ export declare const PRIORITIES: readonly ["time-to-market", "scalability", "developer-experience", "cost-efficiency", "performance", "security", "maintainability"];
10
+ export type Priority = (typeof PRIORITIES)[number];
11
+ export declare const PROJECT_TYPES: readonly ["web-app", "mobile-app", "api", "saas", "e-commerce", "marketplace", "cli", "library"];
12
+ export type ProjectType = (typeof PROJECT_TYPES)[number];
13
+ export declare const SCALES: readonly ["mvp", "startup", "growth", "enterprise"];
14
+ export type Scale = (typeof SCALES)[number];
15
+ export declare const TECH_TYPES: readonly ["frontend", "backend", "database", "orm", "service", "auth", "hosting", "payments"];
16
+ export type TechType = (typeof TECH_TYPES)[number];
17
+ export declare const MCP_PRIORITIES: readonly ["high", "medium", "low"];
18
+ export type MCPPriority = (typeof MCP_PRIORITIES)[number];
19
+ /**
20
+ * A detected technology from project files.
21
+ */
22
+ export interface Detection {
23
+ type: TechType;
24
+ name: string;
25
+ version?: string;
26
+ confidence: number;
27
+ source: string;
28
+ }
29
+ /**
30
+ * Aggregated detected stack from all sources.
31
+ */
32
+ export interface DetectedStack {
33
+ frontend?: DetectedTech;
34
+ backend?: DetectedTech;
35
+ database?: DetectedTech;
36
+ orm?: DetectedTech;
37
+ auth?: DetectedTech;
38
+ hosting?: DetectedTech;
39
+ payments?: DetectedTech;
40
+ services: DetectedTech[];
41
+ }
42
+ export interface DetectedTech {
43
+ name: string;
44
+ version?: string;
45
+ confidence: number;
46
+ source: string;
47
+ }
48
+ /**
49
+ * A recommended MCP server.
50
+ */
51
+ export interface MCPRecommendation {
52
+ slug: string;
53
+ name: string;
54
+ description: string;
55
+ priority: MCPPriority;
56
+ reason: string;
57
+ matchedTech: string;
58
+ installCommand?: string;
59
+ category: string;
60
+ githubUrl?: string;
61
+ }
62
+ /**
63
+ * Install configuration for multiple clients.
64
+ */
65
+ export interface MCPInstallConfigs {
66
+ cursor: Record<string, unknown>;
67
+ claudeDesktop: Record<string, unknown>;
68
+ windsurf: Record<string, unknown>;
69
+ }
70
+ export declare const GenerateMCPKitInputSchema: z.ZodObject<{
71
+ projectDescription: z.ZodString;
72
+ priorities: z.ZodOptional<z.ZodArray<z.ZodEnum<["time-to-market", "scalability", "developer-experience", "cost-efficiency", "performance", "security", "maintainability"]>, "many">>;
73
+ constraints: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
74
+ projectType: z.ZodOptional<z.ZodEnum<["web-app", "mobile-app", "api", "saas", "e-commerce", "marketplace", "cli", "library"]>>;
75
+ scale: z.ZodOptional<z.ZodEnum<["mvp", "startup", "growth", "enterprise"]>>;
76
+ }, "strip", z.ZodTypeAny, {
77
+ projectDescription: string;
78
+ projectType?: "web-app" | "mobile-app" | "api" | "cli" | "library" | "e-commerce" | "saas" | "marketplace" | undefined;
79
+ scale?: "mvp" | "enterprise" | "startup" | "growth" | undefined;
80
+ priorities?: ("time-to-market" | "scalability" | "developer-experience" | "cost-efficiency" | "performance" | "security" | "maintainability")[] | undefined;
81
+ constraints?: string[] | undefined;
82
+ }, {
83
+ projectDescription: string;
84
+ projectType?: "web-app" | "mobile-app" | "api" | "cli" | "library" | "e-commerce" | "saas" | "marketplace" | undefined;
85
+ scale?: "mvp" | "enterprise" | "startup" | "growth" | undefined;
86
+ priorities?: ("time-to-market" | "scalability" | "developer-experience" | "cost-efficiency" | "performance" | "security" | "maintainability")[] | undefined;
87
+ constraints?: string[] | undefined;
88
+ }>;
89
+ export type GenerateMCPKitInput = z.infer<typeof GenerateMCPKitInputSchema>;
90
+ export interface TechRecommendation {
91
+ id: string;
92
+ name: string;
93
+ score: number;
94
+ grade: string;
95
+ reason: string;
96
+ }
97
+ export interface GenerateMCPKitOutput {
98
+ stack: {
99
+ frontend?: TechRecommendation;
100
+ backend?: TechRecommendation;
101
+ database?: TechRecommendation;
102
+ auth?: TechRecommendation;
103
+ hosting?: TechRecommendation;
104
+ payments?: TechRecommendation;
105
+ };
106
+ mcps: MCPRecommendation[];
107
+ rationale: string;
108
+ detectedConstraints: string[];
109
+ metadata: {
110
+ scoringVersion: string;
111
+ generatedAt: string;
112
+ };
113
+ }
114
+ export declare const AnalyzeRepoMCPsInputSchema: z.ZodObject<{
115
+ includeInstalled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
116
+ mcpConfigPath: z.ZodOptional<z.ZodString>;
117
+ workspaceRoot: z.ZodOptional<z.ZodString>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ includeInstalled: boolean;
120
+ mcpConfigPath?: string | undefined;
121
+ workspaceRoot?: string | undefined;
122
+ }, {
123
+ includeInstalled?: boolean | undefined;
124
+ mcpConfigPath?: string | undefined;
125
+ workspaceRoot?: string | undefined;
126
+ }>;
127
+ export type AnalyzeRepoMCPsInput = z.infer<typeof AnalyzeRepoMCPsInputSchema>;
128
+ /**
129
+ * Compatibility check results for installed MCPs.
130
+ */
131
+ export interface MCPCompatibilityResult {
132
+ score: number;
133
+ grade: 'A' | 'B' | 'C' | 'D';
134
+ conflicts: Array<{
135
+ mcpA: string;
136
+ mcpB: string;
137
+ reason: string;
138
+ severity: 'critical' | 'warning' | 'info';
139
+ }>;
140
+ redundancies: Array<{
141
+ mcpA: string;
142
+ mcpB: string;
143
+ reason: string;
144
+ severity: 'critical' | 'warning' | 'info';
145
+ }>;
146
+ synergies: Array<{
147
+ mcpA: string;
148
+ mcpB: string;
149
+ reason: string;
150
+ }>;
151
+ suggestions: Array<{
152
+ mcp: string;
153
+ reason: string;
154
+ basedOn: string;
155
+ }>;
156
+ }
157
+ /**
158
+ * MCPs excluded from recommendations with reasons.
159
+ */
160
+ export interface ExcludedRecommendation {
161
+ mcp: string;
162
+ reason: string;
163
+ conflictsWith: string;
164
+ }
165
+ export interface AnalyzeRepoMCPsOutput {
166
+ detectedStack: DetectedStack;
167
+ installedMcps: string[];
168
+ recommendedMcps: MCPRecommendation[];
169
+ excludedRecommendations: ExcludedRecommendation[];
170
+ compatibility: {
171
+ installed: MCPCompatibilityResult;
172
+ recommendationConflicts: Array<{
173
+ recommended: string;
174
+ conflictsWith: string;
175
+ reason: string;
176
+ }>;
177
+ };
178
+ installConfig: MCPInstallConfigs;
179
+ metadata: {
180
+ filesAnalyzed: string[];
181
+ analysisDate: string;
182
+ };
183
+ }
184
+ export interface DetectionRule {
185
+ file: string;
186
+ parser: (content: string) => Detection[];
187
+ priority: number;
188
+ }
189
+ /**
190
+ * MCPs that are always recommended regardless of detected stack.
191
+ */
192
+ export declare const UNIVERSAL_MCPS: Array<{
193
+ slug: string;
194
+ name: string;
195
+ description: string;
196
+ priority: MCPPriority;
197
+ reason: string;
198
+ category: string;
199
+ }>;
200
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/project-kit/types.ts"],"names":[],"mappings":"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"}