@tostudy-ai/mcp-setup 1.0.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/README.md +149 -0
- package/bin/cli.js +6 -0
- package/dist/__tests__/e2e-diagnostic-repair-flow.test.d.ts +52 -0
- package/dist/__tests__/e2e-diagnostic-repair-flow.test.d.ts.map +1 -0
- package/dist/__tests__/e2e-diagnostic-repair-flow.test.js +720 -0
- package/dist/__tests__/e2e-diagnostic-repair-flow.test.js.map +1 -0
- package/dist/__tests__/e2e-wizard-flow.test.d.ts +43 -0
- package/dist/__tests__/e2e-wizard-flow.test.d.ts.map +1 -0
- package/dist/__tests__/e2e-wizard-flow.test.js +407 -0
- package/dist/__tests__/e2e-wizard-flow.test.js.map +1 -0
- package/dist/__tests__/ide-handlers.test.d.ts +10 -0
- package/dist/__tests__/ide-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/ide-handlers.test.js +336 -0
- package/dist/__tests__/ide-handlers.test.js.map +1 -0
- package/dist/__tests__/install-command.test.d.ts +10 -0
- package/dist/__tests__/install-command.test.d.ts.map +1 -0
- package/dist/__tests__/install-command.test.js +237 -0
- package/dist/__tests__/install-command.test.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +117 -0
- package/dist/config.js.map +1 -0
- package/dist/detect.d.ts +42 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +277 -0
- package/dist/detect.js.map +1 -0
- package/dist/diagnose.d.ts +36 -0
- package/dist/diagnose.d.ts.map +1 -0
- package/dist/diagnose.js +512 -0
- package/dist/diagnose.js.map +1 -0
- package/dist/ide-handlers/base.d.ts +36 -0
- package/dist/ide-handlers/base.d.ts.map +1 -0
- package/dist/ide-handlers/base.js +41 -0
- package/dist/ide-handlers/base.js.map +1 -0
- package/dist/ide-handlers/claude-code.d.ts +15 -0
- package/dist/ide-handlers/claude-code.d.ts.map +1 -0
- package/dist/ide-handlers/claude-code.js +50 -0
- package/dist/ide-handlers/claude-code.js.map +1 -0
- package/dist/ide-handlers/cursor.d.ts +15 -0
- package/dist/ide-handlers/cursor.d.ts.map +1 -0
- package/dist/ide-handlers/cursor.js +61 -0
- package/dist/ide-handlers/cursor.js.map +1 -0
- package/dist/ide-handlers/desktop.d.ts +16 -0
- package/dist/ide-handlers/desktop.d.ts.map +1 -0
- package/dist/ide-handlers/desktop.js +26 -0
- package/dist/ide-handlers/desktop.js.map +1 -0
- package/dist/ide-handlers/index.d.ts +21 -0
- package/dist/ide-handlers/index.d.ts.map +1 -0
- package/dist/ide-handlers/index.js +49 -0
- package/dist/ide-handlers/index.js.map +1 -0
- package/dist/ide-handlers/manual.d.ts +16 -0
- package/dist/ide-handlers/manual.d.ts.map +1 -0
- package/dist/ide-handlers/manual.js +34 -0
- package/dist/ide-handlers/manual.js.map +1 -0
- package/dist/ide-handlers/opencode.d.ts +15 -0
- package/dist/ide-handlers/opencode.d.ts.map +1 -0
- package/dist/ide-handlers/opencode.js +57 -0
- package/dist/ide-handlers/opencode.js.map +1 -0
- package/dist/ide-handlers/vscode.d.ts +16 -0
- package/dist/ide-handlers/vscode.d.ts.map +1 -0
- package/dist/ide-handlers/vscode.js +62 -0
- package/dist/ide-handlers/vscode.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +501 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +23 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +68 -0
- package/dist/prompts.js.map +1 -0
- package/dist/repair.d.ts +50 -0
- package/dist/repair.d.ts.map +1 -0
- package/dist/repair.js +588 -0
- package/dist/repair.js.map +1 -0
- package/package.json +54 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Catalyst MCP Setup CLI
|
|
4
|
+
*
|
|
5
|
+
* Configures Claude Code to connect to the Catalyst MCP server.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx @tostudy-ai/mcp-setup
|
|
9
|
+
* npx @tostudy-ai/mcp-setup wizard
|
|
10
|
+
* npx @tostudy-ai/mcp-setup --api-key <key>
|
|
11
|
+
* npx @tostudy-ai/mcp-setup --uninstall
|
|
12
|
+
*/
|
|
13
|
+
import { program } from 'commander';
|
|
14
|
+
import chalk from 'chalk';
|
|
15
|
+
import { getClaudeConfigPath, isClaudeInstalled, addTostudyMcpServer, removeTostudyMcpServer, isTostudyMcpConfigured, } from './config.js';
|
|
16
|
+
import { promptApiKey, confirm } from './prompts.js';
|
|
17
|
+
import { getInstalledIDEs } from './detect.js';
|
|
18
|
+
import { runDiagnostics, printDiagnosticReport } from './diagnose.js';
|
|
19
|
+
import { repairAllIssues, printRepairReport } from './repair.js';
|
|
20
|
+
import { getIDEHandler } from './ide-handlers/index.js';
|
|
21
|
+
const VERSION = '1.0.0';
|
|
22
|
+
const DEFAULT_PLATFORM_URL = 'https://tostudy.com';
|
|
23
|
+
function println(message = '') {
|
|
24
|
+
process.stdout.write(`${message}\n`);
|
|
25
|
+
}
|
|
26
|
+
function eprintln(message = '') {
|
|
27
|
+
process.stderr.write(`${message}\n`);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Print styled banner
|
|
31
|
+
*/
|
|
32
|
+
function printBanner() {
|
|
33
|
+
println();
|
|
34
|
+
println(chalk.cyan(' ╔═══════════════════════════════════════╗'));
|
|
35
|
+
println(chalk.cyan(' ║') + chalk.white.bold(' Catalyst MCP Setup ') + chalk.cyan('║'));
|
|
36
|
+
println(chalk.cyan(' ╚═══════════════════════════════════════╝'));
|
|
37
|
+
println();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate API key with the platform
|
|
41
|
+
*/
|
|
42
|
+
async function validateApiKey(apiKey, platformUrl) {
|
|
43
|
+
try {
|
|
44
|
+
const response = await fetch(`${platformUrl}/api/mcp/heartbeat`, {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: {
|
|
47
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
48
|
+
'Content-Type': 'application/json',
|
|
49
|
+
},
|
|
50
|
+
body: JSON.stringify({ timestamp: new Date().toISOString() }),
|
|
51
|
+
});
|
|
52
|
+
return response.ok || response.status === 204;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Network error - can't validate, but allow anyway for offline setup
|
|
56
|
+
println(chalk.yellow('! Nao foi possivel validar a API key (servidor offline?)'));
|
|
57
|
+
println(chalk.yellow(' A configuracao sera salva mesmo assim.'));
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Main setup flow
|
|
63
|
+
*/
|
|
64
|
+
async function setup(apiKey, platformUrl) {
|
|
65
|
+
printBanner();
|
|
66
|
+
// Check if Claude Code is installed
|
|
67
|
+
if (!isClaudeInstalled()) {
|
|
68
|
+
println(chalk.red('X Claude Code nao encontrado.'));
|
|
69
|
+
println();
|
|
70
|
+
println(' Por favor, instale o Claude Code primeiro:');
|
|
71
|
+
println(chalk.cyan(' https://claude.ai/download'));
|
|
72
|
+
println();
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
const configPath = getClaudeConfigPath();
|
|
76
|
+
println(chalk.gray(`Config: ${configPath}`));
|
|
77
|
+
println();
|
|
78
|
+
// Check if already configured
|
|
79
|
+
if (isTostudyMcpConfigured()) {
|
|
80
|
+
println(chalk.yellow('! Catalyst MCP ja esta configurado.'));
|
|
81
|
+
const overwrite = await confirm('Deseja reconfigurar?', false);
|
|
82
|
+
if (!overwrite) {
|
|
83
|
+
println(chalk.gray('Operacao cancelada.'));
|
|
84
|
+
process.exit(0);
|
|
85
|
+
}
|
|
86
|
+
println();
|
|
87
|
+
}
|
|
88
|
+
// Get API key
|
|
89
|
+
const key = apiKey || process.env.TOSTUDY_API_KEY || await promptApiKey();
|
|
90
|
+
const url = platformUrl || process.env.TOSTUDY_PLATFORM_URL || DEFAULT_PLATFORM_URL;
|
|
91
|
+
// Validate API key
|
|
92
|
+
println();
|
|
93
|
+
process.stdout.write(chalk.gray('Validando API key... '));
|
|
94
|
+
const valid = await validateApiKey(key, url);
|
|
95
|
+
if (!valid) {
|
|
96
|
+
println(chalk.red('FALHOU'));
|
|
97
|
+
println();
|
|
98
|
+
println(chalk.red('API key invalida ou expirada.'));
|
|
99
|
+
println();
|
|
100
|
+
println('Para gerar uma nova API key:');
|
|
101
|
+
println(chalk.cyan(` ${url}/student/settings/mcp`));
|
|
102
|
+
println();
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
println(chalk.green('OK'));
|
|
106
|
+
// Configure Claude Code
|
|
107
|
+
process.stdout.write(chalk.gray('Configurando Claude Code... '));
|
|
108
|
+
try {
|
|
109
|
+
addTostudyMcpServer(key, url);
|
|
110
|
+
println(chalk.green('OK'));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
println(chalk.red('FALHOU'));
|
|
114
|
+
eprintln();
|
|
115
|
+
eprintln(chalk.red('Erro ao salvar configuracao:'));
|
|
116
|
+
eprintln(error instanceof Error ? error.message : String(error));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
// Success
|
|
120
|
+
println();
|
|
121
|
+
println(chalk.green.bold('Configuracao concluida!'));
|
|
122
|
+
println();
|
|
123
|
+
println(chalk.white('Proximos passos:'));
|
|
124
|
+
println(chalk.gray(' 1.') + ' Reinicie o Claude Code');
|
|
125
|
+
println(chalk.gray(' 2.') + ' O servidor MCP iniciara automaticamente');
|
|
126
|
+
println(chalk.gray(' 3.') + ' Use ' + chalk.cyan('/courses') + ' para ver seus cursos');
|
|
127
|
+
println();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Uninstall flow
|
|
131
|
+
*/
|
|
132
|
+
async function uninstall() {
|
|
133
|
+
printBanner();
|
|
134
|
+
if (!isTostudyMcpConfigured()) {
|
|
135
|
+
println(chalk.yellow('Catalyst MCP nao esta configurado.'));
|
|
136
|
+
process.exit(0);
|
|
137
|
+
}
|
|
138
|
+
const shouldUninstall = await confirm('Remover configuracao do Catalyst MCP?', false);
|
|
139
|
+
if (!shouldUninstall) {
|
|
140
|
+
println(chalk.gray('Operacao cancelada.'));
|
|
141
|
+
process.exit(0);
|
|
142
|
+
}
|
|
143
|
+
process.stdout.write(chalk.gray('Removendo configuracao... '));
|
|
144
|
+
try {
|
|
145
|
+
removeTostudyMcpServer();
|
|
146
|
+
println(chalk.green('OK'));
|
|
147
|
+
println();
|
|
148
|
+
println(chalk.green('Configuracao removida com sucesso.'));
|
|
149
|
+
println(chalk.gray('Reinicie o Claude Code para aplicar as mudancas.'));
|
|
150
|
+
println();
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
println(chalk.red('FALHOU'));
|
|
154
|
+
eprintln(error instanceof Error ? error.message : String(error));
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Print wizard step header
|
|
160
|
+
*/
|
|
161
|
+
function printStep(step, total, title) {
|
|
162
|
+
println();
|
|
163
|
+
println(chalk.cyan(`━━━ Passo ${step}/${total}: ${title} ━━━`));
|
|
164
|
+
println();
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Print IDE detection results
|
|
168
|
+
*/
|
|
169
|
+
function printIDEDetection(installedIDEs) {
|
|
170
|
+
if (installedIDEs.length === 0) {
|
|
171
|
+
println(chalk.yellow(' Nenhuma IDE suportada detectada.'));
|
|
172
|
+
println(chalk.gray(' O setup continuara para Claude Code.'));
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
println(chalk.green(' IDEs detectadas:'));
|
|
176
|
+
for (const ide of installedIDEs) {
|
|
177
|
+
const version = ide.version ? chalk.gray(` (${ide.version})`) : '';
|
|
178
|
+
println(` ${chalk.green('✓')} ${ide.name}${version}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Interactive wizard flow
|
|
184
|
+
* Guides user through complete MCP setup with step-by-step instructions
|
|
185
|
+
*/
|
|
186
|
+
async function wizard(options) {
|
|
187
|
+
const TOTAL_STEPS = 4;
|
|
188
|
+
// Print wizard banner
|
|
189
|
+
println();
|
|
190
|
+
println(chalk.cyan(' ╔═══════════════════════════════════════════════╗'));
|
|
191
|
+
println(chalk.cyan(' ║') + chalk.white.bold(' Catalyst MCP Setup Wizard ') + chalk.cyan('║'));
|
|
192
|
+
println(chalk.cyan(' ║') + chalk.gray(' Configuracao guiada passo a passo ') + chalk.cyan('║'));
|
|
193
|
+
println(chalk.cyan(' ╚═══════════════════════════════════════════════╝'));
|
|
194
|
+
println();
|
|
195
|
+
println(chalk.gray(' Este assistente vai configurar o Claude Code para'));
|
|
196
|
+
println(chalk.gray(' conectar ao servidor MCP da plataforma Catalyst.'));
|
|
197
|
+
println();
|
|
198
|
+
// ━━━ Step 1: Environment Detection ━━━
|
|
199
|
+
printStep(1, TOTAL_STEPS, 'Detectando ambiente');
|
|
200
|
+
// Check Claude Code
|
|
201
|
+
process.stdout.write(' Verificando Claude Code... ');
|
|
202
|
+
if (!isClaudeInstalled()) {
|
|
203
|
+
println(chalk.red('NAO ENCONTRADO'));
|
|
204
|
+
println();
|
|
205
|
+
println(chalk.red(' Claude Code nao esta instalado.'));
|
|
206
|
+
println();
|
|
207
|
+
println(' Por favor, instale primeiro:');
|
|
208
|
+
println(chalk.cyan(' https://claude.ai/download'));
|
|
209
|
+
println();
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
println(chalk.green('OK'));
|
|
213
|
+
const configPath = getClaudeConfigPath();
|
|
214
|
+
println(chalk.gray(` Config: ${configPath}`));
|
|
215
|
+
// Check for other IDEs
|
|
216
|
+
process.stdout.write(' Detectando IDEs... ');
|
|
217
|
+
const installedIDEs = getInstalledIDEs();
|
|
218
|
+
println(chalk.green('OK'));
|
|
219
|
+
printIDEDetection(installedIDEs);
|
|
220
|
+
// Check existing configuration
|
|
221
|
+
process.stdout.write(' Verificando configuracao atual... ');
|
|
222
|
+
const alreadyConfigured = isTostudyMcpConfigured();
|
|
223
|
+
if (alreadyConfigured) {
|
|
224
|
+
println(chalk.yellow('JA CONFIGURADO'));
|
|
225
|
+
println();
|
|
226
|
+
const overwrite = await confirm(' Deseja reconfigurar?', false);
|
|
227
|
+
if (!overwrite) {
|
|
228
|
+
println();
|
|
229
|
+
println(chalk.gray(' Operacao cancelada.'));
|
|
230
|
+
process.exit(0);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
println(chalk.gray('Nao configurado'));
|
|
235
|
+
}
|
|
236
|
+
// ━━━ Step 2: API Key Configuration ━━━
|
|
237
|
+
printStep(2, TOTAL_STEPS, 'Configurando API Key');
|
|
238
|
+
println(chalk.gray(' A API key conecta o Claude Code a sua conta na plataforma.'));
|
|
239
|
+
println();
|
|
240
|
+
let apiKey = options.apiKey || process.env.TOSTUDY_API_KEY;
|
|
241
|
+
if (!apiKey) {
|
|
242
|
+
println(' Acesse sua API key em:');
|
|
243
|
+
println(chalk.cyan(` ${options.url || DEFAULT_PLATFORM_URL}/student/settings/mcp`));
|
|
244
|
+
println();
|
|
245
|
+
apiKey = await promptApiKey();
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
println(chalk.green(' ✓ API key fornecida via parametro ou ambiente'));
|
|
249
|
+
}
|
|
250
|
+
const platformUrl = options.url || process.env.TOSTUDY_PLATFORM_URL || DEFAULT_PLATFORM_URL;
|
|
251
|
+
// Validate API key
|
|
252
|
+
println();
|
|
253
|
+
process.stdout.write(chalk.gray(' Validando API key... '));
|
|
254
|
+
const valid = await validateApiKey(apiKey, platformUrl);
|
|
255
|
+
if (!valid) {
|
|
256
|
+
println(chalk.red('FALHOU'));
|
|
257
|
+
println();
|
|
258
|
+
println(chalk.red(' API key invalida ou expirada.'));
|
|
259
|
+
println();
|
|
260
|
+
println(' Para gerar uma nova API key:');
|
|
261
|
+
println(chalk.cyan(` ${platformUrl}/student/settings/mcp`));
|
|
262
|
+
println();
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
println(chalk.green('OK'));
|
|
266
|
+
// ━━━ Step 3: Save Configuration ━━━
|
|
267
|
+
printStep(3, TOTAL_STEPS, 'Salvando configuracao');
|
|
268
|
+
process.stdout.write(' Configurando Claude Code... ');
|
|
269
|
+
try {
|
|
270
|
+
addTostudyMcpServer(apiKey, platformUrl);
|
|
271
|
+
println(chalk.green('OK'));
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
println(chalk.red('FALHOU'));
|
|
275
|
+
eprintln();
|
|
276
|
+
eprintln(chalk.red(' Erro ao salvar configuracao:'));
|
|
277
|
+
eprintln(' ' + (error instanceof Error ? error.message : String(error)));
|
|
278
|
+
process.exit(1);
|
|
279
|
+
}
|
|
280
|
+
// ━━━ Step 4: Diagnostics & Verification ━━━
|
|
281
|
+
printStep(4, TOTAL_STEPS, 'Verificacao final');
|
|
282
|
+
if (!options.skipDiagnostics) {
|
|
283
|
+
process.stdout.write(' Executando diagnostico... ');
|
|
284
|
+
const report = await runDiagnostics();
|
|
285
|
+
println(chalk.green('OK'));
|
|
286
|
+
println();
|
|
287
|
+
// Filter out expected issues that we just fixed
|
|
288
|
+
const remainingIssues = report.issues.filter((issue) => !['mcp-not-configured', 'config-missing'].includes(issue.id));
|
|
289
|
+
if (remainingIssues.length > 0) {
|
|
290
|
+
println(chalk.yellow(' Avisos encontrados:'));
|
|
291
|
+
for (const issue of remainingIssues) {
|
|
292
|
+
const icon = issue.severity === 'critical' ? chalk.red('●') :
|
|
293
|
+
issue.severity === 'warning' ? chalk.yellow('●') : chalk.blue('●');
|
|
294
|
+
println(` ${icon} ${issue.title}`);
|
|
295
|
+
}
|
|
296
|
+
println();
|
|
297
|
+
// Auto-repair if enabled
|
|
298
|
+
if (options.autoRepair) {
|
|
299
|
+
process.stdout.write(' Tentando reparar automaticamente... ');
|
|
300
|
+
const repairReport = repairAllIssues(report, apiKey, platformUrl);
|
|
301
|
+
if (repairReport.repairsSucceeded > 0) {
|
|
302
|
+
println(chalk.green(`${repairReport.repairsSucceeded} corrigido(s)`));
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
println(chalk.yellow('Nenhum reparo aplicado'));
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
println(chalk.gray(' Dica: Execute "npx @tostudy-ai/mcp-setup diagnose" para mais detalhes.'));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
println(chalk.green(' ✓ Nenhum problema encontrado!'));
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
println(chalk.gray(' Diagnostico ignorado (--skip-diagnostics)'));
|
|
318
|
+
}
|
|
319
|
+
// ━━━ Success ━━━
|
|
320
|
+
println();
|
|
321
|
+
println(chalk.green(' ╔═══════════════════════════════════════════════╗'));
|
|
322
|
+
println(chalk.green(' ║') + chalk.white.bold(' Configuracao concluida com sucesso! ') + chalk.green('║'));
|
|
323
|
+
println(chalk.green(' ╚═══════════════════════════════════════════════╝'));
|
|
324
|
+
println();
|
|
325
|
+
println(chalk.white(' Proximos passos:'));
|
|
326
|
+
println();
|
|
327
|
+
println(chalk.gray(' 1.') + ' Reinicie o Claude Code');
|
|
328
|
+
println(chalk.gray(' 2.') + ' O servidor MCP iniciara automaticamente');
|
|
329
|
+
println(chalk.gray(' 3.') + ' Use ' + chalk.cyan('/courses') + ' para ver seus cursos');
|
|
330
|
+
println();
|
|
331
|
+
println(chalk.gray(' Comandos uteis:'));
|
|
332
|
+
println(chalk.gray(' ') + chalk.cyan('npx @tostudy-ai/mcp-setup diagnose') + chalk.gray(' - Verificar problemas'));
|
|
333
|
+
println(chalk.gray(' ') + chalk.cyan('npx @tostudy-ai/mcp-setup repair') + chalk.gray(' - Reparar automaticamente'));
|
|
334
|
+
println();
|
|
335
|
+
}
|
|
336
|
+
// CLI setup
|
|
337
|
+
program
|
|
338
|
+
.name('tostudy-mcp-setup')
|
|
339
|
+
.description('Configura o Claude Code para usar o Catalyst MCP server')
|
|
340
|
+
.version(VERSION);
|
|
341
|
+
// Default command (setup)
|
|
342
|
+
program
|
|
343
|
+
.option('-k, --api-key <key>', 'API key da plataforma Catalyst')
|
|
344
|
+
.option('-u, --url <url>', 'URL da plataforma (default: https://tostudy.com)')
|
|
345
|
+
.option('--uninstall', 'Remove a configuracao do Catalyst MCP')
|
|
346
|
+
.action(async (options) => {
|
|
347
|
+
try {
|
|
348
|
+
if (options.uninstall) {
|
|
349
|
+
await uninstall();
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
await setup(options.apiKey, options.url);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
eprintln();
|
|
357
|
+
eprintln(chalk.red('Erro:') + ' ' + (error instanceof Error ? error.message : String(error)));
|
|
358
|
+
process.exit(1);
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
// Wizard command - interactive step-by-step setup
|
|
362
|
+
program
|
|
363
|
+
.command('wizard')
|
|
364
|
+
.description('Assistente interativo de configuracao passo a passo')
|
|
365
|
+
.option('-k, --api-key <key>', 'API key da plataforma Catalyst')
|
|
366
|
+
.option('-u, --url <url>', 'URL da plataforma (default: https://tostudy.com)')
|
|
367
|
+
.option('--skip-diagnostics', 'Pula a verificacao de diagnostico apos setup')
|
|
368
|
+
.option('--auto-repair', 'Tenta reparar problemas automaticamente')
|
|
369
|
+
.action(async (options) => {
|
|
370
|
+
try {
|
|
371
|
+
await wizard({
|
|
372
|
+
apiKey: options.apiKey,
|
|
373
|
+
url: options.url,
|
|
374
|
+
skipDiagnostics: options.skipDiagnostics,
|
|
375
|
+
autoRepair: options.autoRepair,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
eprintln();
|
|
380
|
+
eprintln(chalk.red('Erro:') + ' ' + (error instanceof Error ? error.message : String(error)));
|
|
381
|
+
process.exit(1);
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
// Diagnose command
|
|
385
|
+
program
|
|
386
|
+
.command('diagnose')
|
|
387
|
+
.description('Executa diagnostico de problemas na configuracao MCP')
|
|
388
|
+
.option('--json', 'Saida em formato JSON')
|
|
389
|
+
.action(async (options) => {
|
|
390
|
+
try {
|
|
391
|
+
const report = await runDiagnostics();
|
|
392
|
+
if (options.json) {
|
|
393
|
+
println(JSON.stringify(report, null, 2));
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
printDiagnosticReport(report);
|
|
397
|
+
}
|
|
398
|
+
process.exit(report.passed ? 0 : 1);
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
eprintln();
|
|
402
|
+
eprintln(chalk.red('Erro ao executar diagnostico:'));
|
|
403
|
+
eprintln(error instanceof Error ? error.message : String(error));
|
|
404
|
+
process.exit(1);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
// Repair command
|
|
408
|
+
program
|
|
409
|
+
.command('repair')
|
|
410
|
+
.description('Repara problemas de configuracao automaticamente')
|
|
411
|
+
.option('-k, --api-key <key>', 'API key para reparos que necessitam autenticacao')
|
|
412
|
+
.option('-u, --url <url>', 'URL da plataforma (default: https://tostudy.com)')
|
|
413
|
+
.option('--json', 'Saida em formato JSON')
|
|
414
|
+
.action(async (options) => {
|
|
415
|
+
try {
|
|
416
|
+
const apiKey = options.apiKey || process.env.TOSTUDY_API_KEY;
|
|
417
|
+
const platformUrl = options.url || DEFAULT_PLATFORM_URL;
|
|
418
|
+
const diagnostic = await runDiagnostics();
|
|
419
|
+
const repair = repairAllIssues(diagnostic, apiKey, platformUrl);
|
|
420
|
+
if (options.json) {
|
|
421
|
+
println(JSON.stringify({ diagnostic, repair }, null, 2));
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
printRepairReport(repair);
|
|
425
|
+
}
|
|
426
|
+
const hasUnfixedCritical = diagnostic.issues.some((issue) => issue.severity === 'critical' && !repair.results.find((r) => r.issueId === issue.id && r.success));
|
|
427
|
+
process.exit(hasUnfixedCritical ? 1 : 0);
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
eprintln();
|
|
431
|
+
eprintln(chalk.red('Erro ao executar reparo:'));
|
|
432
|
+
eprintln(error instanceof Error ? error.message : String(error));
|
|
433
|
+
process.exit(1);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
// Install command - non-interactive, used by the web wizard's npx command
|
|
437
|
+
const SUPPORTED_IDES = ['claude-code', 'cursor', 'vscode', 'desktop', 'opencode', 'manual'];
|
|
438
|
+
program
|
|
439
|
+
.command('install')
|
|
440
|
+
.description('Install MCP config for a specific IDE (used by the web setup wizard)')
|
|
441
|
+
.requiredOption('--ide <ide>', `Target IDE: ${SUPPORTED_IDES.join(', ')}`)
|
|
442
|
+
.requiredOption('--key <key>', 'API key from the platform')
|
|
443
|
+
.option('--url <url>', 'Platform URL (default: https://tostudy.com)', DEFAULT_PLATFORM_URL)
|
|
444
|
+
.action(async (options) => {
|
|
445
|
+
try {
|
|
446
|
+
const ide = options.ide;
|
|
447
|
+
if (!SUPPORTED_IDES.includes(ide)) {
|
|
448
|
+
eprintln(chalk.red(`Unknown IDE: ${ide}`));
|
|
449
|
+
eprintln(`Supported: ${SUPPORTED_IDES.join(', ')}`);
|
|
450
|
+
process.exit(1);
|
|
451
|
+
}
|
|
452
|
+
const handler = getIDEHandler(ide);
|
|
453
|
+
const mcpUrl = resolveMcpServerUrl(options.url);
|
|
454
|
+
println();
|
|
455
|
+
println(chalk.cyan(` Installing MCP config for ${handler.name}...`));
|
|
456
|
+
// Write config
|
|
457
|
+
process.stdout.write(chalk.gray(' Writing config... '));
|
|
458
|
+
await handler.writeConfig(options.key, mcpUrl);
|
|
459
|
+
println(chalk.green('OK'));
|
|
460
|
+
if (ide !== 'manual') {
|
|
461
|
+
println(chalk.gray(` Config: ${handler.getConfigPath()}`));
|
|
462
|
+
}
|
|
463
|
+
// Verify heartbeat
|
|
464
|
+
process.stdout.write(chalk.gray(' Verifying connection... '));
|
|
465
|
+
const verified = await handler.verify(options.key, options.url);
|
|
466
|
+
if (verified) {
|
|
467
|
+
println(chalk.green('OK'));
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
println(chalk.yellow('SKIPPED (server not reachable)'));
|
|
471
|
+
println(chalk.gray(' The config was saved. Connection will work when the server is available.'));
|
|
472
|
+
}
|
|
473
|
+
println();
|
|
474
|
+
println(chalk.green.bold(' Done! Restart your IDE to activate the MCP server.'));
|
|
475
|
+
println();
|
|
476
|
+
}
|
|
477
|
+
catch (error) {
|
|
478
|
+
eprintln();
|
|
479
|
+
eprintln(chalk.red('Install failed:') + ' ' + (error instanceof Error ? error.message : String(error)));
|
|
480
|
+
process.exit(1);
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
/**
|
|
484
|
+
* Resolve the MCP server URL from the platform URL.
|
|
485
|
+
* The platform runs on port 3700, MCP server on 3701.
|
|
486
|
+
*/
|
|
487
|
+
function resolveMcpServerUrl(platformUrl) {
|
|
488
|
+
if (platformUrl.includes(':3700')) {
|
|
489
|
+
return platformUrl.replace(':3700', ':3701');
|
|
490
|
+
}
|
|
491
|
+
if (platformUrl.includes('localhost') && !platformUrl.includes(':')) {
|
|
492
|
+
return 'http://localhost:3701';
|
|
493
|
+
}
|
|
494
|
+
// Production: use dedicated MCP subdomain
|
|
495
|
+
if (platformUrl.includes('tostudy')) {
|
|
496
|
+
return process.env.MCP_SERVER_URL || 'https://mcp.tostudy.ai';
|
|
497
|
+
}
|
|
498
|
+
return platformUrl;
|
|
499
|
+
}
|
|
500
|
+
program.parse();
|
|
501
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Prompts
|
|
3
|
+
*
|
|
4
|
+
* Simple readline-based prompts for CLI interaction.
|
|
5
|
+
* Uses Node.js built-in readline to minimize dependencies.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Prompt user for text input
|
|
9
|
+
*/
|
|
10
|
+
export declare function prompt(question: string): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Prompt for API key with validation
|
|
13
|
+
*/
|
|
14
|
+
export declare function promptApiKey(): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Prompt for yes/no confirmation
|
|
17
|
+
*/
|
|
18
|
+
export declare function confirm(question: string, defaultValue?: boolean): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Prompt for platform URL
|
|
21
|
+
*/
|
|
22
|
+
export declare function promptPlatformUrl(defaultUrl: string): Promise<string>;
|
|
23
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;GAEG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQxD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBpD;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAStF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO3E"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Prompts
|
|
3
|
+
*
|
|
4
|
+
* Simple readline-based prompts for CLI interaction.
|
|
5
|
+
* Uses Node.js built-in readline to minimize dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import * as readline from 'node:readline';
|
|
8
|
+
function println(message = '') {
|
|
9
|
+
process.stdout.write(`${message}\n`);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Create a readline interface for user input
|
|
13
|
+
*/
|
|
14
|
+
function createInterface() {
|
|
15
|
+
return readline.createInterface({
|
|
16
|
+
input: process.stdin,
|
|
17
|
+
output: process.stdout,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Prompt user for text input
|
|
22
|
+
*/
|
|
23
|
+
export function prompt(question) {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
const rl = createInterface();
|
|
26
|
+
rl.question(question, (answer) => {
|
|
27
|
+
rl.close();
|
|
28
|
+
resolve(answer.trim());
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Prompt for API key with validation
|
|
34
|
+
*/
|
|
35
|
+
export async function promptApiKey() {
|
|
36
|
+
println();
|
|
37
|
+
println('Cole sua API key (de /student/settings/mcp):');
|
|
38
|
+
const apiKey = await prompt('> ');
|
|
39
|
+
if (!apiKey) {
|
|
40
|
+
throw new Error('API key nao pode ser vazia');
|
|
41
|
+
}
|
|
42
|
+
// Basic validation - key should be at least 32 characters
|
|
43
|
+
if (apiKey.length < 32) {
|
|
44
|
+
throw new Error('API key parece ser muito curta. Verifique e tente novamente.');
|
|
45
|
+
}
|
|
46
|
+
return apiKey;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Prompt for yes/no confirmation
|
|
50
|
+
*/
|
|
51
|
+
export async function confirm(question, defaultValue = false) {
|
|
52
|
+
const defaultStr = defaultValue ? '[S/n]' : '[s/N]';
|
|
53
|
+
const answer = await prompt(`${question} ${defaultStr} `);
|
|
54
|
+
if (!answer) {
|
|
55
|
+
return defaultValue;
|
|
56
|
+
}
|
|
57
|
+
return answer.toLowerCase().startsWith('s') || answer.toLowerCase().startsWith('y');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Prompt for platform URL
|
|
61
|
+
*/
|
|
62
|
+
export async function promptPlatformUrl(defaultUrl) {
|
|
63
|
+
println();
|
|
64
|
+
println(`URL da plataforma (default: ${defaultUrl}):`);
|
|
65
|
+
const url = await prompt('> ');
|
|
66
|
+
return url || defaultUrl;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,SAAS,OAAO,CAAC,OAAO,GAAG,EAAE;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,QAAgB;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,8CAA8C,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,0DAA0D;IAC1D,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB,EAAE,YAAY,GAAG,KAAK;IAClE,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,+BAA+B,UAAU,IAAI,CAAC,CAAC;IAEvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAE/B,OAAO,GAAG,IAAI,UAAU,CAAC;AAC3B,CAAC"}
|