mcp-vibepowerpack 1.2.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/LICENSE +21 -0
- package/README.md +406 -0
- package/dist/frontend/assets/index-0ATVWwez.js +9 -0
- package/dist/frontend/assets/style-DiRG0zBH.css +1 -0
- package/dist/frontend/index.html +14 -0
- package/dist/http/index.d.ts +5 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +5 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/server.d.ts +15 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +379 -0
- package/dist/http/server.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +13 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +214 -0
- package/dist/server/index.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/selectMultiple.d.ts +94 -0
- package/dist/tools/selectMultiple.d.ts.map +1 -0
- package/dist/tools/selectMultiple.js +159 -0
- package/dist/tools/selectMultiple.js.map +1 -0
- package/dist/tools/selectSingle.d.ts +91 -0
- package/dist/tools/selectSingle.d.ts.map +1 -0
- package/dist/tools/selectSingle.js +156 -0
- package/dist/tools/selectSingle.js.map +1 -0
- package/dist/types/index.d.ts +81 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../mcp/http/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ephemeral HTTP server for serving React app and collecting responses
|
|
3
|
+
*/
|
|
4
|
+
import http from 'node:http';
|
|
5
|
+
import type { FormConfig, FormResponse } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Finds an available port and starts an HTTP server
|
|
8
|
+
* Returns a promise that resolves when the user submits or skips
|
|
9
|
+
*/
|
|
10
|
+
export declare function serveFormAndAwaitResponse(config: FormConfig): Promise<FormResponse>;
|
|
11
|
+
/**
|
|
12
|
+
* Gets the URL for the form server (for testing purposes)
|
|
13
|
+
*/
|
|
14
|
+
export declare function getServerUrl(server: http.Server): string;
|
|
15
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../mcp/http/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAsFlE;;;GAGG;AACH,wBAAsB,yBAAyB,CAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAgL1F;AAgLD;;GAEG;AACH,wBAAgB,YAAY,CAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAQzD"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ephemeral HTTP server for serving React app and collecting responses
|
|
3
|
+
*/
|
|
4
|
+
import { exec } from 'node:child_process';
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import http from 'node:http';
|
|
7
|
+
import { platform, tmpdir } from 'node:os';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Type Guards
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Type guard to check if a value is a valid FormResponse
|
|
15
|
+
*/
|
|
16
|
+
function isFormResponse(value) {
|
|
17
|
+
if (typeof value !== 'object' || value === null) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return ('action' in value &&
|
|
21
|
+
typeof value.action === 'string' &&
|
|
22
|
+
['submit', 'skip', 'request_explanation'].includes(value.action) &&
|
|
23
|
+
(!('data' in value) || typeof value.data === 'object'));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Type guard to check if server.address() returned AddressInfo
|
|
27
|
+
*/
|
|
28
|
+
function isAddressInfo(value) {
|
|
29
|
+
return (value !== null && typeof value === 'object' && 'port' in value);
|
|
30
|
+
}
|
|
31
|
+
// Path to the built React app (dist/frontend when running from dist/http/)
|
|
32
|
+
const FRONTEND_DIR = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../frontend');
|
|
33
|
+
/** MIME types for static file serving */
|
|
34
|
+
const MIME_TYPES = {
|
|
35
|
+
'.html': 'text/html; charset=utf-8',
|
|
36
|
+
'.js': 'application/javascript; charset=utf-8',
|
|
37
|
+
'.css': 'text/css; charset=utf-8',
|
|
38
|
+
'.json': 'application/json; charset=utf-8',
|
|
39
|
+
'.svg': 'image/svg+xml',
|
|
40
|
+
'.png': 'image/png',
|
|
41
|
+
'.ico': 'image/x-icon'
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Serves a static file from the frontend directory
|
|
45
|
+
*/
|
|
46
|
+
function serveStaticFile(filePath, res) {
|
|
47
|
+
const fullPath = path.join(FRONTEND_DIR, filePath);
|
|
48
|
+
const safePath = path.normalize(fullPath);
|
|
49
|
+
// Prevent directory traversal
|
|
50
|
+
if (!safePath.startsWith(FRONTEND_DIR)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
if (!fs.existsSync(safePath) || fs.statSync(safePath).isDirectory()) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const extension = path.extname(safePath);
|
|
58
|
+
const contentType = (MIME_TYPES[extension] || 'application/octet-stream');
|
|
59
|
+
const content = fs.readFileSync(safePath);
|
|
60
|
+
res.writeHead(200, {
|
|
61
|
+
'Content-Type': contentType,
|
|
62
|
+
'Cache-Control': 'no-cache, no-store, must-revalidate',
|
|
63
|
+
'Pragma': 'no-cache',
|
|
64
|
+
'Expires': '0'
|
|
65
|
+
});
|
|
66
|
+
res.end(content);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Creates a skip response for when the browser is closed without interaction
|
|
75
|
+
*/
|
|
76
|
+
function createSkipResponse() {
|
|
77
|
+
return { action: 'skip', data: {} };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Finds an available port and starts an HTTP server
|
|
81
|
+
* Returns a promise that resolves when the user submits or skips
|
|
82
|
+
*/
|
|
83
|
+
export async function serveFormAndAwaitResponse(config) {
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
let resolved = false;
|
|
86
|
+
let sseConnection = null;
|
|
87
|
+
/**
|
|
88
|
+
* Resolves with skip response and cleans up
|
|
89
|
+
*/
|
|
90
|
+
function resolveWithSkip(server) {
|
|
91
|
+
if (!resolved) {
|
|
92
|
+
resolved = true;
|
|
93
|
+
server.close();
|
|
94
|
+
resolve(createSkipResponse());
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const server = http.createServer((request, res) => {
|
|
98
|
+
const url = new URL((request.url ?? '/'), `http://${request.headers.host}`);
|
|
99
|
+
// Enable CORS for local development
|
|
100
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
101
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
102
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
103
|
+
if (request.method === 'OPTIONS') {
|
|
104
|
+
res.writeHead(204);
|
|
105
|
+
res.end();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// API: SSE connection for detecting browser close
|
|
109
|
+
if (request.method === 'GET' && url.pathname === '/api/connection') {
|
|
110
|
+
// Close any existing SSE connection (shouldn't happen, but be safe)
|
|
111
|
+
if (sseConnection) {
|
|
112
|
+
sseConnection.end();
|
|
113
|
+
}
|
|
114
|
+
sseConnection = res;
|
|
115
|
+
res.writeHead(200, {
|
|
116
|
+
'Content-Type': 'text/event-stream',
|
|
117
|
+
'Cache-Control': 'no-cache',
|
|
118
|
+
'Connection': 'keep-alive'
|
|
119
|
+
});
|
|
120
|
+
// Send initial connected event
|
|
121
|
+
res.write('event: connected\ndata: {}\n\n');
|
|
122
|
+
// Keep connection alive with periodic heartbeats
|
|
123
|
+
const heartbeatInterval = setInterval(() => {
|
|
124
|
+
if (!res.writableEnded) {
|
|
125
|
+
res.write('event: heartbeat\ndata: {}\n\n');
|
|
126
|
+
}
|
|
127
|
+
}, 5000);
|
|
128
|
+
// When connection closes (browser window closed), resolve with skip
|
|
129
|
+
res.on('close', () => {
|
|
130
|
+
clearInterval(heartbeatInterval);
|
|
131
|
+
sseConnection = null;
|
|
132
|
+
resolveWithSkip(server);
|
|
133
|
+
});
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// API: Get form configuration
|
|
137
|
+
if (request.method === 'GET' && url.pathname === '/api/config') {
|
|
138
|
+
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
|
|
139
|
+
res.end(JSON.stringify(config));
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
// API: Submit form response
|
|
143
|
+
if (request.method === 'POST' && url.pathname === '/api/submit') {
|
|
144
|
+
let body = '';
|
|
145
|
+
request.on('data', (chunk) => {
|
|
146
|
+
body += chunk.toString();
|
|
147
|
+
});
|
|
148
|
+
request.on('end', () => {
|
|
149
|
+
try {
|
|
150
|
+
const parsed = JSON.parse(body);
|
|
151
|
+
if (!isFormResponse(parsed)) {
|
|
152
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
153
|
+
res.end(JSON.stringify({ error: 'Invalid form response' }));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const data = parsed;
|
|
157
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
158
|
+
res.end(JSON.stringify({ success: true }));
|
|
159
|
+
if (!resolved) {
|
|
160
|
+
resolved = true;
|
|
161
|
+
// Close the server after a short delay to ensure response is sent
|
|
162
|
+
setTimeout(() => {
|
|
163
|
+
server.close();
|
|
164
|
+
resolve(data);
|
|
165
|
+
}, 100);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
170
|
+
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
request.on('error', (error) => {
|
|
174
|
+
if (!resolved) {
|
|
175
|
+
resolved = true;
|
|
176
|
+
server.close();
|
|
177
|
+
reject(error);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
// Static files: Serve from frontend build directory
|
|
183
|
+
if (request.method === 'GET') {
|
|
184
|
+
// Try the exact path first
|
|
185
|
+
const filePath = (url.pathname === '/' ? '/index.html' : url.pathname);
|
|
186
|
+
if (serveStaticFile(filePath, res)) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// SPA fallback: serve index.html for unknown routes
|
|
190
|
+
if (serveStaticFile('/index.html', res)) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
194
|
+
res.end('Not Found');
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Method not allowed
|
|
198
|
+
res.writeHead(405, { 'Content-Type': 'text/plain' });
|
|
199
|
+
res.end('Method Not Allowed');
|
|
200
|
+
});
|
|
201
|
+
server.on('error', (error) => {
|
|
202
|
+
if (!resolved) {
|
|
203
|
+
resolved = true;
|
|
204
|
+
reject(error);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
// Listen on a random available port
|
|
208
|
+
server.listen(0, '127.0.0.1', () => {
|
|
209
|
+
const address = server.address();
|
|
210
|
+
if (!isAddressInfo(address)) {
|
|
211
|
+
reject(new Error('Failed to get server address'));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const url = `http://127.0.0.1:${address.port}`;
|
|
215
|
+
// Open the browser - if it fails, resolve with skip
|
|
216
|
+
openBrowser(url).catch((error) => {
|
|
217
|
+
console.error('Failed to open browser:', error);
|
|
218
|
+
resolveWithSkip(server);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/** Default window size for app mode */
|
|
224
|
+
const APP_WINDOW_WIDTH = 680;
|
|
225
|
+
const APP_WINDOW_HEIGHT = 660;
|
|
226
|
+
/**
|
|
227
|
+
* Gets screen dimensions for centering the window.
|
|
228
|
+
* Returns null if unable to determine.
|
|
229
|
+
*/
|
|
230
|
+
async function getScreenSize() {
|
|
231
|
+
const os = platform();
|
|
232
|
+
return new Promise((resolve) => {
|
|
233
|
+
if (os === 'win32') {
|
|
234
|
+
// PowerShell command to get primary screen resolution (JSON output for reliable parsing)
|
|
235
|
+
const cmd = 'powershell -Command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Screen]::PrimaryScreen.Bounds | Select-Object Width,Height | ConvertTo-Json"';
|
|
236
|
+
exec(cmd, (error, stdout) => {
|
|
237
|
+
if (error) {
|
|
238
|
+
resolve(null);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
try {
|
|
242
|
+
const parsed = JSON.parse(stdout.trim());
|
|
243
|
+
if (typeof parsed === 'object' &&
|
|
244
|
+
parsed !== null &&
|
|
245
|
+
'Width' in parsed &&
|
|
246
|
+
'Height' in parsed &&
|
|
247
|
+
typeof parsed.Width === 'number' &&
|
|
248
|
+
typeof parsed.Height === 'number') {
|
|
249
|
+
resolve({ width: parsed.Width, height: parsed.Height });
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
resolve(null);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
resolve(null);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
else if (os === 'darwin') {
|
|
261
|
+
exec('system_profiler SPDisplaysDataType | grep Resolution', (error, stdout) => {
|
|
262
|
+
if (error) {
|
|
263
|
+
resolve(null);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const match = (/(\d+)\s*x\s*(\d+)/u).exec(stdout);
|
|
267
|
+
if (match) {
|
|
268
|
+
resolve({ width: Number.parseInt(match[1], 10), height: Number.parseInt(match[2], 10) });
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
resolve(null);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
exec('xdpyinfo | grep dimensions', (error, stdout) => {
|
|
277
|
+
if (error) {
|
|
278
|
+
resolve(null);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const match = (/(\d+)x(\d+)/u).exec(stdout);
|
|
282
|
+
if (match) {
|
|
283
|
+
resolve({ width: Number.parseInt(match[1], 10), height: Number.parseInt(match[2], 10) });
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
resolve(null);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Opens browser in app mode (no address bar, tabs, etc.)
|
|
294
|
+
* Uses Edge on Windows (pre-installed), Chrome as fallback.
|
|
295
|
+
* Falls back to default browser if no app-mode browser is available.
|
|
296
|
+
*/
|
|
297
|
+
async function openBrowser(url) {
|
|
298
|
+
const os = platform();
|
|
299
|
+
// Try to get screen size for centering
|
|
300
|
+
const screen = await getScreenSize();
|
|
301
|
+
const windowSizeArg = `"--window-size=${APP_WINDOW_WIDTH},${APP_WINDOW_HEIGHT}"`;
|
|
302
|
+
let windowPosArg = '';
|
|
303
|
+
if (screen) {
|
|
304
|
+
const x = Math.round((screen.width - APP_WINDOW_WIDTH) / 2);
|
|
305
|
+
const y = Math.round((screen.height - APP_WINDOW_HEIGHT) / 2);
|
|
306
|
+
windowPosArg = ` "--window-position=${x},${y}"`;
|
|
307
|
+
}
|
|
308
|
+
if (os === 'win32') {
|
|
309
|
+
// Windows: try Edge first (pre-installed), then Chrome
|
|
310
|
+
// Use --user-data-dir to force a new browser instance (otherwise window args are ignored)
|
|
311
|
+
const tempDir = tmpdir();
|
|
312
|
+
const userDataDir = `${tempDir}\\mcp-popup-${Date.now()}`;
|
|
313
|
+
const browsers = [
|
|
314
|
+
`start "" msedge "--app=${url}" ${windowSizeArg}${windowPosArg} "--user-data-dir=${userDataDir}"`,
|
|
315
|
+
`start "" chrome "--app=${url}" ${windowSizeArg}${windowPosArg} "--user-data-dir=${userDataDir}"`
|
|
316
|
+
];
|
|
317
|
+
for (const cmd of browsers) {
|
|
318
|
+
const success = await new Promise((resolve) => {
|
|
319
|
+
exec(cmd, (error) => {
|
|
320
|
+
resolve(!error);
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
if (success) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
else if (os === 'darwin') {
|
|
329
|
+
// macOS: use open command with Chrome/Edge
|
|
330
|
+
const windowArgs = `--window-size=${APP_WINDOW_WIDTH},${APP_WINDOW_HEIGHT}${windowPosArg.replace(/"/gu, '')}`;
|
|
331
|
+
const browsers = [
|
|
332
|
+
['Google Chrome', `--args --app="${url}" ${windowArgs} --new-window`],
|
|
333
|
+
['Microsoft Edge', `--args --app="${url}" ${windowArgs} --new-window`]
|
|
334
|
+
];
|
|
335
|
+
for (const [app, args] of browsers) {
|
|
336
|
+
const success = await new Promise((resolve) => {
|
|
337
|
+
exec(`open -a "${app}" ${args}`, (error) => {
|
|
338
|
+
resolve(!error);
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
if (success) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
// Linux: try common browser commands
|
|
348
|
+
const windowArgs = `--window-size=${APP_WINDOW_WIDTH},${APP_WINDOW_HEIGHT}${windowPosArg.replace(/"/gu, '')}`;
|
|
349
|
+
const browsers = [
|
|
350
|
+
`google-chrome --app="${url}" ${windowArgs} --new-window`,
|
|
351
|
+
`chromium-browser --app="${url}" ${windowArgs} --new-window`,
|
|
352
|
+
`microsoft-edge --app="${url}" ${windowArgs} --new-window`
|
|
353
|
+
];
|
|
354
|
+
for (const cmd of browsers) {
|
|
355
|
+
const success = await new Promise((resolve) => {
|
|
356
|
+
exec(cmd, (error) => {
|
|
357
|
+
resolve(!error);
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
if (success) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
// Fallback: use 'open' package for default browser
|
|
366
|
+
const open = await import('open');
|
|
367
|
+
await open.default(url);
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Gets the URL for the form server (for testing purposes)
|
|
371
|
+
*/
|
|
372
|
+
export function getServerUrl(server) {
|
|
373
|
+
const address = server.address();
|
|
374
|
+
if (!isAddressInfo(address)) {
|
|
375
|
+
throw new Error('Server is not listening or address is unavailable');
|
|
376
|
+
}
|
|
377
|
+
return `http://127.0.0.1:${address.port}`;
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../mcp/http/server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../mcp/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* mcp-popup-ui
|
|
4
|
+
*
|
|
5
|
+
* An MCP server that provides interactive popup UI tools
|
|
6
|
+
* for collecting user input via the system browser.
|
|
7
|
+
*/
|
|
8
|
+
import { startServer } from './server/index.js';
|
|
9
|
+
// Start the MCP server
|
|
10
|
+
try {
|
|
11
|
+
await startServer();
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
console.error('Failed to start MCP server:', error);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../mcp/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,uBAAuB;AACvB,IAAI,CAAC;IACJ,MAAM,WAAW,EAAE,CAAC;AACrB,CAAC;AACD,OAAO,KAAK,EAAE,CAAC;IACd,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server setup and configuration
|
|
3
|
+
*/
|
|
4
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
|
+
/**
|
|
6
|
+
* Creates and configures the MCP server
|
|
7
|
+
*/
|
|
8
|
+
export declare function createServer(): McpServer;
|
|
9
|
+
/**
|
|
10
|
+
* Starts the server with stdio transport
|
|
11
|
+
*/
|
|
12
|
+
export declare function startServer(): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../mcp/server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyJpE;;GAEG;AACH,wBAAgB,YAAY,IAAK,SAAS,CAezC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAK,OAAO,CAAC,IAAI,CAAC,CAwFlD"}
|