@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.
- package/LICENSE +16 -16
- package/README.md +92 -3
- package/dist/compatibility/index.d.ts +11 -0
- package/dist/compatibility/index.d.ts.map +1 -0
- package/dist/compatibility/index.js +13 -0
- package/dist/compatibility/index.js.map +1 -0
- package/dist/compatibility/rules.d.ts +29 -0
- package/dist/compatibility/rules.d.ts.map +1 -0
- package/dist/compatibility/rules.js +419 -0
- package/dist/compatibility/rules.js.map +1 -0
- package/dist/compatibility/scoring.d.ts +54 -0
- package/dist/compatibility/scoring.d.ts.map +1 -0
- package/dist/compatibility/scoring.js +209 -0
- package/dist/compatibility/scoring.js.map +1 -0
- package/dist/compatibility/types.d.ts +176 -0
- package/dist/compatibility/types.d.ts.map +1 -0
- package/dist/compatibility/types.js +26 -0
- package/dist/compatibility/types.js.map +1 -0
- package/dist/compatibility/utils.d.ts +82 -0
- package/dist/compatibility/utils.d.ts.map +1 -0
- package/dist/compatibility/utils.js +269 -0
- package/dist/compatibility/utils.js.map +1 -0
- 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
- package/dist/http.d.ts +7 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +69 -0
- package/dist/http.js.map +1 -0
- package/dist/lib/mcp-compatibility/index.d.ts +33 -0
- package/dist/lib/mcp-compatibility/index.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/index.js +35 -0
- package/dist/lib/mcp-compatibility/index.js.map +1 -0
- package/dist/lib/mcp-compatibility/rules.d.ts +29 -0
- package/dist/lib/mcp-compatibility/rules.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/rules.js +419 -0
- package/dist/lib/mcp-compatibility/rules.js.map +1 -0
- package/dist/lib/mcp-compatibility/scoring.d.ts +54 -0
- package/dist/lib/mcp-compatibility/scoring.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/scoring.js +209 -0
- package/dist/lib/mcp-compatibility/scoring.js.map +1 -0
- package/dist/lib/mcp-compatibility/types.d.ts +176 -0
- package/dist/lib/mcp-compatibility/types.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/types.js +26 -0
- package/dist/lib/mcp-compatibility/types.js.map +1 -0
- package/dist/lib/mcp-compatibility/utils.d.ts +82 -0
- package/dist/lib/mcp-compatibility/utils.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/utils.js +269 -0
- package/dist/lib/mcp-compatibility/utils.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +296 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/check-compatibility.d.ts +43 -0
- package/dist/tools/check-compatibility.d.ts.map +1 -0
- package/dist/tools/check-compatibility.js +133 -0
- package/dist/tools/check-compatibility.js.map +1 -0
- package/dist/tools/project-kit/analyze-repo.d.ts +50 -0
- package/dist/tools/project-kit/analyze-repo.d.ts.map +1 -0
- package/dist/tools/project-kit/analyze-repo.js +456 -0
- package/dist/tools/project-kit/analyze-repo.js.map +1 -0
- package/dist/tools/project-kit/detect-stack.d.ts +16 -0
- package/dist/tools/project-kit/detect-stack.d.ts.map +1 -0
- package/dist/tools/project-kit/detect-stack.js +572 -0
- package/dist/tools/project-kit/detect-stack.js.map +1 -0
- package/dist/tools/project-kit/execute-installation.d.ts +50 -0
- package/dist/tools/project-kit/execute-installation.d.ts.map +1 -0
- package/dist/tools/project-kit/execute-installation.js +440 -0
- package/dist/tools/project-kit/execute-installation.js.map +1 -0
- package/dist/tools/project-kit/generate.d.ts +70 -0
- package/dist/tools/project-kit/generate.d.ts.map +1 -0
- package/dist/tools/project-kit/generate.js +455 -0
- package/dist/tools/project-kit/generate.js.map +1 -0
- package/dist/tools/project-kit/index.d.ts +18 -0
- package/dist/tools/project-kit/index.d.ts.map +1 -0
- package/dist/tools/project-kit/index.js +21 -0
- package/dist/tools/project-kit/index.js.map +1 -0
- package/dist/tools/project-kit/installation-types.d.ts +147 -0
- package/dist/tools/project-kit/installation-types.d.ts.map +1 -0
- package/dist/tools/project-kit/installation-types.js +491 -0
- package/dist/tools/project-kit/installation-types.js.map +1 -0
- package/dist/tools/project-kit/match-mcps.d.ts +67 -0
- package/dist/tools/project-kit/match-mcps.d.ts.map +1 -0
- package/dist/tools/project-kit/match-mcps.js +497 -0
- package/dist/tools/project-kit/match-mcps.js.map +1 -0
- package/dist/tools/project-kit/prepare-installation.d.ts +54 -0
- package/dist/tools/project-kit/prepare-installation.d.ts.map +1 -0
- package/dist/tools/project-kit/prepare-installation.js +382 -0
- package/dist/tools/project-kit/prepare-installation.js.map +1 -0
- package/dist/tools/project-kit/types.d.ts +200 -0
- package/dist/tools/project-kit/types.d.ts.map +1 -0
- package/dist/tools/project-kit/types.js +76 -0
- package/dist/tools/project-kit/types.js.map +1 -0
- package/dist/tools/recommend.d.ts.map +1 -1
- package/dist/tools/recommend.js +26 -10
- package/dist/tools/recommend.js.map +1 -1
- 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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"}
|