@stacksfinder/mcp-server 1.0.2 → 1.2.0
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 +21 -0
- package/README.md +414 -262
- 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 +404 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/audit.d.ts +246 -0
- package/dist/tools/audit.d.ts.map +1 -0
- package/dist/tools/audit.js +559 -0
- package/dist/tools/audit.js.map +1 -0
- 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 +9 -4
- package/dist/tools/recommend.js.map +1 -1
- package/package.json +8 -3
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* execute_mcp_installation Tool
|
|
3
|
+
*
|
|
4
|
+
* Reads a .env-mcp file and generates installation commands for MCPs
|
|
5
|
+
* where the user has provided the required credentials.
|
|
6
|
+
*/
|
|
7
|
+
import type { ExecuteMCPInstallationInput, ExecuteMCPInstallationOutput } from './installation-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Execute MCP installation by reading .env-mcp and generating commands.
|
|
10
|
+
*/
|
|
11
|
+
export declare function executeMCPInstallation(input: ExecuteMCPInstallationInput): Promise<ExecuteMCPInstallationOutput>;
|
|
12
|
+
/**
|
|
13
|
+
* Tool definition for MCP server registration.
|
|
14
|
+
*/
|
|
15
|
+
export declare const executeMCPInstallationTool: {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: string;
|
|
20
|
+
properties: {
|
|
21
|
+
envMcpPath: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
targetClient: {
|
|
26
|
+
type: string;
|
|
27
|
+
enum: string[];
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
dryRun: {
|
|
31
|
+
type: string;
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
handler: (params: unknown) => Promise<{
|
|
37
|
+
content: {
|
|
38
|
+
type: string;
|
|
39
|
+
text: string;
|
|
40
|
+
}[];
|
|
41
|
+
isError?: undefined;
|
|
42
|
+
} | {
|
|
43
|
+
content: {
|
|
44
|
+
type: string;
|
|
45
|
+
text: string;
|
|
46
|
+
}[];
|
|
47
|
+
isError: boolean;
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=execute-installation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-installation.d.ts","sourceRoot":"","sources":["../../../src/tools/project-kit/execute-installation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,2BAA2B,EAC3B,4BAA4B,EAG5B,MAAM,yBAAyB,CAAC;AAmLjC;;GAEG;AACH,wBAAsB,sBAAsB,CAC3C,KAAK,EAAE,2BAA2B,GAChC,OAAO,CAAC,4BAA4B,CAAC,CAiHvC;AAuID;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;sBA+Cd,OAAO;;;;;;;;;;;;;CAiC/B,CAAC"}
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* execute_mcp_installation Tool
|
|
3
|
+
*
|
|
4
|
+
* Reads a .env-mcp file and generates installation commands for MCPs
|
|
5
|
+
* where the user has provided the required credentials.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { ExecuteMCPInstallationInputSchema, getMCPRegistryEntry } from './installation-types.js';
|
|
11
|
+
import { info, error, debug } from '../../utils/logger.js';
|
|
12
|
+
/**
|
|
13
|
+
* Parse .env-mcp file content.
|
|
14
|
+
*/
|
|
15
|
+
function parseEnvMcpContent(content) {
|
|
16
|
+
const installFlags = new Map();
|
|
17
|
+
const envVars = new Map();
|
|
18
|
+
const lines = content.split('\n');
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
const trimmed = line.trim();
|
|
21
|
+
// Skip comments and empty lines
|
|
22
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
// Parse KEY=VALUE
|
|
26
|
+
const eqIndex = trimmed.indexOf('=');
|
|
27
|
+
if (eqIndex === -1)
|
|
28
|
+
continue;
|
|
29
|
+
const key = trimmed.substring(0, eqIndex).trim();
|
|
30
|
+
const value = trimmed.substring(eqIndex + 1).trim();
|
|
31
|
+
// Handle INSTALL_xxx flags
|
|
32
|
+
if (key.startsWith('INSTALL_')) {
|
|
33
|
+
const slug = key
|
|
34
|
+
.replace('INSTALL_', '')
|
|
35
|
+
.toLowerCase()
|
|
36
|
+
.replace(/_/g, '-');
|
|
37
|
+
installFlags.set(slug, value.toLowerCase() === 'true');
|
|
38
|
+
}
|
|
39
|
+
else if (value) {
|
|
40
|
+
// Store non-empty env vars
|
|
41
|
+
envVars.set(key, value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return { installFlags, envVars };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Generate Claude Code CLI command for an MCP.
|
|
48
|
+
*/
|
|
49
|
+
function generateClaudeCodeCommand(slug, npmPackage, envVars, requiredVars) {
|
|
50
|
+
// Build the JSON config
|
|
51
|
+
const config = {
|
|
52
|
+
command: 'npx',
|
|
53
|
+
args: ['-y', npmPackage]
|
|
54
|
+
};
|
|
55
|
+
// Add env vars if any
|
|
56
|
+
const envObj = {};
|
|
57
|
+
for (const varDef of requiredVars) {
|
|
58
|
+
const value = envVars.get(varDef.name);
|
|
59
|
+
if (value) {
|
|
60
|
+
envObj[varDef.name] = value;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (Object.keys(envObj).length > 0) {
|
|
64
|
+
config.env = envObj;
|
|
65
|
+
}
|
|
66
|
+
const jsonStr = JSON.stringify(config).replace(/"/g, '\\"');
|
|
67
|
+
return `claude mcp add-json "${slug}" "${jsonStr}"`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Generate JSON config for Claude Desktop / Cursor / VS Code.
|
|
71
|
+
*/
|
|
72
|
+
function generateJsonConfig(_slug, npmPackage, envVars, requiredVars) {
|
|
73
|
+
const config = {
|
|
74
|
+
command: 'npx',
|
|
75
|
+
args: ['-y', npmPackage]
|
|
76
|
+
};
|
|
77
|
+
// Add env vars if any
|
|
78
|
+
const envObj = {};
|
|
79
|
+
for (const varDef of requiredVars) {
|
|
80
|
+
const value = envVars.get(varDef.name);
|
|
81
|
+
if (value) {
|
|
82
|
+
envObj[varDef.name] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (Object.keys(envObj).length > 0) {
|
|
86
|
+
config.env = envObj;
|
|
87
|
+
}
|
|
88
|
+
return config;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get config file path for target client.
|
|
92
|
+
*/
|
|
93
|
+
function getConfigPathForClient(client) {
|
|
94
|
+
switch (client) {
|
|
95
|
+
case 'claude-code':
|
|
96
|
+
return '~/.claude.json (managed by CLI)';
|
|
97
|
+
case 'claude-desktop':
|
|
98
|
+
return process.platform === 'win32'
|
|
99
|
+
? '%APPDATA%\\Claude\\claude_desktop_config.json'
|
|
100
|
+
: process.platform === 'darwin'
|
|
101
|
+
? '~/Library/Application Support/Claude/claude_desktop_config.json'
|
|
102
|
+
: '~/.config/claude/claude_desktop_config.json';
|
|
103
|
+
case 'cursor':
|
|
104
|
+
return process.platform === 'win32'
|
|
105
|
+
? '%APPDATA%\\Cursor\\User\\globalStorage\\saoudrizwan.claude-dev\\settings\\cline_mcp_settings.json'
|
|
106
|
+
: '~/.cursor/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json';
|
|
107
|
+
case 'vscode':
|
|
108
|
+
return 'VS Code MCP extension settings';
|
|
109
|
+
case 'windsurf':
|
|
110
|
+
return '~/.windsurf/mcp.json';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// VALIDATION
|
|
115
|
+
// ============================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Check if all required env vars are present for an MCP.
|
|
118
|
+
*/
|
|
119
|
+
function validateEnvVars(requiredVars, envVars) {
|
|
120
|
+
const missingVars = [];
|
|
121
|
+
for (const varDef of requiredVars) {
|
|
122
|
+
if (varDef.requirement === 'required') {
|
|
123
|
+
const value = envVars.get(varDef.name);
|
|
124
|
+
if (!value || value.trim() === '') {
|
|
125
|
+
missingVars.push(varDef.name);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
ready: missingVars.length === 0,
|
|
131
|
+
missingVars
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// TOOL IMPLEMENTATION
|
|
136
|
+
// ============================================================================
|
|
137
|
+
/**
|
|
138
|
+
* Execute MCP installation by reading .env-mcp and generating commands.
|
|
139
|
+
*/
|
|
140
|
+
export async function executeMCPInstallation(input) {
|
|
141
|
+
const envMcpPath = input.envMcpPath || path.join(process.cwd(), '.env-mcp');
|
|
142
|
+
const targetClient = input.targetClient || 'claude-code';
|
|
143
|
+
const dryRun = input.dryRun ?? false;
|
|
144
|
+
info(`Executing MCP installation from: ${envMcpPath}`);
|
|
145
|
+
info(`Target client: ${targetClient}`);
|
|
146
|
+
// Step 1: Read and parse .env-mcp file
|
|
147
|
+
let content;
|
|
148
|
+
try {
|
|
149
|
+
content = await fs.readFile(envMcpPath, 'utf-8');
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
error(`Failed to read .env-mcp: ${err}`);
|
|
153
|
+
throw new Error(`Could not read .env-mcp file at ${envMcpPath}. ` +
|
|
154
|
+
'Run prepare_mcp_installation first to generate it.');
|
|
155
|
+
}
|
|
156
|
+
const parsed = parseEnvMcpContent(content);
|
|
157
|
+
debug(`Found ${parsed.installFlags.size} MCPs with install flags`);
|
|
158
|
+
debug(`Found ${parsed.envVars.size} env vars`);
|
|
159
|
+
// Step 2: Generate commands for each MCP
|
|
160
|
+
const commands = [];
|
|
161
|
+
const aggregateConfig = {};
|
|
162
|
+
for (const [slug, shouldInstall] of parsed.installFlags) {
|
|
163
|
+
if (!shouldInstall) {
|
|
164
|
+
commands.push({
|
|
165
|
+
slug,
|
|
166
|
+
name: formatMCPName(slug),
|
|
167
|
+
ready: false,
|
|
168
|
+
missingVars: [],
|
|
169
|
+
status: 'skipped'
|
|
170
|
+
});
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const registryEntry = getMCPRegistryEntry(slug);
|
|
174
|
+
if (!registryEntry) {
|
|
175
|
+
debug(`MCP ${slug} not found in registry, skipping`);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
// Validate env vars
|
|
179
|
+
const validation = validateEnvVars(registryEntry.envVars, parsed.envVars);
|
|
180
|
+
const command = {
|
|
181
|
+
slug,
|
|
182
|
+
name: registryEntry.name,
|
|
183
|
+
ready: validation.ready,
|
|
184
|
+
missingVars: validation.missingVars,
|
|
185
|
+
status: validation.ready ? 'ready' : 'missing_vars'
|
|
186
|
+
};
|
|
187
|
+
if (validation.ready) {
|
|
188
|
+
// Generate commands
|
|
189
|
+
command.claudeCodeCommand = generateClaudeCodeCommand(slug, registryEntry.npmPackage, parsed.envVars, registryEntry.envVars);
|
|
190
|
+
command.jsonConfig = generateJsonConfig(slug, registryEntry.npmPackage, parsed.envVars, registryEntry.envVars);
|
|
191
|
+
// Add to aggregate config
|
|
192
|
+
aggregateConfig[slug] = command.jsonConfig;
|
|
193
|
+
}
|
|
194
|
+
commands.push(command);
|
|
195
|
+
}
|
|
196
|
+
// Step 3: Calculate stats
|
|
197
|
+
const readyCount = commands.filter((c) => c.status === 'ready').length;
|
|
198
|
+
const pendingCount = commands.filter((c) => c.status === 'missing_vars').length;
|
|
199
|
+
// Step 4: Generate aggregate command for Claude Code
|
|
200
|
+
let aggregateCommand;
|
|
201
|
+
if (targetClient === 'claude-code' && readyCount > 0) {
|
|
202
|
+
const readyCommands = commands
|
|
203
|
+
.filter((c) => c.status === 'ready' && c.claudeCodeCommand)
|
|
204
|
+
.map((c) => c.claudeCodeCommand);
|
|
205
|
+
aggregateCommand = readyCommands.join(' && ');
|
|
206
|
+
}
|
|
207
|
+
// Step 5: Generate post-install instructions
|
|
208
|
+
const postInstallInstructions = generatePostInstallInstructions(targetClient, readyCount, pendingCount);
|
|
209
|
+
// Step 6: Generate summary message
|
|
210
|
+
const message = generateSummaryMessage(commands, targetClient, dryRun);
|
|
211
|
+
return {
|
|
212
|
+
commands,
|
|
213
|
+
readyCount,
|
|
214
|
+
pendingCount,
|
|
215
|
+
aggregateCommand,
|
|
216
|
+
aggregateConfig: Object.keys(aggregateConfig).length > 0 ? { mcpServers: aggregateConfig } : undefined,
|
|
217
|
+
postInstallInstructions,
|
|
218
|
+
message
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// ============================================================================
|
|
222
|
+
// HELPERS
|
|
223
|
+
// ============================================================================
|
|
224
|
+
function formatMCPName(slug) {
|
|
225
|
+
return slug
|
|
226
|
+
.replace(/-mcp$/, '')
|
|
227
|
+
.split('-')
|
|
228
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
229
|
+
.join(' ')
|
|
230
|
+
.concat(' MCP');
|
|
231
|
+
}
|
|
232
|
+
function generatePostInstallInstructions(client, readyCount, pendingCount) {
|
|
233
|
+
const instructions = [];
|
|
234
|
+
if (readyCount === 0) {
|
|
235
|
+
instructions.push('No MCPs are ready to install. Please fill in the required credentials in .env-mcp');
|
|
236
|
+
return instructions;
|
|
237
|
+
}
|
|
238
|
+
switch (client) {
|
|
239
|
+
case 'claude-code':
|
|
240
|
+
instructions.push('After running the installation commands:');
|
|
241
|
+
instructions.push('1. Restart Claude Code to load the new MCP servers');
|
|
242
|
+
instructions.push('2. Verify with: claude mcp list');
|
|
243
|
+
break;
|
|
244
|
+
case 'claude-desktop':
|
|
245
|
+
instructions.push('To install:');
|
|
246
|
+
instructions.push(`1. Open ${getConfigPathForClient(client)}`);
|
|
247
|
+
instructions.push('2. Add the mcpServers config from aggregateConfig');
|
|
248
|
+
instructions.push('3. Restart Claude Desktop');
|
|
249
|
+
break;
|
|
250
|
+
case 'cursor':
|
|
251
|
+
instructions.push('To install:');
|
|
252
|
+
instructions.push('1. Open Cursor Settings > Extensions > Claude Dev');
|
|
253
|
+
instructions.push('2. Add each MCP server configuration');
|
|
254
|
+
instructions.push('3. Restart Cursor');
|
|
255
|
+
break;
|
|
256
|
+
case 'vscode':
|
|
257
|
+
instructions.push('To install:');
|
|
258
|
+
instructions.push('1. Open VS Code Settings');
|
|
259
|
+
instructions.push('2. Search for "MCP" and configure the servers');
|
|
260
|
+
instructions.push('3. Reload VS Code window');
|
|
261
|
+
break;
|
|
262
|
+
case 'windsurf':
|
|
263
|
+
instructions.push('To install:');
|
|
264
|
+
instructions.push(`1. Edit ${getConfigPathForClient(client)}`);
|
|
265
|
+
instructions.push('2. Add the mcpServers config from aggregateConfig');
|
|
266
|
+
instructions.push('3. Restart Windsurf');
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
if (pendingCount > 0) {
|
|
270
|
+
instructions.push('');
|
|
271
|
+
instructions.push(`Note: ${pendingCount} MCP(s) are missing required credentials.`);
|
|
272
|
+
instructions.push('Fill in the missing values in .env-mcp and run execute_mcp_installation again.');
|
|
273
|
+
}
|
|
274
|
+
return instructions;
|
|
275
|
+
}
|
|
276
|
+
function generateSummaryMessage(commands, client, dryRun) {
|
|
277
|
+
const readyCount = commands.filter((c) => c.status === 'ready').length;
|
|
278
|
+
const pendingCount = commands.filter((c) => c.status === 'missing_vars').length;
|
|
279
|
+
const skippedCount = commands.filter((c) => c.status === 'skipped').length;
|
|
280
|
+
const lines = [];
|
|
281
|
+
if (dryRun) {
|
|
282
|
+
lines.push('🔍 DRY RUN - No changes will be made\n');
|
|
283
|
+
}
|
|
284
|
+
lines.push('# MCP Installation Summary\n');
|
|
285
|
+
// Stats
|
|
286
|
+
lines.push(`- ✅ Ready to install: ${readyCount}`);
|
|
287
|
+
lines.push(`- ⏳ Missing credentials: ${pendingCount}`);
|
|
288
|
+
lines.push(`- ⏭️ Skipped: ${skippedCount}`);
|
|
289
|
+
lines.push('');
|
|
290
|
+
// Ready MCPs
|
|
291
|
+
if (readyCount > 0) {
|
|
292
|
+
lines.push('## Ready to Install\n');
|
|
293
|
+
for (const cmd of commands.filter((c) => c.status === 'ready')) {
|
|
294
|
+
lines.push(`- ✅ **${cmd.name}** (\`${cmd.slug}\`)`);
|
|
295
|
+
}
|
|
296
|
+
lines.push('');
|
|
297
|
+
}
|
|
298
|
+
// Pending MCPs
|
|
299
|
+
if (pendingCount > 0) {
|
|
300
|
+
lines.push('## Missing Credentials\n');
|
|
301
|
+
for (const cmd of commands.filter((c) => c.status === 'missing_vars')) {
|
|
302
|
+
lines.push(`- ⏳ **${cmd.name}** - missing: ${cmd.missingVars.join(', ')}`);
|
|
303
|
+
}
|
|
304
|
+
lines.push('');
|
|
305
|
+
}
|
|
306
|
+
// Skipped MCPs
|
|
307
|
+
if (skippedCount > 0) {
|
|
308
|
+
lines.push('## Skipped (INSTALL_xxx=false)\n');
|
|
309
|
+
for (const cmd of commands.filter((c) => c.status === 'skipped')) {
|
|
310
|
+
lines.push(`- ⏭️ ${cmd.name}`);
|
|
311
|
+
}
|
|
312
|
+
lines.push('');
|
|
313
|
+
}
|
|
314
|
+
// Instructions
|
|
315
|
+
if (readyCount > 0 && client === 'claude-code') {
|
|
316
|
+
lines.push('## Installation Command\n');
|
|
317
|
+
lines.push('Run the aggregateCommand to install all ready MCPs, then restart Claude Code.');
|
|
318
|
+
}
|
|
319
|
+
return lines.join('\n');
|
|
320
|
+
}
|
|
321
|
+
// ============================================================================
|
|
322
|
+
// TOOL HANDLER
|
|
323
|
+
// ============================================================================
|
|
324
|
+
/**
|
|
325
|
+
* Tool definition for MCP server registration.
|
|
326
|
+
*/
|
|
327
|
+
export const executeMCPInstallationTool = {
|
|
328
|
+
name: 'execute_mcp_installation',
|
|
329
|
+
description: `Read a .env-mcp configuration file and generate installation commands for the MCPs.
|
|
330
|
+
|
|
331
|
+
This tool:
|
|
332
|
+
1. Reads the .env-mcp file generated by prepare_mcp_installation
|
|
333
|
+
2. Validates that required environment variables are present
|
|
334
|
+
3. Generates installation commands for the target IDE/client
|
|
335
|
+
4. Returns post-installation instructions
|
|
336
|
+
|
|
337
|
+
Prerequisites:
|
|
338
|
+
- Run prepare_mcp_installation first to generate .env-mcp
|
|
339
|
+
- Fill in the required API keys and credentials in .env-mcp
|
|
340
|
+
- Set INSTALL_xxx=false for MCPs you want to skip
|
|
341
|
+
|
|
342
|
+
Supported targets:
|
|
343
|
+
- claude-code: Generates 'claude mcp add-json' commands
|
|
344
|
+
- claude-desktop: Generates JSON config for claude_desktop_config.json
|
|
345
|
+
- cursor: Generates JSON config for Cursor MCP settings
|
|
346
|
+
- vscode: Generates JSON config for VS Code MCP extension
|
|
347
|
+
- windsurf: Generates JSON config for Windsurf
|
|
348
|
+
|
|
349
|
+
Output:
|
|
350
|
+
- Individual commands/configs for each ready MCP
|
|
351
|
+
- Aggregate command (for Claude Code) or config (for others)
|
|
352
|
+
- List of MCPs missing required credentials
|
|
353
|
+
- Post-installation instructions`,
|
|
354
|
+
inputSchema: {
|
|
355
|
+
type: 'object',
|
|
356
|
+
properties: {
|
|
357
|
+
envMcpPath: {
|
|
358
|
+
type: 'string',
|
|
359
|
+
description: 'Path to .env-mcp file (default: .env-mcp in current directory)'
|
|
360
|
+
},
|
|
361
|
+
targetClient: {
|
|
362
|
+
type: 'string',
|
|
363
|
+
enum: ['claude-code', 'claude-desktop', 'cursor', 'vscode', 'windsurf'],
|
|
364
|
+
description: 'Target IDE/client for installation (default: claude-code)'
|
|
365
|
+
},
|
|
366
|
+
dryRun: {
|
|
367
|
+
type: 'boolean',
|
|
368
|
+
description: 'Only generate commands without marking ready to execute (default: false)'
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
handler: async (params) => {
|
|
373
|
+
try {
|
|
374
|
+
const input = ExecuteMCPInstallationInputSchema.parse(params);
|
|
375
|
+
const result = await executeMCPInstallation(input);
|
|
376
|
+
// Format output for display
|
|
377
|
+
const output = formatExecutionOutput(result);
|
|
378
|
+
return {
|
|
379
|
+
content: [
|
|
380
|
+
{
|
|
381
|
+
type: 'text',
|
|
382
|
+
text: output
|
|
383
|
+
}
|
|
384
|
+
]
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
if (err instanceof z.ZodError) {
|
|
389
|
+
error('Invalid input:', err.errors);
|
|
390
|
+
return {
|
|
391
|
+
content: [
|
|
392
|
+
{
|
|
393
|
+
type: 'text',
|
|
394
|
+
text: `Invalid input: ${err.errors.map((e) => e.message).join(', ')}`
|
|
395
|
+
}
|
|
396
|
+
],
|
|
397
|
+
isError: true
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
error('execute_mcp_installation error:', err);
|
|
401
|
+
throw err;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
// ============================================================================
|
|
406
|
+
// OUTPUT FORMATTING
|
|
407
|
+
// ============================================================================
|
|
408
|
+
function formatExecutionOutput(result) {
|
|
409
|
+
const lines = [];
|
|
410
|
+
lines.push(result.message);
|
|
411
|
+
lines.push('');
|
|
412
|
+
// Show aggregate command for Claude Code
|
|
413
|
+
if (result.aggregateCommand) {
|
|
414
|
+
lines.push('---\n');
|
|
415
|
+
lines.push('## Claude Code Installation\n');
|
|
416
|
+
lines.push('Run this command to install all ready MCPs:\n');
|
|
417
|
+
lines.push('```bash');
|
|
418
|
+
lines.push(result.aggregateCommand);
|
|
419
|
+
lines.push('```\n');
|
|
420
|
+
}
|
|
421
|
+
// Show JSON config for other clients
|
|
422
|
+
if (result.aggregateConfig && !result.aggregateCommand) {
|
|
423
|
+
lines.push('---\n');
|
|
424
|
+
lines.push('## JSON Configuration\n');
|
|
425
|
+
lines.push('Add this to your MCP configuration file:\n');
|
|
426
|
+
lines.push('```json');
|
|
427
|
+
lines.push(JSON.stringify(result.aggregateConfig, null, 2));
|
|
428
|
+
lines.push('```\n');
|
|
429
|
+
}
|
|
430
|
+
// Post-install instructions
|
|
431
|
+
if (result.postInstallInstructions.length > 0) {
|
|
432
|
+
lines.push('---\n');
|
|
433
|
+
lines.push('## Post-Installation\n');
|
|
434
|
+
for (const instruction of result.postInstallInstructions) {
|
|
435
|
+
lines.push(instruction);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
return lines.join('\n');
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=execute-installation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-installation.js","sourceRoot":"","sources":["../../../src/tools/project-kit/execute-installation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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 type { GenerateMCPKitInput, GenerateMCPKitOutput } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Generate complete project kit.
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateMCPKit(input: GenerateMCPKitInput): GenerateMCPKitOutput;
|
|
12
|
+
/**
|
|
13
|
+
* Tool definition for MCP server registration.
|
|
14
|
+
*/
|
|
15
|
+
export declare const generateMCPKitTool: {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
inputSchema: {
|
|
19
|
+
type: string;
|
|
20
|
+
properties: {
|
|
21
|
+
projectDescription: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
minLength: number;
|
|
25
|
+
maxLength: number;
|
|
26
|
+
};
|
|
27
|
+
priorities: {
|
|
28
|
+
type: string;
|
|
29
|
+
items: {
|
|
30
|
+
type: string;
|
|
31
|
+
enum: readonly ["time-to-market", "scalability", "developer-experience", "cost-efficiency", "performance", "security", "maintainability"];
|
|
32
|
+
};
|
|
33
|
+
maxItems: number;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
constraints: {
|
|
37
|
+
type: string;
|
|
38
|
+
items: {
|
|
39
|
+
type: string;
|
|
40
|
+
};
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
projectType: {
|
|
44
|
+
type: string;
|
|
45
|
+
enum: readonly ["web-app", "mobile-app", "api", "saas", "e-commerce", "marketplace", "cli", "library"];
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
scale: {
|
|
49
|
+
type: string;
|
|
50
|
+
enum: readonly ["mvp", "startup", "growth", "enterprise"];
|
|
51
|
+
description: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
required: string[];
|
|
55
|
+
};
|
|
56
|
+
handler: (params: unknown) => Promise<{
|
|
57
|
+
content: {
|
|
58
|
+
type: string;
|
|
59
|
+
text: string;
|
|
60
|
+
}[];
|
|
61
|
+
isError?: undefined;
|
|
62
|
+
} | {
|
|
63
|
+
content: {
|
|
64
|
+
type: string;
|
|
65
|
+
text: string;
|
|
66
|
+
}[];
|
|
67
|
+
isError: boolean;
|
|
68
|
+
}>;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/tools/project-kit/generate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACX,mBAAmB,EACnB,oBAAoB,EAMpB,MAAM,YAAY,CAAC;AAiQpB;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAiE/E;AA6CD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAmDN,OAAO;;;;;;;;;;;;;CAiC/B,CAAC"}
|