@contextium/mcp-server 0.3.1 ā 0.4.1
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/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +109 -211
- package/dist/cli/setup.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAKA,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAiJD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG5E"}
|
package/dist/cli/setup.js
CHANGED
|
@@ -1,36 +1,68 @@
|
|
|
1
|
-
import http from 'http';
|
|
2
1
|
import open from 'open';
|
|
3
2
|
import readline from 'readline';
|
|
4
3
|
import { saveProfile } from './credentials.js';
|
|
5
4
|
import { updateClaudeConfigForContextium, claudeConfigExists } from './config-manager.js';
|
|
6
5
|
const DEFAULT_API_URL = 'https://api.contextium.io/api/v1';
|
|
7
|
-
const AUTH_TIMEOUT_MS =
|
|
8
|
-
const PORT_RANGE_START = 8000;
|
|
9
|
-
const PORT_RANGE_END = 9000;
|
|
6
|
+
const AUTH_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes (matches device code expiry)
|
|
10
7
|
/**
|
|
11
|
-
*
|
|
8
|
+
* Generate device code from API
|
|
12
9
|
*/
|
|
13
|
-
async function
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
async function generateDeviceCode(apiUrl) {
|
|
11
|
+
const response = await fetch(`${apiUrl}/mcp/device`, {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
headers: {
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
const error = await response.text();
|
|
19
|
+
throw new Error(`Failed to generate device code: ${error}`);
|
|
20
|
+
}
|
|
21
|
+
const data = (await response.json());
|
|
22
|
+
return data.data;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Poll for device authorization
|
|
26
|
+
*/
|
|
27
|
+
async function pollForToken(apiUrl, deviceCode, interval) {
|
|
28
|
+
const startTime = Date.now();
|
|
29
|
+
while (Date.now() - startTime < AUTH_TIMEOUT_MS) {
|
|
30
|
+
try {
|
|
31
|
+
const response = await fetch(`${apiUrl}/mcp/device/token`, {
|
|
32
|
+
method: 'POST',
|
|
33
|
+
headers: {
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify({ device_code: deviceCode }),
|
|
37
|
+
});
|
|
38
|
+
if (response.ok) {
|
|
39
|
+
const data = (await response.json());
|
|
40
|
+
return data.data;
|
|
41
|
+
}
|
|
42
|
+
const errorData = (await response.json());
|
|
43
|
+
if (errorData.error === 'authorization_pending') {
|
|
44
|
+
// Still waiting for user authorization, continue polling
|
|
45
|
+
await sleep(interval * 1000);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Other error
|
|
49
|
+
throw new Error(errorData.error_description || errorData.error || 'Authorization failed');
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error instanceof Error && error.message.includes('authorization_pending')) {
|
|
53
|
+
await sleep(interval * 1000);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
17
57
|
}
|
|
18
58
|
}
|
|
19
|
-
throw new Error(
|
|
59
|
+
throw new Error('Authorization timeout - please try again');
|
|
20
60
|
}
|
|
21
61
|
/**
|
|
22
|
-
*
|
|
62
|
+
* Sleep for specified milliseconds
|
|
23
63
|
*/
|
|
24
|
-
function
|
|
25
|
-
return new Promise((resolve) =>
|
|
26
|
-
const server = http.createServer();
|
|
27
|
-
server.once('error', () => resolve(false));
|
|
28
|
-
server.once('listening', () => {
|
|
29
|
-
server.close();
|
|
30
|
-
resolve(true);
|
|
31
|
-
});
|
|
32
|
-
server.listen(port);
|
|
33
|
-
});
|
|
64
|
+
function sleep(ms) {
|
|
65
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
34
66
|
}
|
|
35
67
|
/**
|
|
36
68
|
* Ask user a yes/no question
|
|
@@ -47,6 +79,33 @@ async function askYesNo(question) {
|
|
|
47
79
|
});
|
|
48
80
|
});
|
|
49
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Detect device information
|
|
84
|
+
*/
|
|
85
|
+
function getDeviceInfo() {
|
|
86
|
+
const platform = process.platform;
|
|
87
|
+
const arch = process.arch;
|
|
88
|
+
let osName = 'Unknown';
|
|
89
|
+
let deviceName = 'CLI Device';
|
|
90
|
+
switch (platform) {
|
|
91
|
+
case 'darwin':
|
|
92
|
+
osName = 'macOS';
|
|
93
|
+
deviceName = 'Mac';
|
|
94
|
+
break;
|
|
95
|
+
case 'win32':
|
|
96
|
+
osName = 'Windows';
|
|
97
|
+
deviceName = 'Windows PC';
|
|
98
|
+
break;
|
|
99
|
+
case 'linux':
|
|
100
|
+
osName = 'Linux';
|
|
101
|
+
deviceName = 'Linux Machine';
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
name: deviceName,
|
|
106
|
+
os: `${osName} (${arch})`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
50
109
|
/**
|
|
51
110
|
* Main setup command
|
|
52
111
|
*/
|
|
@@ -56,20 +115,26 @@ export async function setupCommand(options = {}) {
|
|
|
56
115
|
console.log('\nš Contextium MCP Setup\n');
|
|
57
116
|
console.log('This will authorize your MCP server to access Contextium.\n');
|
|
58
117
|
try {
|
|
59
|
-
// Step 1:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
console.log(
|
|
72
|
-
|
|
118
|
+
// Step 1: Generate device code
|
|
119
|
+
console.log('ā³ Generating device code...');
|
|
120
|
+
const deviceCodeResponse = await generateDeviceCode(apiUrl);
|
|
121
|
+
console.log('ā Device code generated\n');
|
|
122
|
+
// Detect device info for URL (optional)
|
|
123
|
+
const detectedDevice = getDeviceInfo();
|
|
124
|
+
const deviceName = detectedDevice.name;
|
|
125
|
+
// Step 2: Display user code
|
|
126
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
127
|
+
console.log('');
|
|
128
|
+
console.log(' š± Your device code:');
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log(` ${deviceCodeResponse.userCode}`);
|
|
131
|
+
console.log('');
|
|
132
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n');
|
|
133
|
+
console.log(`This code will expire in 15 minutes.`);
|
|
134
|
+
console.log(`Code expires at: ${new Date(deviceCodeResponse.expiresAt).toLocaleString()}\n`);
|
|
135
|
+
// Step 3: Open browser to authorization page
|
|
136
|
+
const authUrl = `${deviceCodeResponse.verificationUri}?code=${deviceCodeResponse.userCode}&deviceName=${encodeURIComponent(deviceName)}`;
|
|
137
|
+
console.log('š Opening browser for authorization...\n');
|
|
73
138
|
if (!options.skipBrowser) {
|
|
74
139
|
try {
|
|
75
140
|
await open(authUrl);
|
|
@@ -85,20 +150,21 @@ export async function setupCommand(options = {}) {
|
|
|
85
150
|
console.log('Please open this URL in your browser:');
|
|
86
151
|
console.log(authUrl);
|
|
87
152
|
}
|
|
88
|
-
console.log('\nā³ Waiting for authorization
|
|
89
|
-
|
|
90
|
-
|
|
153
|
+
console.log('\nā³ Waiting for authorization...');
|
|
154
|
+
console.log('(This will continue automatically once you authorize in your browser)\n');
|
|
155
|
+
// Step 4: Poll for authorization
|
|
156
|
+
const result = await pollForToken(apiUrl, deviceCodeResponse.deviceCode, deviceCodeResponse.interval);
|
|
91
157
|
console.log('ā Authorization successful!');
|
|
92
|
-
// Step
|
|
158
|
+
// Step 5: Save credentials
|
|
93
159
|
saveProfile(profileName, {
|
|
94
160
|
apiUrl,
|
|
95
|
-
accessToken: result.
|
|
96
|
-
workspaceId: result.
|
|
161
|
+
accessToken: result.access_token,
|
|
162
|
+
workspaceId: result.workspace_id || null,
|
|
97
163
|
createdAt: new Date().toISOString(),
|
|
98
|
-
expiresAt: result.
|
|
164
|
+
expiresAt: result.expires_at,
|
|
99
165
|
}, true);
|
|
100
166
|
console.log(`ā Credentials saved to profile: ${profileName}`);
|
|
101
|
-
// Step
|
|
167
|
+
// Step 6: Ask about Claude config
|
|
102
168
|
if (claudeConfigExists()) {
|
|
103
169
|
console.log('\nš§ Claude Desktop detected');
|
|
104
170
|
const shouldUpdate = await askYesNo('Would you like to update Claude Desktop config?');
|
|
@@ -128,172 +194,4 @@ export async function setupCommand(options = {}) {
|
|
|
128
194
|
process.exit(1);
|
|
129
195
|
}
|
|
130
196
|
}
|
|
131
|
-
/**
|
|
132
|
-
* Start local HTTP server to receive callback
|
|
133
|
-
*/
|
|
134
|
-
function startCallbackServer(port) {
|
|
135
|
-
return new Promise((resolve, reject) => {
|
|
136
|
-
const timeout = setTimeout(() => {
|
|
137
|
-
server.close();
|
|
138
|
-
reject(new Error('Authorization timeout - please try again'));
|
|
139
|
-
}, AUTH_TIMEOUT_MS);
|
|
140
|
-
const server = http.createServer(async (req, res) => {
|
|
141
|
-
const url = new URL(req.url || '', `http://localhost:${port}`);
|
|
142
|
-
if (url.pathname === '/callback') {
|
|
143
|
-
const token = url.searchParams.get('token');
|
|
144
|
-
const workspaceId = url.searchParams.get('workspaceId');
|
|
145
|
-
const expiresAt = url.searchParams.get('expiresAt');
|
|
146
|
-
const error = url.searchParams.get('error');
|
|
147
|
-
if (error) {
|
|
148
|
-
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
149
|
-
res.end(`
|
|
150
|
-
<html>
|
|
151
|
-
<body style="font-family: sans-serif; padding: 40px; text-align: center;">
|
|
152
|
-
<h1>ā Authorization Failed</h1>
|
|
153
|
-
<p>${error}</p>
|
|
154
|
-
<p>You can close this window and try again.</p>
|
|
155
|
-
</body>
|
|
156
|
-
</html>
|
|
157
|
-
`);
|
|
158
|
-
clearTimeout(timeout);
|
|
159
|
-
server.close();
|
|
160
|
-
reject(new Error(error));
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
if (!token || !expiresAt) {
|
|
164
|
-
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
165
|
-
res.end(`
|
|
166
|
-
<html>
|
|
167
|
-
<body style="font-family: sans-serif; padding: 40px; text-align: center;">
|
|
168
|
-
<h1>ā Missing Data</h1>
|
|
169
|
-
<p>Token or expiry date missing. Please try again.</p>
|
|
170
|
-
</body>
|
|
171
|
-
</html>
|
|
172
|
-
`);
|
|
173
|
-
clearTimeout(timeout);
|
|
174
|
-
server.close();
|
|
175
|
-
reject(new Error('Missing token or expiry data'));
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
// Success!
|
|
179
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
180
|
-
res.end(`
|
|
181
|
-
<!DOCTYPE html>
|
|
182
|
-
<html lang="en">
|
|
183
|
-
<head>
|
|
184
|
-
<meta charset="UTF-8">
|
|
185
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
186
|
-
<title>Contextium - Setup Complete</title>
|
|
187
|
-
<style>
|
|
188
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
189
|
-
body {
|
|
190
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
191
|
-
background: #0a0a0b;
|
|
192
|
-
color: #e5e5e7;
|
|
193
|
-
display: flex;
|
|
194
|
-
align-items: center;
|
|
195
|
-
justify-content: center;
|
|
196
|
-
min-height: 100vh;
|
|
197
|
-
padding: 20px;
|
|
198
|
-
}
|
|
199
|
-
.container {
|
|
200
|
-
text-align: center;
|
|
201
|
-
max-width: 500px;
|
|
202
|
-
}
|
|
203
|
-
.icon {
|
|
204
|
-
width: 80px;
|
|
205
|
-
height: 80px;
|
|
206
|
-
margin: 0 auto 32px;
|
|
207
|
-
background: rgba(34, 197, 94, 0.1);
|
|
208
|
-
border-radius: 50%;
|
|
209
|
-
display: flex;
|
|
210
|
-
align-items: center;
|
|
211
|
-
justify-content: center;
|
|
212
|
-
position: relative;
|
|
213
|
-
}
|
|
214
|
-
.icon::before {
|
|
215
|
-
content: '';
|
|
216
|
-
position: absolute;
|
|
217
|
-
inset: 0;
|
|
218
|
-
background: rgba(34, 197, 94, 0.2);
|
|
219
|
-
border-radius: 50%;
|
|
220
|
-
filter: blur(40px);
|
|
221
|
-
}
|
|
222
|
-
.icon svg {
|
|
223
|
-
width: 40px;
|
|
224
|
-
height: 40px;
|
|
225
|
-
position: relative;
|
|
226
|
-
z-index: 1;
|
|
227
|
-
}
|
|
228
|
-
h1 {
|
|
229
|
-
font-size: 32px;
|
|
230
|
-
font-weight: 700;
|
|
231
|
-
margin-bottom: 16px;
|
|
232
|
-
color: #fff;
|
|
233
|
-
}
|
|
234
|
-
p {
|
|
235
|
-
font-size: 16px;
|
|
236
|
-
color: #a1a1aa;
|
|
237
|
-
line-height: 1.6;
|
|
238
|
-
}
|
|
239
|
-
.badge {
|
|
240
|
-
display: inline-flex;
|
|
241
|
-
align-items: center;
|
|
242
|
-
gap: 8px;
|
|
243
|
-
margin-top: 32px;
|
|
244
|
-
padding: 12px 24px;
|
|
245
|
-
background: rgba(34, 197, 94, 0.1);
|
|
246
|
-
border: 1px solid rgba(34, 197, 94, 0.2);
|
|
247
|
-
border-radius: 12px;
|
|
248
|
-
color: #22c55e;
|
|
249
|
-
font-size: 14px;
|
|
250
|
-
font-weight: 500;
|
|
251
|
-
}
|
|
252
|
-
</style>
|
|
253
|
-
</head>
|
|
254
|
-
<body>
|
|
255
|
-
<div class="container">
|
|
256
|
-
<div class="icon">
|
|
257
|
-
<svg fill="none" stroke="#22c55e" stroke-width="3" viewBox="0 0 24 24">
|
|
258
|
-
<path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7" />
|
|
259
|
-
</svg>
|
|
260
|
-
</div>
|
|
261
|
-
<h1>Setup Complete!</h1>
|
|
262
|
-
<p>Your MCP server is now connected to Contextium.<br>Return to your terminal to continue.</p>
|
|
263
|
-
<div class="badge">
|
|
264
|
-
<svg width="16" height="16" fill="currentColor" viewBox="0 0 24 24">
|
|
265
|
-
<path d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"/>
|
|
266
|
-
</svg>
|
|
267
|
-
Credentials Saved
|
|
268
|
-
</div>
|
|
269
|
-
<p style="margin-top: 24px; padding: 16px; background: rgba(251, 191, 36, 0.1); border: 1px solid rgba(251, 191, 36, 0.2); border-radius: 8px; color: #fbbf24; font-size: 14px; line-height: 1.5;">
|
|
270
|
-
<strong>ā ļø Important:</strong> If Claude Desktop is already open, please quit and restart it for changes to take effect.
|
|
271
|
-
</p>
|
|
272
|
-
</div>
|
|
273
|
-
<script>setTimeout(() => window.close(), 5000);</script>
|
|
274
|
-
</body>
|
|
275
|
-
</html>
|
|
276
|
-
`);
|
|
277
|
-
clearTimeout(timeout);
|
|
278
|
-
server.close();
|
|
279
|
-
resolve({
|
|
280
|
-
token,
|
|
281
|
-
workspaceId: workspaceId || null,
|
|
282
|
-
expiresAt,
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
res.writeHead(404);
|
|
287
|
-
res.end('Not Found');
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
server.on('error', (err) => {
|
|
291
|
-
clearTimeout(timeout);
|
|
292
|
-
reject(err);
|
|
293
|
-
});
|
|
294
|
-
server.listen(port, '127.0.0.1', () => {
|
|
295
|
-
console.log(`ā Callback server listening on http://localhost:${port}`);
|
|
296
|
-
});
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
197
|
//# sourceMappingURL=setup.js.map
|
package/dist/cli/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED