@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
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Claude Code Configuration Manager
3
+ *
4
+ * Handles reading/writing Claude Code's MCP server configuration.
5
+ */
6
+ export interface ClaudeConfig {
7
+ mcpServers?: Record<string, McpServerConfig>;
8
+ [key: string]: unknown;
9
+ }
10
+ export interface McpServerConfig {
11
+ type?: 'sse' | 'stdio';
12
+ url?: string;
13
+ headers?: Record<string, string>;
14
+ command?: string;
15
+ args?: string[];
16
+ env?: Record<string, string>;
17
+ }
18
+ /**
19
+ * Get the path to Claude Code's config file based on OS
20
+ */
21
+ export declare function getClaudeConfigPath(): string;
22
+ /**
23
+ * Check if Claude Code is installed (config directory exists)
24
+ */
25
+ export declare function isClaudeInstalled(): boolean;
26
+ /**
27
+ * Read Claude Code's current config
28
+ */
29
+ export declare function readClaudeConfig(): ClaudeConfig;
30
+ /**
31
+ * Write Claude Code's config
32
+ */
33
+ export declare function writeClaudeConfig(config: ClaudeConfig): void;
34
+ /**
35
+ * Add Catalyst MCP server to Claude config
36
+ * Uses SSE transport - MCP server runs on port 3701
37
+ */
38
+ export declare function addTostudyMcpServer(apiKey: string, platformUrl: string): void;
39
+ /**
40
+ * Remove Catalyst MCP server from Claude config
41
+ */
42
+ export declare function removeTostudyMcpServer(): void;
43
+ /**
44
+ * Check if Catalyst MCP server is already configured
45
+ */
46
+ export declare function isTostudyMcpConfigured(): boolean;
47
+ /**
48
+ * Get the current Catalyst config if exists
49
+ */
50
+ export declare function getTostudyMcpConfig(): McpServerConfig | null;
51
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAE9B,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAc5C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAc/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAiB5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAuB7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAO7C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,GAAG,IAAI,CAG5D"}
package/dist/config.js ADDED
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Claude Code Configuration Manager
3
+ *
4
+ * Handles reading/writing Claude Code's MCP server configuration.
5
+ */
6
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync } from 'node:fs';
7
+ import { dirname, join } from 'node:path';
8
+ import { homedir, platform } from 'node:os';
9
+ /**
10
+ * Get the path to Claude Code's config file based on OS
11
+ */
12
+ export function getClaudeConfigPath() {
13
+ const home = homedir();
14
+ const os = platform();
15
+ switch (os) {
16
+ case 'darwin':
17
+ return join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
18
+ case 'win32':
19
+ return join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json');
20
+ case 'linux':
21
+ return join(home, '.config', 'Claude', 'claude_desktop_config.json');
22
+ default:
23
+ throw new Error(`Unsupported operating system: ${os}`);
24
+ }
25
+ }
26
+ /**
27
+ * Check if Claude Code is installed (config directory exists)
28
+ */
29
+ export function isClaudeInstalled() {
30
+ const configPath = getClaudeConfigPath();
31
+ const configDir = dirname(configPath);
32
+ return existsSync(configDir);
33
+ }
34
+ /**
35
+ * Read Claude Code's current config
36
+ */
37
+ export function readClaudeConfig() {
38
+ const configPath = getClaudeConfigPath();
39
+ if (!existsSync(configPath)) {
40
+ return { mcpServers: {} };
41
+ }
42
+ try {
43
+ const content = readFileSync(configPath, 'utf-8');
44
+ return JSON.parse(content);
45
+ }
46
+ catch {
47
+ // If config is corrupted, start fresh
48
+ return { mcpServers: {} };
49
+ }
50
+ }
51
+ /**
52
+ * Write Claude Code's config
53
+ */
54
+ export function writeClaudeConfig(config) {
55
+ const configPath = getClaudeConfigPath();
56
+ const configDir = dirname(configPath);
57
+ // Ensure directory exists
58
+ if (!existsSync(configDir)) {
59
+ mkdirSync(configDir, { recursive: true });
60
+ }
61
+ // Backup existing config
62
+ if (existsSync(configPath)) {
63
+ const backupPath = `${configPath}.backup`;
64
+ copyFileSync(configPath, backupPath);
65
+ }
66
+ // Write new config with pretty formatting
67
+ writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
68
+ }
69
+ /**
70
+ * Add Catalyst MCP server to Claude config
71
+ * Uses SSE transport - MCP server runs on port 3701
72
+ */
73
+ export function addTostudyMcpServer(apiKey, platformUrl) {
74
+ const config = readClaudeConfig();
75
+ // Initialize mcpServers if not exists
76
+ if (!config.mcpServers) {
77
+ config.mcpServers = {};
78
+ }
79
+ // MCP server URL (port 3701 for SSE endpoint)
80
+ const mcpServerUrl = platformUrl.replace(':3700', ':3701');
81
+ // Add Catalyst server using SSE transport
82
+ // SECURITY: Use Authorization header instead of URL query parameters
83
+ // API keys in URLs can be leaked via server logs, proxy logs, browser history, and HTTP Referer headers
84
+ config.mcpServers['tostudy'] = {
85
+ type: 'sse',
86
+ url: `${mcpServerUrl}/mcp/sse`,
87
+ headers: {
88
+ 'Authorization': `Bearer ${apiKey}`,
89
+ },
90
+ };
91
+ writeClaudeConfig(config);
92
+ }
93
+ /**
94
+ * Remove Catalyst MCP server from Claude config
95
+ */
96
+ export function removeTostudyMcpServer() {
97
+ const config = readClaudeConfig();
98
+ if (config.mcpServers && config.mcpServers['tostudy']) {
99
+ delete config.mcpServers['tostudy'];
100
+ writeClaudeConfig(config);
101
+ }
102
+ }
103
+ /**
104
+ * Check if Catalyst MCP server is already configured
105
+ */
106
+ export function isTostudyMcpConfigured() {
107
+ const config = readClaudeConfig();
108
+ return !!(config.mcpServers && config.mcpServers['tostudy']);
109
+ }
110
+ /**
111
+ * Get the current Catalyst config if exists
112
+ */
113
+ export function getTostudyMcpConfig() {
114
+ const config = readClaudeConfig();
115
+ return config.mcpServers?.['tostudy'] || null;
116
+ }
117
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * IDE Detection Module
3
+ *
4
+ * Detects installed IDEs (VS Code, JetBrains) for MCP configuration.
5
+ */
6
+ export type IDEType = 'vscode' | 'vscode-insiders' | 'cursor' | 'jetbrains';
7
+ export interface DetectedIDE {
8
+ type: IDEType;
9
+ name: string;
10
+ version?: string;
11
+ configPath: string;
12
+ installed: boolean;
13
+ }
14
+ /**
15
+ * Detect VS Code installation
16
+ */
17
+ export declare function detectVSCode(): DetectedIDE;
18
+ /**
19
+ * Detect VS Code Insiders installation
20
+ */
21
+ export declare function detectVSCodeInsiders(): DetectedIDE;
22
+ /**
23
+ * Detect Cursor IDE installation
24
+ */
25
+ export declare function detectCursor(): DetectedIDE;
26
+ /**
27
+ * Detect JetBrains IDE installation
28
+ */
29
+ export declare function detectJetBrains(): DetectedIDE;
30
+ /**
31
+ * Detect all supported IDEs
32
+ */
33
+ export declare function detectAllIDEs(): DetectedIDE[];
34
+ /**
35
+ * Get only installed IDEs
36
+ */
37
+ export declare function getInstalledIDEs(): DetectedIDE[];
38
+ /**
39
+ * Check if any supported IDE is installed
40
+ */
41
+ export declare function hasAnyIDE(): boolean;
42
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAgLD;;GAEG;AACH,wBAAgB,YAAY,IAAI,WAAW,CAQ1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,WAAW,CAQlD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,WAAW,CAQ1C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAmC7C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,WAAW,EAAE,CAO7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
package/dist/detect.js ADDED
@@ -0,0 +1,277 @@
1
+ /**
2
+ * IDE Detection Module
3
+ *
4
+ * Detects installed IDEs (VS Code, JetBrains) for MCP configuration.
5
+ */
6
+ import { existsSync, readdirSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { homedir, platform } from 'node:os';
9
+ /**
10
+ * Get VS Code config directory based on OS
11
+ */
12
+ function getVSCodeConfigDir(variant) {
13
+ const home = homedir();
14
+ const os = platform();
15
+ const folderNames = {
16
+ stable: 'Code',
17
+ insiders: 'Code - Insiders',
18
+ cursor: 'Cursor',
19
+ };
20
+ const folder = folderNames[variant];
21
+ switch (os) {
22
+ case 'darwin':
23
+ return join(home, 'Library', 'Application Support', folder, 'User');
24
+ case 'win32':
25
+ return join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), folder, 'User');
26
+ case 'linux':
27
+ return join(home, '.config', folder, 'User');
28
+ default:
29
+ return '';
30
+ }
31
+ }
32
+ /**
33
+ * Get VS Code MCP settings file path
34
+ */
35
+ function getVSCodeMcpConfigPath(variant) {
36
+ const configDir = getVSCodeConfigDir(variant);
37
+ if (!configDir)
38
+ return '';
39
+ return join(configDir, 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
40
+ }
41
+ /**
42
+ * Check if VS Code variant is installed
43
+ */
44
+ function isVSCodeInstalled(variant) {
45
+ const os = platform();
46
+ const home = homedir();
47
+ const appNames = {
48
+ stable: ['Visual Studio Code.app', 'code'],
49
+ insiders: ['Visual Studio Code - Insiders.app', 'code-insiders'],
50
+ cursor: ['Cursor.app', 'cursor'],
51
+ };
52
+ const [macApp, linuxCmd] = appNames[variant];
53
+ switch (os) {
54
+ case 'darwin':
55
+ // Check /Applications folder
56
+ return existsSync(join('/Applications', macApp)) ||
57
+ existsSync(join(home, 'Applications', macApp));
58
+ case 'win32': {
59
+ // Check common Windows install locations
60
+ const programFiles = process.env.ProgramFiles || 'C:\\Program Files';
61
+ const programFilesX86 = process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)';
62
+ const localAppData = process.env.LOCALAPPDATA || join(home, 'AppData', 'Local');
63
+ const winPaths = variant === 'cursor'
64
+ ? [join(localAppData, 'Programs', 'cursor', 'Cursor.exe')]
65
+ : [
66
+ join(programFiles, 'Microsoft VS Code', 'Code.exe'),
67
+ join(programFilesX86, 'Microsoft VS Code', 'Code.exe'),
68
+ join(localAppData, 'Programs', 'Microsoft VS Code', 'Code.exe'),
69
+ ];
70
+ if (variant === 'insiders') {
71
+ winPaths.push(join(programFiles, 'Microsoft VS Code Insiders', 'Code - Insiders.exe'), join(localAppData, 'Programs', 'Microsoft VS Code Insiders', 'Code - Insiders.exe'));
72
+ }
73
+ return winPaths.some((p) => existsSync(p));
74
+ }
75
+ case 'linux':
76
+ // Check if config directory exists (indicates installation)
77
+ return existsSync(getVSCodeConfigDir(variant)) ||
78
+ existsSync(join('/usr/bin', linuxCmd)) ||
79
+ existsSync(join('/usr/local/bin', linuxCmd)) ||
80
+ existsSync(join(home, '.local', 'bin', linuxCmd));
81
+ default:
82
+ return false;
83
+ }
84
+ }
85
+ /**
86
+ * Get JetBrains config directory based on OS
87
+ */
88
+ function getJetBrainsConfigDir() {
89
+ const home = homedir();
90
+ const os = platform();
91
+ switch (os) {
92
+ case 'darwin':
93
+ return join(home, 'Library', 'Application Support', 'JetBrains');
94
+ case 'win32':
95
+ return join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), 'JetBrains');
96
+ case 'linux':
97
+ return join(home, '.config', 'JetBrains');
98
+ default:
99
+ return '';
100
+ }
101
+ }
102
+ /**
103
+ * List installed JetBrains IDEs by scanning config directory
104
+ */
105
+ function getInstalledJetBrainsIDEs() {
106
+ const configDir = getJetBrainsConfigDir();
107
+ if (!configDir || !existsSync(configDir)) {
108
+ return [];
109
+ }
110
+ try {
111
+ const entries = readdirSync(configDir, { withFileTypes: true });
112
+ return entries
113
+ .filter((entry) => entry.isDirectory())
114
+ .map((entry) => entry.name)
115
+ .filter((name) => {
116
+ // Filter for actual IDE directories (e.g., IntelliJIdea2024.1, WebStorm2023.3)
117
+ return /^(IntelliJIdea|WebStorm|PyCharm|PhpStorm|GoLand|Rider|CLion|RubyMine|DataGrip|Fleet)\d{4}\.\d/i.test(name);
118
+ });
119
+ }
120
+ catch {
121
+ return [];
122
+ }
123
+ }
124
+ /**
125
+ * Check if any JetBrains IDE is installed
126
+ */
127
+ function isJetBrainsInstalled() {
128
+ const installedIDEs = getInstalledJetBrainsIDEs();
129
+ return installedIDEs.length > 0;
130
+ }
131
+ /**
132
+ * Get the primary JetBrains IDE name (most recently versioned)
133
+ */
134
+ function getPrimaryJetBrainsIDE() {
135
+ const installedIDEs = getInstalledJetBrainsIDEs();
136
+ if (installedIDEs.length === 0)
137
+ return null;
138
+ // Sort by version (descending) to get most recent
139
+ const sorted = installedIDEs.sort((a, b) => {
140
+ const versionA = a.match(/\d{4}\.\d/)?.[0] || '0';
141
+ const versionB = b.match(/\d{4}\.\d/)?.[0] || '0';
142
+ return versionB.localeCompare(versionA);
143
+ });
144
+ return sorted[0];
145
+ }
146
+ /**
147
+ * Get JetBrains MCP config path for a specific IDE version directory
148
+ */
149
+ function getJetBrainsMcpConfigPath(ideDir) {
150
+ const configDir = getJetBrainsConfigDir();
151
+ if (!configDir)
152
+ return '';
153
+ const targetDir = ideDir || getPrimaryJetBrainsIDE();
154
+ if (!targetDir)
155
+ return '';
156
+ // MCP Claude plugin stores config in options directory
157
+ return join(configDir, targetDir, 'options', 'mcp-servers.json');
158
+ }
159
+ /**
160
+ * Detect VS Code installation
161
+ */
162
+ export function detectVSCode() {
163
+ const installed = isVSCodeInstalled('stable');
164
+ return {
165
+ type: 'vscode',
166
+ name: 'Visual Studio Code',
167
+ configPath: getVSCodeMcpConfigPath('stable'),
168
+ installed,
169
+ };
170
+ }
171
+ /**
172
+ * Detect VS Code Insiders installation
173
+ */
174
+ export function detectVSCodeInsiders() {
175
+ const installed = isVSCodeInstalled('insiders');
176
+ return {
177
+ type: 'vscode-insiders',
178
+ name: 'Visual Studio Code - Insiders',
179
+ configPath: getVSCodeMcpConfigPath('insiders'),
180
+ installed,
181
+ };
182
+ }
183
+ /**
184
+ * Detect Cursor IDE installation
185
+ */
186
+ export function detectCursor() {
187
+ const installed = isVSCodeInstalled('cursor');
188
+ return {
189
+ type: 'cursor',
190
+ name: 'Cursor',
191
+ configPath: getVSCodeMcpConfigPath('cursor'),
192
+ installed,
193
+ };
194
+ }
195
+ /**
196
+ * Detect JetBrains IDE installation
197
+ */
198
+ export function detectJetBrains() {
199
+ const installed = isJetBrainsInstalled();
200
+ const primaryIDE = getPrimaryJetBrainsIDE();
201
+ // Extract IDE name and version from directory name
202
+ let name = 'JetBrains IDE';
203
+ let version;
204
+ if (primaryIDE) {
205
+ const match = primaryIDE.match(/^(\w+?)(\d{4}\.\d)/);
206
+ if (match) {
207
+ const ideNames = {
208
+ 'IntelliJIdea': 'IntelliJ IDEA',
209
+ 'WebStorm': 'WebStorm',
210
+ 'PyCharm': 'PyCharm',
211
+ 'PhpStorm': 'PhpStorm',
212
+ 'GoLand': 'GoLand',
213
+ 'Rider': 'Rider',
214
+ 'CLion': 'CLion',
215
+ 'RubyMine': 'RubyMine',
216
+ 'DataGrip': 'DataGrip',
217
+ 'Fleet': 'Fleet',
218
+ };
219
+ name = ideNames[match[1]] || match[1];
220
+ version = match[2];
221
+ }
222
+ }
223
+ return {
224
+ type: 'jetbrains',
225
+ name,
226
+ version,
227
+ configPath: getJetBrainsMcpConfigPath(),
228
+ installed,
229
+ };
230
+ }
231
+ /**
232
+ * Detect all supported IDEs
233
+ */
234
+ export function detectAllIDEs() {
235
+ return [
236
+ detectVSCode(),
237
+ detectVSCodeInsiders(),
238
+ detectCursor(),
239
+ detectJetBrains(),
240
+ ];
241
+ }
242
+ /**
243
+ * Get only installed IDEs
244
+ */
245
+ export function getInstalledIDEs() {
246
+ return detectAllIDEs().filter((ide) => ide.installed);
247
+ }
248
+ /**
249
+ * Check if any supported IDE is installed
250
+ */
251
+ export function hasAnyIDE() {
252
+ return detectAllIDEs().some((ide) => ide.installed);
253
+ }
254
+ // CLI entry point for testing
255
+ if (process.argv[1]?.endsWith('detect.js')) {
256
+ const installedIDEs = getInstalledIDEs();
257
+ if (installedIDEs.length === 0) {
258
+ process.stdout.write('No supported IDEs detected.\n');
259
+ process.stdout.write('\nSupported IDEs:\n');
260
+ process.stdout.write(' - Visual Studio Code\n');
261
+ process.stdout.write(' - Visual Studio Code - Insiders\n');
262
+ process.stdout.write(' - Cursor\n');
263
+ process.stdout.write(' - JetBrains IDEs (IntelliJ, WebStorm, PyCharm, etc.)\n');
264
+ }
265
+ else {
266
+ process.stdout.write('Detected IDEs:\n');
267
+ for (const ide of installedIDEs) {
268
+ const versionStr = ide.version ? ` (${ide.version})` : '';
269
+ process.stdout.write(` ✓ ${ide.name}${versionStr}\n`);
270
+ process.stdout.write(` Config: ${ide.configPath || 'N/A'}\n`);
271
+ }
272
+ }
273
+ // Output as JSON for programmatic use
274
+ process.stdout.write('\n--- JSON Output ---\n');
275
+ process.stdout.write(JSON.stringify(installedIDEs, null, 2) + '\n');
276
+ }
277
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Diagnostic Module
4
+ *
5
+ * Performs diagnostic checks for common MCP configuration issues.
6
+ * Detects port conflicts, missing config, auth errors, and connectivity problems.
7
+ */
8
+ export type IssueSeverity = 'critical' | 'warning' | 'info';
9
+ export interface DiagnosticIssue {
10
+ id: string;
11
+ severity: IssueSeverity;
12
+ title: string;
13
+ description: string;
14
+ suggestion: string;
15
+ autoFixable: boolean;
16
+ }
17
+ export interface DiagnosticReport {
18
+ timestamp: string;
19
+ claudeInstalled: boolean;
20
+ mcpConfigured: boolean;
21
+ issues: DiagnosticIssue[];
22
+ passed: boolean;
23
+ }
24
+ /**
25
+ * Run all diagnostic checks
26
+ */
27
+ export declare function runDiagnostics(): Promise<DiagnosticReport>;
28
+ /**
29
+ * Print diagnostic report to console
30
+ */
31
+ export declare function printDiagnosticReport(report: DiagnosticReport): void;
32
+ /**
33
+ * Export diagnostic report as JSON
34
+ */
35
+ export declare function exportDiagnosticReportJson(report: DiagnosticReport): string;
36
+ //# sourceMappingURL=diagnose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../src/diagnose.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAcH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AA2YD;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAyDhE;AA8BD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAkDpE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE3E"}