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.
@@ -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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"}
@@ -0,0 +1,9 @@
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
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}