@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,455 @@
1
+ /**
2
+ * generate_mcp_kit Tool
3
+ *
4
+ * Generates a complete project kit with optimal tech stack and MCP recommendations
5
+ * based on a project description.
6
+ */
7
+ import { z } from 'zod';
8
+ import { GenerateMCPKitInputSchema, PROJECT_TYPES, SCALES, PRIORITIES } from './types.js';
9
+ import { matchMCPsForTechnologies, generateInstallConfig } from './match-mcps.js';
10
+ import { DATA_VERSION, calculateOverallScore, getScores, getTechnologiesByCategory, scoreToGrade } from '../../data/index.js';
11
+ import { debug, info, error } from '../../utils/logger.js';
12
+ // ============================================================================
13
+ // PROJECT ANALYSIS
14
+ // ============================================================================
15
+ /**
16
+ * Keywords that help detect project type from description.
17
+ */
18
+ const PROJECT_TYPE_KEYWORDS = {
19
+ 'web-app': ['web app', 'website', 'web application', 'dashboard', 'portal', 'landing page'],
20
+ 'mobile-app': ['mobile', 'ios', 'android', 'react native', 'flutter', 'native app'],
21
+ api: ['api', 'rest', 'graphql', 'backend service', 'microservice', 'serverless function'],
22
+ saas: ['saas', 'subscription', 'multi-tenant', 'b2b', 'platform', 'software as a service'],
23
+ 'e-commerce': ['e-commerce', 'ecommerce', 'shop', 'store', 'cart', 'checkout', 'products'],
24
+ marketplace: ['marketplace', 'two-sided', 'buyers and sellers', 'listings', 'transactions'],
25
+ cli: ['cli', 'command line', 'terminal', 'console application'],
26
+ library: ['library', 'package', 'npm', 'module', 'sdk']
27
+ };
28
+ /**
29
+ * Keywords that help detect scale from description.
30
+ */
31
+ const SCALE_KEYWORDS = {
32
+ mvp: ['mvp', 'prototype', 'proof of concept', 'poc', 'quick', 'simple', 'basic', 'minimal'],
33
+ startup: ['startup', 'early stage', 'small team', 'growing', 'seed', 'series a'],
34
+ growth: ['growth', 'scaling', 'high traffic', 'production', 'mature', 'series b', 'series c'],
35
+ enterprise: ['enterprise', 'large scale', 'fortune 500', 'corporate', 'compliance', 'soc2']
36
+ };
37
+ /**
38
+ * Keywords that help detect priorities from description.
39
+ */
40
+ const PRIORITY_KEYWORDS = {
41
+ 'time-to-market': ['fast', 'quick', 'rapid', 'ship quickly', 'deadline', 'asap', 'mvp'],
42
+ scalability: ['scale', 'scalable', 'millions of users', 'high traffic', 'growth'],
43
+ 'developer-experience': ['developer experience', 'dx', 'easy to use', 'good tooling'],
44
+ 'cost-efficiency': ['budget', 'cheap', 'cost effective', 'affordable', 'low cost', 'free tier'],
45
+ performance: ['fast', 'performance', 'speed', 'low latency', 'optimized'],
46
+ security: ['security', 'secure', 'compliance', 'gdpr', 'hipaa', 'soc2', 'encryption'],
47
+ maintainability: ['maintainable', 'clean code', 'long term', 'easy to maintain', 'readable']
48
+ };
49
+ /**
50
+ * Detect project type from description.
51
+ */
52
+ function detectProjectType(description) {
53
+ const lowerDesc = description.toLowerCase();
54
+ for (const [type, keywords] of Object.entries(PROJECT_TYPE_KEYWORDS)) {
55
+ for (const keyword of keywords) {
56
+ if (lowerDesc.includes(keyword)) {
57
+ return type;
58
+ }
59
+ }
60
+ }
61
+ return 'web-app'; // Default
62
+ }
63
+ /**
64
+ * Detect scale from description.
65
+ */
66
+ function detectScale(description) {
67
+ const lowerDesc = description.toLowerCase();
68
+ for (const [scale, keywords] of Object.entries(SCALE_KEYWORDS)) {
69
+ for (const keyword of keywords) {
70
+ if (lowerDesc.includes(keyword)) {
71
+ return scale;
72
+ }
73
+ }
74
+ }
75
+ return 'mvp'; // Default
76
+ }
77
+ /**
78
+ * Detect priorities from description.
79
+ */
80
+ function detectPriorities(description) {
81
+ const lowerDesc = description.toLowerCase();
82
+ const detected = [];
83
+ for (const [priority, keywords] of Object.entries(PRIORITY_KEYWORDS)) {
84
+ for (const keyword of keywords) {
85
+ if (lowerDesc.includes(keyword)) {
86
+ detected.push(priority);
87
+ break;
88
+ }
89
+ }
90
+ }
91
+ // Return top 3
92
+ return detected.slice(0, 3);
93
+ }
94
+ /**
95
+ * Extract technology constraints from description.
96
+ */
97
+ function extractConstraints(description, explicitConstraints = []) {
98
+ const constraints = [...explicitConstraints];
99
+ const lowerDesc = description.toLowerCase();
100
+ // Common constraint patterns
101
+ const constraintPatterns = [
102
+ // Database constraints
103
+ { pattern: /\b(postgres|postgresql)\b/i, constraint: 'must-use-postgresql' },
104
+ { pattern: /\b(mysql)\b/i, constraint: 'must-use-mysql' },
105
+ { pattern: /\b(mongodb|mongo)\b/i, constraint: 'must-use-mongodb' },
106
+ { pattern: /\b(sqlite)\b/i, constraint: 'must-use-sqlite' },
107
+ // Framework constraints
108
+ { pattern: /\b(react|next\.?js)\b/i, constraint: 'must-use-react' },
109
+ { pattern: /\b(vue|nuxt)\b/i, constraint: 'must-use-vue' },
110
+ { pattern: /\b(svelte|sveltekit)\b/i, constraint: 'must-use-svelte' },
111
+ { pattern: /\b(angular)\b/i, constraint: 'must-use-angular' },
112
+ // Hosting constraints
113
+ { pattern: /\b(vercel)\b/i, constraint: 'must-use-vercel' },
114
+ { pattern: /\b(cloudflare)\b/i, constraint: 'must-use-cloudflare' },
115
+ { pattern: /\b(aws)\b/i, constraint: 'must-use-aws' },
116
+ { pattern: /\b(self[- ]?hosted)\b/i, constraint: 'self-hosted' },
117
+ // Auth constraints
118
+ { pattern: /\b(clerk)\b/i, constraint: 'must-use-clerk' },
119
+ { pattern: /\b(auth0)\b/i, constraint: 'must-use-auth0' },
120
+ { pattern: /\b(supabase auth)\b/i, constraint: 'must-use-supabase-auth' },
121
+ // Payments
122
+ { pattern: /\b(stripe)\b/i, constraint: 'must-use-stripe' },
123
+ { pattern: /\b(paddle)\b/i, constraint: 'must-use-paddle' },
124
+ // Features
125
+ { pattern: /\b(real[- ]?time)\b/i, constraint: 'needs-realtime' },
126
+ { pattern: /\b(multi[- ]?tenant)\b/i, constraint: 'multi-tenant' },
127
+ { pattern: /\b(ai|llm|machine learning)\b/i, constraint: 'ai-features' },
128
+ { pattern: /\b(edge|low latency)\b/i, constraint: 'edge-deployment' }
129
+ ];
130
+ for (const { pattern, constraint } of constraintPatterns) {
131
+ if (pattern.test(lowerDesc) && !constraints.includes(constraint)) {
132
+ constraints.push(constraint);
133
+ }
134
+ }
135
+ return constraints;
136
+ }
137
+ // ============================================================================
138
+ // STACK GENERATION
139
+ // ============================================================================
140
+ /**
141
+ * Category weights for different project types.
142
+ */
143
+ const PROJECT_TYPE_WEIGHTS = {
144
+ 'web-app': { 'meta-framework': 1.2, frontend: 1.1, database: 1.0 },
145
+ saas: { 'meta-framework': 1.2, database: 1.1, auth: 1.2, payments: 1.3 },
146
+ 'e-commerce': { 'meta-framework': 1.1, database: 1.1, payments: 1.4 },
147
+ api: { backend: 1.3, database: 1.2, hosting: 1.1 },
148
+ 'mobile-app': { backend: 1.2, database: 1.1, auth: 1.2 },
149
+ marketplace: { 'meta-framework': 1.1, database: 1.2, auth: 1.1, payments: 1.3 },
150
+ cli: { backend: 1.0 },
151
+ library: { backend: 1.0 },
152
+ desktop: { frontend: 1.1, backend: 1.1, database: 1.0 }
153
+ };
154
+ /**
155
+ * Categories to include based on project type.
156
+ */
157
+ const PROJECT_TYPE_CATEGORIES = {
158
+ 'web-app': ['meta-framework', 'database', 'orm', 'auth', 'hosting'],
159
+ saas: ['meta-framework', 'database', 'orm', 'auth', 'hosting', 'payments'],
160
+ 'e-commerce': ['meta-framework', 'database', 'orm', 'auth', 'hosting', 'payments'],
161
+ api: ['backend', 'database', 'orm', 'auth', 'hosting'],
162
+ 'mobile-app': ['backend', 'database', 'orm', 'auth', 'hosting'],
163
+ marketplace: ['meta-framework', 'database', 'orm', 'auth', 'hosting', 'payments'],
164
+ cli: ['backend'],
165
+ library: ['backend'],
166
+ desktop: ['frontend', 'backend', 'database', 'orm']
167
+ };
168
+ /**
169
+ * Map scale to scoring context.
170
+ */
171
+ function scaleToContext(scale) {
172
+ if (scale === 'enterprise' || scale === 'growth')
173
+ return 'enterprise';
174
+ if (scale === 'mvp' || scale === 'startup')
175
+ return 'mvp';
176
+ return 'default';
177
+ }
178
+ /**
179
+ * Select best tech for each category.
180
+ */
181
+ function selectBestTechPerCategory(categories, context, projectType) {
182
+ const results = new Map();
183
+ const weights = PROJECT_TYPE_WEIGHTS[projectType] || {};
184
+ for (const category of categories) {
185
+ const techs = getTechnologiesByCategory(category);
186
+ if (techs.length === 0)
187
+ continue;
188
+ let bestTech = techs[0];
189
+ let bestScore = 0;
190
+ for (const tech of techs) {
191
+ const scores = getScores(tech.id, context);
192
+ if (!scores)
193
+ continue;
194
+ let overall = calculateOverallScore(scores);
195
+ // Apply project-type specific weight
196
+ const weight = weights[category] || 1.0;
197
+ overall = Math.round(overall * weight);
198
+ if (overall > bestScore) {
199
+ bestScore = overall;
200
+ bestTech = tech;
201
+ }
202
+ }
203
+ const finalScores = getScores(bestTech.id, context);
204
+ const finalScore = finalScores ? calculateOverallScore(finalScores) : 0;
205
+ results.set(category, {
206
+ id: bestTech.id,
207
+ name: bestTech.name,
208
+ score: finalScore,
209
+ grade: scoreToGrade(finalScore),
210
+ reason: `Best match for ${projectType} at ${context} scale`
211
+ });
212
+ }
213
+ return results;
214
+ }
215
+ // ============================================================================
216
+ // TOOL IMPLEMENTATION
217
+ // ============================================================================
218
+ /**
219
+ * Generate complete project kit.
220
+ */
221
+ export function generateMCPKit(input) {
222
+ const { projectDescription, priorities: explicitPriorities, constraints: explicitConstraints } = input;
223
+ // Step 1: Analyze description
224
+ const projectType = input.projectType || detectProjectType(projectDescription);
225
+ const scale = input.scale || detectScale(projectDescription);
226
+ const priorities = explicitPriorities && explicitPriorities.length > 0
227
+ ? explicitPriorities
228
+ : detectPriorities(projectDescription);
229
+ const constraints = extractConstraints(projectDescription, explicitConstraints);
230
+ info(`Generating kit for ${projectType} (${scale})`);
231
+ debug('Detected constraints:', constraints);
232
+ // Step 2: Get categories for this project type
233
+ const categories = PROJECT_TYPE_CATEGORIES[projectType] || PROJECT_TYPE_CATEGORIES['web-app'];
234
+ const context = scaleToContext(scale);
235
+ // Step 3: Select best tech per category
236
+ const techMap = selectBestTechPerCategory(categories, context, projectType);
237
+ // Step 4: Build stack output
238
+ const stack = {};
239
+ // Map categories to stack keys
240
+ const categoryToStackKey = {
241
+ frontend: 'frontend',
242
+ 'meta-framework': 'frontend', // Meta-frameworks are frontend
243
+ backend: 'backend',
244
+ database: 'database',
245
+ orm: 'database', // ORM is part of database layer
246
+ auth: 'auth',
247
+ hosting: 'hosting',
248
+ payments: 'payments'
249
+ };
250
+ for (const [category, tech] of techMap.entries()) {
251
+ const stackKey = categoryToStackKey[category];
252
+ if (stackKey && !stack[stackKey]) {
253
+ stack[stackKey] = tech;
254
+ }
255
+ }
256
+ // Step 5: Match MCPs for the stack
257
+ const technologies = Array.from(techMap.values()).map((t) => t.name);
258
+ const mcps = matchMCPsForTechnologies(technologies);
259
+ // Step 6: Generate rationale
260
+ const rationale = generateRationale(projectType, scale, priorities, stack, mcps);
261
+ info(`Generated kit with ${Object.keys(stack).length} stack categories and ${mcps.length} MCPs`);
262
+ return {
263
+ stack,
264
+ mcps,
265
+ rationale,
266
+ detectedConstraints: constraints,
267
+ metadata: {
268
+ scoringVersion: DATA_VERSION,
269
+ generatedAt: new Date().toISOString()
270
+ }
271
+ };
272
+ }
273
+ /**
274
+ * Generate human-readable rationale.
275
+ */
276
+ function generateRationale(projectType, scale, priorities, stack, mcps) {
277
+ const projectLabel = projectType.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
278
+ const techCount = Object.keys(stack).length;
279
+ const mcpCount = mcps.length;
280
+ let rationale = `For your ${projectLabel} at ${scale} scale`;
281
+ if (priorities.length > 0) {
282
+ rationale += ` with focus on ${priorities.join(', ')}`;
283
+ }
284
+ rationale += `, we recommend ${techCount} core technologies and ${mcpCount} MCP servers to enhance your development workflow.`;
285
+ // Add stack highlights
286
+ if (stack.frontend) {
287
+ rationale += ` ${stack.frontend.name} provides excellent developer experience and performance.`;
288
+ }
289
+ if (stack.database) {
290
+ rationale += ` ${stack.database.name} offers the right balance of scalability and ease of use.`;
291
+ }
292
+ // Add MCP highlights
293
+ const highPriorityMcps = mcps.filter((m) => m.priority === 'high');
294
+ if (highPriorityMcps.length > 0) {
295
+ rationale += ` Key MCPs like ${highPriorityMcps.map((m) => m.name).join(' and ')} will significantly improve your AI-assisted development.`;
296
+ }
297
+ return rationale;
298
+ }
299
+ // ============================================================================
300
+ // TOOL HANDLER
301
+ // ============================================================================
302
+ /**
303
+ * Tool definition for MCP server registration.
304
+ */
305
+ export const generateMCPKitTool = {
306
+ name: 'generate_mcp_kit',
307
+ description: `Generate a complete project kit with optimal tech stack and MCP recommendations based on your project description.
308
+
309
+ Describe your project and get:
310
+ 1. **Optimal Tech Stack**: Best technologies for each category (frontend, backend, database, auth, hosting, payments)
311
+ 2. **MCP Recommendations**: AI-assistant tools tailored to your chosen technologies
312
+ 3. **Install Configurations**: Ready-to-use configs for Claude Desktop, Cursor, and Windsurf
313
+
314
+ Example prompts:
315
+ - "I'm building a SaaS for project management with real-time collaboration"
316
+ - "Building an MVP for a marketplace connecting freelancers with clients"
317
+ - "Creating an e-commerce platform with Stripe payments and PostgreSQL"`,
318
+ inputSchema: {
319
+ type: 'object',
320
+ properties: {
321
+ projectDescription: {
322
+ type: 'string',
323
+ description: 'Describe your project (50-5000 chars). Include goals, features, and any preferences.',
324
+ minLength: 50,
325
+ maxLength: 5000
326
+ },
327
+ priorities: {
328
+ type: 'array',
329
+ items: {
330
+ type: 'string',
331
+ enum: PRIORITIES
332
+ },
333
+ maxItems: 3,
334
+ description: 'Top priorities (max 3): time-to-market, scalability, developer-experience, cost-efficiency, performance, security, maintainability'
335
+ },
336
+ constraints: {
337
+ type: 'array',
338
+ items: { type: 'string' },
339
+ description: 'Technology constraints (e.g., must-use-postgresql, self-hosted)'
340
+ },
341
+ projectType: {
342
+ type: 'string',
343
+ enum: PROJECT_TYPES,
344
+ description: 'Project type (auto-detected if not provided)'
345
+ },
346
+ scale: {
347
+ type: 'string',
348
+ enum: SCALES,
349
+ description: 'Project scale (auto-detected if not provided)'
350
+ }
351
+ },
352
+ required: ['projectDescription']
353
+ },
354
+ handler: async (params) => {
355
+ try {
356
+ const input = GenerateMCPKitInputSchema.parse(params);
357
+ const result = generateMCPKit(input);
358
+ // Format output for display
359
+ const output = formatKitOutput(result);
360
+ return {
361
+ content: [
362
+ {
363
+ type: 'text',
364
+ text: output
365
+ }
366
+ ]
367
+ };
368
+ }
369
+ catch (err) {
370
+ if (err instanceof z.ZodError) {
371
+ error('Invalid input:', err.errors);
372
+ return {
373
+ content: [
374
+ {
375
+ type: 'text',
376
+ text: `Invalid input: ${err.errors.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')}`
377
+ }
378
+ ],
379
+ isError: true
380
+ };
381
+ }
382
+ error('generate_mcp_kit error:', err);
383
+ throw err;
384
+ }
385
+ }
386
+ };
387
+ // ============================================================================
388
+ // OUTPUT FORMATTING
389
+ // ============================================================================
390
+ /**
391
+ * Format kit output for display.
392
+ */
393
+ function formatKitOutput(result) {
394
+ const lines = [];
395
+ lines.push('# Your Project Kit\n');
396
+ lines.push(result.rationale);
397
+ lines.push('');
398
+ // Stack Table
399
+ lines.push('## Recommended Tech Stack\n');
400
+ lines.push('| Category | Technology | Score | Grade |');
401
+ lines.push('|----------|------------|-------|-------|');
402
+ const stackEntries = Object.entries(result.stack);
403
+ for (const [category, tech] of stackEntries) {
404
+ lines.push(`| ${category} | ${tech.name} | ${tech.score} | ${tech.grade} |`);
405
+ }
406
+ lines.push('');
407
+ // MCPs
408
+ lines.push('## Recommended MCPs\n');
409
+ const highPriority = result.mcps.filter((m) => m.priority === 'high');
410
+ const mediumPriority = result.mcps.filter((m) => m.priority === 'medium');
411
+ const lowPriority = result.mcps.filter((m) => m.priority === 'low');
412
+ if (highPriority.length > 0) {
413
+ lines.push('### Must-Have (High Priority)\n');
414
+ for (const mcp of highPriority) {
415
+ lines.push(`**${mcp.name}** (\`${mcp.slug}\`)`);
416
+ lines.push(`- ${mcp.description}`);
417
+ lines.push(`- _Matched: ${mcp.matchedTech}_`);
418
+ lines.push('');
419
+ }
420
+ }
421
+ if (mediumPriority.length > 0) {
422
+ lines.push('### Recommended (Medium Priority)\n');
423
+ for (const mcp of mediumPriority) {
424
+ lines.push(`**${mcp.name}** (\`${mcp.slug}\`)`);
425
+ lines.push(`- ${mcp.description}`);
426
+ lines.push('');
427
+ }
428
+ }
429
+ if (lowPriority.length > 0) {
430
+ lines.push('### Nice-to-Have (Low Priority)\n');
431
+ for (const mcp of lowPriority) {
432
+ lines.push(`- **${mcp.name}**: ${mcp.description}`);
433
+ }
434
+ lines.push('');
435
+ }
436
+ // Detected Constraints
437
+ if (result.detectedConstraints.length > 0) {
438
+ lines.push('## Detected Constraints\n');
439
+ lines.push(result.detectedConstraints.map((c) => `- ${c}`).join('\n'));
440
+ lines.push('');
441
+ }
442
+ // Install Config
443
+ lines.push('## Quick Install\n');
444
+ const installConfig = generateInstallConfig(result.mcps);
445
+ lines.push('Add to your Claude Desktop config (`claude_desktop_config.json`):\n');
446
+ lines.push('```json');
447
+ lines.push(JSON.stringify(installConfig.claudeDesktop, null, 2));
448
+ lines.push('```\n');
449
+ // Metadata
450
+ lines.push(`---`);
451
+ lines.push(`*Scoring version: ${result.metadata.scoringVersion}*`);
452
+ lines.push(`*Generated: ${result.metadata.generatedAt}*`);
453
+ return lines.join('\n');
454
+ }
455
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/tools/project-kit/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * MCPFinder Project Kit Module
3
+ *
4
+ * Exports all project-kit tools for MCP server registration:
5
+ * - generate_mcp_kit: Project description -> optimal stack + recommended MCPs
6
+ * - analyze_repo_mcps: Repository analysis -> detected stack -> recommended MCPs
7
+ * - prepare_mcp_installation: Analyze repo -> Generate .env-mcp template
8
+ * - execute_mcp_installation: Read .env-mcp -> Generate install commands
9
+ */
10
+ export { generateMCPKitTool, generateMCPKit } from './generate.js';
11
+ export { analyzeRepoMcpsTool, analyzeRepo } from './analyze-repo.js';
12
+ export { prepareMCPInstallationTool, prepareMCPInstallation } from './prepare-installation.js';
13
+ export { executeMCPInstallationTool, executeMCPInstallation } from './execute-installation.js';
14
+ export * from './types.js';
15
+ export * from './installation-types.js';
16
+ export { detectStackFromFiles } from './detect-stack.js';
17
+ export { matchMCPsForStack, matchMCPsForTechnologies, generateInstallConfig, TECH_MCP_MAPPINGS } from './match-mcps.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/project-kit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAG/F,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACN,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * MCPFinder Project Kit Module
3
+ *
4
+ * Exports all project-kit tools for MCP server registration:
5
+ * - generate_mcp_kit: Project description -> optimal stack + recommended MCPs
6
+ * - analyze_repo_mcps: Repository analysis -> detected stack -> recommended MCPs
7
+ * - prepare_mcp_installation: Analyze repo -> Generate .env-mcp template
8
+ * - execute_mcp_installation: Read .env-mcp -> Generate install commands
9
+ */
10
+ // Tool handlers
11
+ export { generateMCPKitTool, generateMCPKit } from './generate.js';
12
+ export { analyzeRepoMcpsTool, analyzeRepo } from './analyze-repo.js';
13
+ export { prepareMCPInstallationTool, prepareMCPInstallation } from './prepare-installation.js';
14
+ export { executeMCPInstallationTool, executeMCPInstallation } from './execute-installation.js';
15
+ // Types
16
+ export * from './types.js';
17
+ export * from './installation-types.js';
18
+ // Detection utilities (for testing/advanced use)
19
+ export { detectStackFromFiles } from './detect-stack.js';
20
+ export { matchMCPsForStack, matchMCPsForTechnologies, generateInstallConfig, TECH_MCP_MAPPINGS } from './match-mcps.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/project-kit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAE/F,QAAQ;AACR,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AAExC,iDAAiD;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACN,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,MAAM,iBAAiB,CAAC"}