@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.
Files changed (75) hide show
  1. package/README.md +149 -0
  2. package/bin/cli.js +6 -0
  3. package/dist/__tests__/e2e-diagnostic-repair-flow.test.d.ts +52 -0
  4. package/dist/__tests__/e2e-diagnostic-repair-flow.test.d.ts.map +1 -0
  5. package/dist/__tests__/e2e-diagnostic-repair-flow.test.js +720 -0
  6. package/dist/__tests__/e2e-diagnostic-repair-flow.test.js.map +1 -0
  7. package/dist/__tests__/e2e-wizard-flow.test.d.ts +43 -0
  8. package/dist/__tests__/e2e-wizard-flow.test.d.ts.map +1 -0
  9. package/dist/__tests__/e2e-wizard-flow.test.js +407 -0
  10. package/dist/__tests__/e2e-wizard-flow.test.js.map +1 -0
  11. package/dist/__tests__/ide-handlers.test.d.ts +10 -0
  12. package/dist/__tests__/ide-handlers.test.d.ts.map +1 -0
  13. package/dist/__tests__/ide-handlers.test.js +336 -0
  14. package/dist/__tests__/ide-handlers.test.js.map +1 -0
  15. package/dist/__tests__/install-command.test.d.ts +10 -0
  16. package/dist/__tests__/install-command.test.d.ts.map +1 -0
  17. package/dist/__tests__/install-command.test.js +237 -0
  18. package/dist/__tests__/install-command.test.js.map +1 -0
  19. package/dist/config.d.ts +51 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +117 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/detect.d.ts +42 -0
  24. package/dist/detect.d.ts.map +1 -0
  25. package/dist/detect.js +277 -0
  26. package/dist/detect.js.map +1 -0
  27. package/dist/diagnose.d.ts +36 -0
  28. package/dist/diagnose.d.ts.map +1 -0
  29. package/dist/diagnose.js +512 -0
  30. package/dist/diagnose.js.map +1 -0
  31. package/dist/ide-handlers/base.d.ts +36 -0
  32. package/dist/ide-handlers/base.d.ts.map +1 -0
  33. package/dist/ide-handlers/base.js +41 -0
  34. package/dist/ide-handlers/base.js.map +1 -0
  35. package/dist/ide-handlers/claude-code.d.ts +15 -0
  36. package/dist/ide-handlers/claude-code.d.ts.map +1 -0
  37. package/dist/ide-handlers/claude-code.js +50 -0
  38. package/dist/ide-handlers/claude-code.js.map +1 -0
  39. package/dist/ide-handlers/cursor.d.ts +15 -0
  40. package/dist/ide-handlers/cursor.d.ts.map +1 -0
  41. package/dist/ide-handlers/cursor.js +61 -0
  42. package/dist/ide-handlers/cursor.js.map +1 -0
  43. package/dist/ide-handlers/desktop.d.ts +16 -0
  44. package/dist/ide-handlers/desktop.d.ts.map +1 -0
  45. package/dist/ide-handlers/desktop.js +26 -0
  46. package/dist/ide-handlers/desktop.js.map +1 -0
  47. package/dist/ide-handlers/index.d.ts +21 -0
  48. package/dist/ide-handlers/index.d.ts.map +1 -0
  49. package/dist/ide-handlers/index.js +49 -0
  50. package/dist/ide-handlers/index.js.map +1 -0
  51. package/dist/ide-handlers/manual.d.ts +16 -0
  52. package/dist/ide-handlers/manual.d.ts.map +1 -0
  53. package/dist/ide-handlers/manual.js +34 -0
  54. package/dist/ide-handlers/manual.js.map +1 -0
  55. package/dist/ide-handlers/opencode.d.ts +15 -0
  56. package/dist/ide-handlers/opencode.d.ts.map +1 -0
  57. package/dist/ide-handlers/opencode.js +57 -0
  58. package/dist/ide-handlers/opencode.js.map +1 -0
  59. package/dist/ide-handlers/vscode.d.ts +16 -0
  60. package/dist/ide-handlers/vscode.d.ts.map +1 -0
  61. package/dist/ide-handlers/vscode.js +62 -0
  62. package/dist/ide-handlers/vscode.js.map +1 -0
  63. package/dist/index.d.ts +14 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +501 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/prompts.d.ts +23 -0
  68. package/dist/prompts.d.ts.map +1 -0
  69. package/dist/prompts.js +68 -0
  70. package/dist/prompts.js.map +1 -0
  71. package/dist/repair.d.ts +50 -0
  72. package/dist/repair.d.ts.map +1 -0
  73. package/dist/repair.js +588 -0
  74. package/dist/repair.js.map +1 -0
  75. 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"}
@@ -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"}