@contextium/mcp-server 0.3.1 → 0.4.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/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +126 -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;AAmKD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2G5E"}
|
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,49 @@ async function askYesNo(question) {
|
|
|
47
79
|
});
|
|
48
80
|
});
|
|
49
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Ask user a question and get text input
|
|
84
|
+
*/
|
|
85
|
+
async function askQuestion(question, defaultValue) {
|
|
86
|
+
const rl = readline.createInterface({
|
|
87
|
+
input: process.stdin,
|
|
88
|
+
output: process.stdout,
|
|
89
|
+
});
|
|
90
|
+
return new Promise((resolve) => {
|
|
91
|
+
const prompt = defaultValue ? `${question} (default: ${defaultValue}): ` : `${question}: `;
|
|
92
|
+
rl.question(prompt, (answer) => {
|
|
93
|
+
rl.close();
|
|
94
|
+
resolve(answer.trim() || defaultValue || '');
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Detect device information
|
|
100
|
+
*/
|
|
101
|
+
function getDeviceInfo() {
|
|
102
|
+
const platform = process.platform;
|
|
103
|
+
const arch = process.arch;
|
|
104
|
+
let osName = 'Unknown';
|
|
105
|
+
let deviceName = 'CLI Device';
|
|
106
|
+
switch (platform) {
|
|
107
|
+
case 'darwin':
|
|
108
|
+
osName = 'macOS';
|
|
109
|
+
deviceName = 'Mac';
|
|
110
|
+
break;
|
|
111
|
+
case 'win32':
|
|
112
|
+
osName = 'Windows';
|
|
113
|
+
deviceName = 'Windows PC';
|
|
114
|
+
break;
|
|
115
|
+
case 'linux':
|
|
116
|
+
osName = 'Linux';
|
|
117
|
+
deviceName = 'Linux Machine';
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
name: deviceName,
|
|
122
|
+
os: `${osName} (${arch})`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
50
125
|
/**
|
|
51
126
|
* Main setup command
|
|
52
127
|
*/
|
|
@@ -56,20 +131,27 @@ export async function setupCommand(options = {}) {
|
|
|
56
131
|
console.log('\n🚀 Contextium MCP Setup\n');
|
|
57
132
|
console.log('This will authorize your MCP server to access Contextium.\n');
|
|
58
133
|
try {
|
|
59
|
-
// Step 1:
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
// Step 2:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
console.log(
|
|
72
|
-
|
|
134
|
+
// Step 1: Get device info
|
|
135
|
+
const detectedDevice = getDeviceInfo();
|
|
136
|
+
const deviceName = await askQuestion('What is this device?', detectedDevice.name);
|
|
137
|
+
// Step 2: Generate device code
|
|
138
|
+
console.log('\n⏳ Generating device code...');
|
|
139
|
+
const deviceCodeResponse = await generateDeviceCode(apiUrl);
|
|
140
|
+
console.log('✓ Device code generated\n');
|
|
141
|
+
// Step 3: Display user code
|
|
142
|
+
console.log('═══════════════════════════════════════════════');
|
|
143
|
+
console.log('');
|
|
144
|
+
console.log(' 📱 Your device code:');
|
|
145
|
+
console.log('');
|
|
146
|
+
console.log(` ${deviceCodeResponse.userCode}`);
|
|
147
|
+
console.log('');
|
|
148
|
+
console.log('═══════════════════════════════════════════════\n');
|
|
149
|
+
console.log(`Device: ${deviceName}`);
|
|
150
|
+
console.log(`This code will expire in 15 minutes.`);
|
|
151
|
+
console.log(`Code expires at: ${new Date(deviceCodeResponse.expiresAt).toLocaleString()}\n`);
|
|
152
|
+
// Step 4: Open browser to authorization page
|
|
153
|
+
const authUrl = `${deviceCodeResponse.verificationUri}?code=${deviceCodeResponse.userCode}&deviceName=${encodeURIComponent(deviceName)}`;
|
|
154
|
+
console.log('📝 Opening browser for authorization...\n');
|
|
73
155
|
if (!options.skipBrowser) {
|
|
74
156
|
try {
|
|
75
157
|
await open(authUrl);
|
|
@@ -85,20 +167,21 @@ export async function setupCommand(options = {}) {
|
|
|
85
167
|
console.log('Please open this URL in your browser:');
|
|
86
168
|
console.log(authUrl);
|
|
87
169
|
}
|
|
88
|
-
console.log('\n⏳ Waiting for authorization
|
|
89
|
-
|
|
90
|
-
|
|
170
|
+
console.log('\n⏳ Waiting for authorization...');
|
|
171
|
+
console.log('(This will continue automatically once you authorize in your browser)\n');
|
|
172
|
+
// Step 5: Poll for authorization
|
|
173
|
+
const result = await pollForToken(apiUrl, deviceCodeResponse.deviceCode, deviceCodeResponse.interval);
|
|
91
174
|
console.log('✓ Authorization successful!');
|
|
92
|
-
// Step
|
|
175
|
+
// Step 6: Save credentials
|
|
93
176
|
saveProfile(profileName, {
|
|
94
177
|
apiUrl,
|
|
95
|
-
accessToken: result.
|
|
96
|
-
workspaceId: result.
|
|
178
|
+
accessToken: result.access_token,
|
|
179
|
+
workspaceId: result.workspace_id || null,
|
|
97
180
|
createdAt: new Date().toISOString(),
|
|
98
|
-
expiresAt: result.
|
|
181
|
+
expiresAt: result.expires_at,
|
|
99
182
|
}, true);
|
|
100
183
|
console.log(`✓ Credentials saved to profile: ${profileName}`);
|
|
101
|
-
// Step
|
|
184
|
+
// Step 7: Ask about Claude config
|
|
102
185
|
if (claudeConfigExists()) {
|
|
103
186
|
console.log('\n🔧 Claude Desktop detected');
|
|
104
187
|
const shouldUpdate = await askYesNo('Would you like to update Claude Desktop config?');
|
|
@@ -128,172 +211,4 @@ export async function setupCommand(options = {}) {
|
|
|
128
211
|
process.exit(1);
|
|
129
212
|
}
|
|
130
213
|
}
|
|
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
214
|
//# 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