@tostudy-ai/mcp-setup 1.0.2 → 1.1.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 +1 -1
- package/dist/__tests__/e2e-wizard-flow.test.d.ts.map +1 -1
- package/dist/__tests__/e2e-wizard-flow.test.js +128 -117
- package/dist/__tests__/e2e-wizard-flow.test.js.map +1 -1
- package/dist/__tests__/ide-handlers.test.js +15 -11
- package/dist/__tests__/ide-handlers.test.js.map +1 -1
- package/dist/__tests__/install-command.test.js +106 -95
- package/dist/__tests__/install-command.test.js.map +1 -1
- package/dist/config.d.ts +15 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +79 -29
- package/dist/config.js.map +1 -1
- package/dist/diagnose.d.ts +1 -1
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +154 -164
- package/dist/diagnose.js.map +1 -1
- package/dist/ide-handlers/antigravity.js +1 -1
- package/dist/ide-handlers/antigravity.js.map +1 -1
- package/dist/ide-handlers/base.d.ts +8 -8
- package/dist/ide-handlers/base.d.ts.map +1 -1
- package/dist/ide-handlers/base.js +29 -4
- package/dist/ide-handlers/base.js.map +1 -1
- package/dist/ide-handlers/claude-code.js +1 -1
- package/dist/ide-handlers/claude-code.js.map +1 -1
- package/dist/ide-handlers/codex.js +1 -1
- package/dist/ide-handlers/codex.js.map +1 -1
- package/dist/ide-handlers/cursor.js +1 -1
- package/dist/ide-handlers/cursor.js.map +1 -1
- package/dist/ide-handlers/desktop.d.ts +3 -3
- package/dist/ide-handlers/desktop.d.ts.map +1 -1
- package/dist/ide-handlers/desktop.js +32 -8
- package/dist/ide-handlers/desktop.js.map +1 -1
- package/dist/ide-handlers/manual.js +1 -1
- package/dist/ide-handlers/manual.js.map +1 -1
- package/dist/ide-handlers/opencode.js +1 -1
- package/dist/ide-handlers/opencode.js.map +1 -1
- package/dist/ide-handlers/vscode.js +1 -1
- package/dist/ide-handlers/vscode.js.map +1 -1
- package/dist/ide-handlers/windsurf.js +1 -1
- package/dist/ide-handlers/windsurf.js.map +1 -1
- package/dist/index.js +198 -156
- package/dist/index.js.map +1 -1
- package/dist/repair.d.ts +1 -1
- package/dist/repair.d.ts.map +1 -1
- package/dist/repair.js +213 -168
- package/dist/repair.js.map +1 -1
- package/package.json +5 -5
package/dist/config.js
CHANGED
|
@@ -3,9 +3,53 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles reading/writing Claude Code's MCP server configuration.
|
|
5
5
|
*/
|
|
6
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync } from
|
|
7
|
-
import { dirname, join } from
|
|
8
|
-
import { homedir, platform } from
|
|
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
|
+
* Extract the API key from either SSE (headers) or stdio (args) config format.
|
|
11
|
+
*/
|
|
12
|
+
export function extractApiKey(config) {
|
|
13
|
+
// SSE format: headers.Authorization = "Bearer <key>"
|
|
14
|
+
const authHeader = config.headers?.["Authorization"];
|
|
15
|
+
if (authHeader?.startsWith("Bearer ")) {
|
|
16
|
+
return authHeader.replace("Bearer ", "");
|
|
17
|
+
}
|
|
18
|
+
// Stdio format: args contains "--header", "Authorization:Bearer <key>"
|
|
19
|
+
if (config.args) {
|
|
20
|
+
for (let i = 0; i < config.args.length; i++) {
|
|
21
|
+
if (config.args[i] === "--header" &&
|
|
22
|
+
config.args[i + 1]?.startsWith("Authorization:Bearer ")) {
|
|
23
|
+
return config.args[i + 1].replace("Authorization:Bearer ", "");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extract the MCP server URL from either SSE (url) or stdio (args) config format.
|
|
31
|
+
*/
|
|
32
|
+
export function extractMcpUrl(config) {
|
|
33
|
+
// SSE format: url = "https://mcp.tostudy.ai/mcp/sse"
|
|
34
|
+
if (config.url) {
|
|
35
|
+
return config.url;
|
|
36
|
+
}
|
|
37
|
+
// Stdio format: args[2] is the URL (after "-y" "mcp-remote")
|
|
38
|
+
if (config.args && config.args[0] === "-y" && config.args[1] === "mcp-remote" && config.args[2]) {
|
|
39
|
+
return config.args[2];
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
function getClientOsHeaderValue() {
|
|
44
|
+
switch (platform()) {
|
|
45
|
+
case "darwin":
|
|
46
|
+
return "macos";
|
|
47
|
+
case "win32":
|
|
48
|
+
return "windows";
|
|
49
|
+
default:
|
|
50
|
+
return "linux";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
9
53
|
/**
|
|
10
54
|
* Get the path to Claude Code's config file based on OS
|
|
11
55
|
*/
|
|
@@ -13,12 +57,12 @@ export function getClaudeConfigPath() {
|
|
|
13
57
|
const home = homedir();
|
|
14
58
|
const os = platform();
|
|
15
59
|
switch (os) {
|
|
16
|
-
case
|
|
17
|
-
return join(home,
|
|
18
|
-
case
|
|
19
|
-
return join(process.env.APPDATA || join(home,
|
|
20
|
-
case
|
|
21
|
-
return join(home,
|
|
60
|
+
case "darwin":
|
|
61
|
+
return join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json");
|
|
62
|
+
case "win32":
|
|
63
|
+
return join(process.env.APPDATA || join(home, "AppData", "Roaming"), "Claude", "claude_desktop_config.json");
|
|
64
|
+
case "linux":
|
|
65
|
+
return join(home, ".config", "Claude", "claude_desktop_config.json");
|
|
22
66
|
default:
|
|
23
67
|
throw new Error(`Unsupported operating system: ${os}`);
|
|
24
68
|
}
|
|
@@ -40,7 +84,7 @@ export function readClaudeConfig() {
|
|
|
40
84
|
return { mcpServers: {} };
|
|
41
85
|
}
|
|
42
86
|
try {
|
|
43
|
-
const content = readFileSync(configPath,
|
|
87
|
+
const content = readFileSync(configPath, "utf-8");
|
|
44
88
|
return JSON.parse(content);
|
|
45
89
|
}
|
|
46
90
|
catch {
|
|
@@ -64,29 +108,35 @@ export function writeClaudeConfig(config) {
|
|
|
64
108
|
copyFileSync(configPath, backupPath);
|
|
65
109
|
}
|
|
66
110
|
// Write new config with pretty formatting
|
|
67
|
-
writeFileSync(configPath, JSON.stringify(config, null, 2),
|
|
111
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
68
112
|
}
|
|
69
113
|
/**
|
|
70
|
-
* Add Catalyst MCP server to Claude config
|
|
71
|
-
* Uses
|
|
114
|
+
* Add Catalyst MCP server to Claude Desktop config
|
|
115
|
+
* Uses stdio transport via mcp-remote (Claude Desktop requires command + args)
|
|
72
116
|
*/
|
|
73
|
-
export function addTostudyMcpServer(apiKey, platformUrl) {
|
|
117
|
+
export function addTostudyMcpServer(apiKey, platformUrl, clientInfo = {}) {
|
|
74
118
|
const config = readClaudeConfig();
|
|
75
119
|
// Initialize mcpServers if not exists
|
|
76
120
|
if (!config.mcpServers) {
|
|
77
121
|
config.mcpServers = {};
|
|
78
122
|
}
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
123
|
+
const ide = clientInfo.ide || "desktop";
|
|
124
|
+
const os = clientInfo.os || getClientOsHeaderValue();
|
|
125
|
+
// Use stdio transport with mcp-remote as bridge to the SSE endpoint
|
|
126
|
+
// Claude Desktop requires command + args format
|
|
127
|
+
config.mcpServers["tostudy"] = {
|
|
128
|
+
command: "npx",
|
|
129
|
+
args: [
|
|
130
|
+
"-y",
|
|
131
|
+
"mcp-remote",
|
|
132
|
+
`${platformUrl}/mcp`,
|
|
133
|
+
"--header",
|
|
134
|
+
`Authorization:Bearer ${apiKey}`,
|
|
135
|
+
"--header",
|
|
136
|
+
`X-Tostudy-Client-IDE:${ide}`,
|
|
137
|
+
"--header",
|
|
138
|
+
`X-Tostudy-Client-OS:${os}`,
|
|
139
|
+
],
|
|
90
140
|
};
|
|
91
141
|
writeClaudeConfig(config);
|
|
92
142
|
}
|
|
@@ -95,8 +145,8 @@ export function addTostudyMcpServer(apiKey, platformUrl) {
|
|
|
95
145
|
*/
|
|
96
146
|
export function removeTostudyMcpServer() {
|
|
97
147
|
const config = readClaudeConfig();
|
|
98
|
-
if (config.mcpServers && config.mcpServers[
|
|
99
|
-
delete config.mcpServers[
|
|
148
|
+
if (config.mcpServers && config.mcpServers["tostudy"]) {
|
|
149
|
+
delete config.mcpServers["tostudy"];
|
|
100
150
|
writeClaudeConfig(config);
|
|
101
151
|
}
|
|
102
152
|
}
|
|
@@ -105,13 +155,13 @@ export function removeTostudyMcpServer() {
|
|
|
105
155
|
*/
|
|
106
156
|
export function isTostudyMcpConfigured() {
|
|
107
157
|
const config = readClaudeConfig();
|
|
108
|
-
return !!(config.mcpServers && config.mcpServers[
|
|
158
|
+
return !!(config.mcpServers && config.mcpServers["tostudy"]);
|
|
109
159
|
}
|
|
110
160
|
/**
|
|
111
161
|
* Get the current Catalyst config if exists
|
|
112
162
|
*/
|
|
113
163
|
export function getTostudyMcpConfig() {
|
|
114
164
|
const config = readClaudeConfig();
|
|
115
|
-
return config.mcpServers?.[
|
|
165
|
+
return config.mcpServers?.["tostudy"] || null;
|
|
116
166
|
}
|
|
117
167
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAmB5C;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;QAC9F,KAAK,OAAO;YACV,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/diagnose.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Performs diagnostic checks for common MCP configuration issues.
|
|
6
6
|
* Detects port conflicts, missing config, auth errors, and connectivity problems.
|
|
7
7
|
*/
|
|
8
|
-
export type IssueSeverity =
|
|
8
|
+
export type IssueSeverity = "critical" | "warning" | "info";
|
|
9
9
|
export interface DiagnosticIssue {
|
|
10
10
|
id: string;
|
|
11
11
|
severity: IssueSeverity;
|
package/dist/diagnose.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../src/diagnose.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"diagnose.d.ts","sourceRoot":"","sources":["../src/diagnose.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAgBH,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;AAwYD;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAsDhE;AA8BD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA0DpE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE3E"}
|