@saiden/browse 0.2.5

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.

Potentially problematic release.


This version of @saiden/browse might be problematic. Click here for more details.

Files changed (50) hide show
  1. package/README.md +210 -0
  2. package/dist/browser.d.ts +48 -0
  3. package/dist/browser.d.ts.map +1 -0
  4. package/dist/browser.integration.test.d.ts +2 -0
  5. package/dist/browser.integration.test.d.ts.map +1 -0
  6. package/dist/browser.integration.test.js +173 -0
  7. package/dist/browser.integration.test.js.map +1 -0
  8. package/dist/browser.js +250 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/browser.test.d.ts +2 -0
  11. package/dist/browser.test.d.ts.map +1 -0
  12. package/dist/browser.test.js +73 -0
  13. package/dist/browser.test.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +247 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/image.d.ts +21 -0
  19. package/dist/image.d.ts.map +1 -0
  20. package/dist/image.js +131 -0
  21. package/dist/image.js.map +1 -0
  22. package/dist/index.d.ts +6 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +4 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/logger.d.ts +41 -0
  27. package/dist/logger.d.ts.map +1 -0
  28. package/dist/logger.js +103 -0
  29. package/dist/logger.js.map +1 -0
  30. package/dist/logger.test.d.ts +2 -0
  31. package/dist/logger.test.d.ts.map +1 -0
  32. package/dist/logger.test.js +146 -0
  33. package/dist/logger.test.js.map +1 -0
  34. package/dist/mcp.d.ts +3 -0
  35. package/dist/mcp.d.ts.map +1 -0
  36. package/dist/mcp.js +541 -0
  37. package/dist/mcp.js.map +1 -0
  38. package/dist/server.d.ts +20 -0
  39. package/dist/server.d.ts.map +1 -0
  40. package/dist/server.js +88 -0
  41. package/dist/server.js.map +1 -0
  42. package/dist/server.test.d.ts +2 -0
  43. package/dist/server.test.d.ts.map +1 -0
  44. package/dist/server.test.js +164 -0
  45. package/dist/server.test.js.map +1 -0
  46. package/dist/types.d.ts +125 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/package.json +74 -0
package/dist/mcp.js ADDED
@@ -0,0 +1,541 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'node:fs';
3
+ import { dirname, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
7
+ import { z } from 'zod';
8
+ import { ClaudeBrowser } from './browser.js';
9
+ import * as image from './image.js';
10
+ import { stderrLogger as log } from './logger.js';
11
+ const __dirname = dirname(fileURLToPath(import.meta.url));
12
+ const pkg = JSON.parse(readFileSync(resolve(__dirname, '../package.json'), 'utf-8'));
13
+ const browser = new ClaudeBrowser({ headless: true, width: 1280, height: 800 });
14
+ let launched = false;
15
+ let currentScreenshotBuffer = null;
16
+ async function ensureLaunched() {
17
+ if (!launched) {
18
+ await browser.launch();
19
+ launched = true;
20
+ }
21
+ }
22
+ function textResult(text) {
23
+ return { content: [{ type: 'text', text }] };
24
+ }
25
+ function withLogging(cmd, fn) {
26
+ return async (args) => {
27
+ const cmdLike = { cmd, ...args };
28
+ log.command(cmdLike);
29
+ try {
30
+ const result = await fn(args);
31
+ const parsed = JSON.parse(result.content[0]?.text || '{}');
32
+ const resultLike = { ok: true, ...parsed };
33
+ log.result(cmdLike, resultLike);
34
+ return result;
35
+ }
36
+ catch (err) {
37
+ log.result(cmdLike, { ok: false, error: err.message });
38
+ throw err;
39
+ }
40
+ };
41
+ }
42
+ const server = new McpServer({
43
+ name: 'claude-browse',
44
+ version: pkg.version,
45
+ });
46
+ // Navigation
47
+ server.tool('goto', 'Navigate to a URL', { url: z.string().url() }, withLogging('goto', async ({ url }) => {
48
+ await ensureLaunched();
49
+ const result = await browser.goto(url);
50
+ return textResult(JSON.stringify(result));
51
+ }));
52
+ server.tool('back', 'Go back in browser history', {}, withLogging('back', async () => {
53
+ await ensureLaunched();
54
+ const result = await browser.back();
55
+ return textResult(JSON.stringify(result));
56
+ }));
57
+ server.tool('forward', 'Go forward in browser history', {}, withLogging('forward', async () => {
58
+ await ensureLaunched();
59
+ const result = await browser.forward();
60
+ return textResult(JSON.stringify(result));
61
+ }));
62
+ server.tool('reload', 'Reload the current page', {}, withLogging('reload', async () => {
63
+ await ensureLaunched();
64
+ const result = await browser.reload();
65
+ return textResult(JSON.stringify(result));
66
+ }));
67
+ // Interaction
68
+ server.tool('click', 'Click on an element', { selector: z.string() }, withLogging('click', async ({ selector }) => {
69
+ await ensureLaunched();
70
+ const result = await browser.click(selector);
71
+ return textResult(JSON.stringify(result));
72
+ }));
73
+ server.tool('type', 'Type text into an input field', { selector: z.string(), text: z.string() }, withLogging('type', async ({ selector, text }) => {
74
+ await ensureLaunched();
75
+ await browser.type(selector, text);
76
+ return textResult(JSON.stringify({ ok: true }));
77
+ }));
78
+ // Query
79
+ server.tool('query', 'Query elements by CSS selector, returns tag, text, and attributes', { selector: z.string() }, withLogging('query', async ({ selector }) => {
80
+ await ensureLaunched();
81
+ const elements = await browser.query(selector);
82
+ return textResult(JSON.stringify({ ok: true, count: elements.length, elements }));
83
+ }));
84
+ server.tool('url', 'Get current URL and page title', {}, withLogging('url', async () => {
85
+ await ensureLaunched();
86
+ const result = await browser.getUrl();
87
+ return textResult(JSON.stringify(result));
88
+ }));
89
+ server.tool('html', 'Get page HTML content', { full: z.boolean().optional().default(false) }, withLogging('html', async ({ full }) => {
90
+ await ensureLaunched();
91
+ const html = await browser.getHtml(full);
92
+ return textResult(JSON.stringify({ ok: true, html }));
93
+ }));
94
+ // Screenshot
95
+ server.tool('screenshot', 'Take a screenshot of the current page', {
96
+ path: z.string().optional().default('screenshots/screenshot.png'),
97
+ fullPage: z.boolean().optional().default(false),
98
+ }, withLogging('screenshot', async ({ path, fullPage }) => {
99
+ await ensureLaunched();
100
+ const result = await browser.screenshot(path, fullPage);
101
+ return textResult(JSON.stringify({ ok: true, path: result.path }));
102
+ }));
103
+ // Eval
104
+ server.tool('eval', 'Execute JavaScript in the browser context', { script: z.string() }, withLogging('eval', async ({ script }) => {
105
+ await ensureLaunched();
106
+ const result = await browser.eval(script);
107
+ return textResult(JSON.stringify({ ok: true, result }));
108
+ }));
109
+ // Utility
110
+ server.tool('wait', 'Wait for a specified time in milliseconds', { ms: z.number().optional().default(1000) }, withLogging('wait', async ({ ms }) => {
111
+ await ensureLaunched();
112
+ await browser.wait(ms);
113
+ return textResult(JSON.stringify({ ok: true }));
114
+ }));
115
+ // Session management
116
+ server.tool('close', 'Close the browser and end the current session', {}, withLogging('close', async () => {
117
+ if (launched) {
118
+ await browser.close();
119
+ launched = false;
120
+ }
121
+ return textResult(JSON.stringify({ ok: true, message: 'Browser closed' }));
122
+ }));
123
+ server.tool('session_save', 'Save the current session state (URL, cookies, localStorage, sessionStorage) to a JSON file', {
124
+ path: z.string().optional().default('session.json').describe('Path to save session file'),
125
+ }, withLogging('session_save', async ({ path }) => {
126
+ await ensureLaunched();
127
+ const { writeFile } = await import('node:fs/promises');
128
+ const { resolve } = await import('node:path');
129
+ const page = browser.getPage();
130
+ const context = browser.getContext();
131
+ if (!page || !context) {
132
+ return textResult(JSON.stringify({ ok: false, error: 'No active page' }));
133
+ }
134
+ const url = page.url();
135
+ const title = await page.title();
136
+ const cookies = await context.cookies();
137
+ // Get localStorage and sessionStorage (runs in browser context)
138
+ const storage = (await page.evaluate(`({
139
+ localStorage: Object.fromEntries(
140
+ Array.from({ length: localStorage.length }, (_, i) => localStorage.key(i))
141
+ .filter(k => k !== null)
142
+ .map(k => [k, localStorage.getItem(k) || ''])
143
+ ),
144
+ sessionStorage: Object.fromEntries(
145
+ Array.from({ length: sessionStorage.length }, (_, i) => sessionStorage.key(i))
146
+ .filter(k => k !== null)
147
+ .map(k => [k, sessionStorage.getItem(k) || ''])
148
+ ),
149
+ })`));
150
+ const sessionData = {
151
+ url,
152
+ title,
153
+ cookies,
154
+ localStorage: storage.localStorage,
155
+ sessionStorage: storage.sessionStorage,
156
+ savedAt: new Date().toISOString(),
157
+ };
158
+ const resolvedPath = resolve(path);
159
+ await writeFile(resolvedPath, JSON.stringify(sessionData, null, 2));
160
+ return textResult(JSON.stringify({ ok: true, path: resolvedPath, url, cookieCount: cookies.length }));
161
+ }));
162
+ server.tool('session_restore', 'Restore a previously saved session state from a JSON file', {
163
+ path: z.string().optional().default('session.json').describe('Path to session file'),
164
+ }, withLogging('session_restore', async ({ path }) => {
165
+ await ensureLaunched();
166
+ const { readFile } = await import('node:fs/promises');
167
+ const { resolve } = await import('node:path');
168
+ const resolvedPath = resolve(path);
169
+ const data = JSON.parse(await readFile(resolvedPath, 'utf-8'));
170
+ const page = browser.getPage();
171
+ const context = browser.getContext();
172
+ if (!page || !context) {
173
+ return textResult(JSON.stringify({ ok: false, error: 'No active page' }));
174
+ }
175
+ // Restore cookies first
176
+ if (data.cookies?.length > 0) {
177
+ await context.addCookies(data.cookies);
178
+ }
179
+ // Navigate to saved URL
180
+ if (data.url) {
181
+ await page.goto(data.url, { waitUntil: 'networkidle' });
182
+ }
183
+ // Restore storage (runs in browser context)
184
+ const local = data.localStorage || {};
185
+ const session = data.sessionStorage || {};
186
+ await page.evaluate(`((data) => {
187
+ for (const [k, v] of Object.entries(data.local)) localStorage.setItem(k, v);
188
+ for (const [k, v] of Object.entries(data.session)) sessionStorage.setItem(k, v);
189
+ })(${JSON.stringify({ local, session })})`);
190
+ return textResult(JSON.stringify({
191
+ ok: true,
192
+ url: data.url,
193
+ title: data.title,
194
+ cookiesRestored: data.cookies?.length || 0,
195
+ savedAt: data.savedAt,
196
+ }));
197
+ }));
198
+ // Image processing
199
+ server.tool('favicon', 'Generate a complete favicon set from an image (16x16, 32x32, 48x48, apple-touch-icon 180x180, android-chrome 192x192 and 512x512)', {
200
+ input: z.string().describe('Path to source image'),
201
+ outputDir: z.string().describe('Directory to output favicon files'),
202
+ }, withLogging('favicon', async ({ input, outputDir }) => {
203
+ const result = await image.createFavicon(input, outputDir);
204
+ return textResult(JSON.stringify({ ok: true, files: result.files, outputDir: result.outputDir }));
205
+ }));
206
+ server.tool('convert', 'Convert an image to a different format (png, jpeg, webp, avif)', {
207
+ input: z.string().describe('Path to source image'),
208
+ output: z.string().describe('Path for output image'),
209
+ format: z.enum(['png', 'jpeg', 'webp', 'avif']).describe('Target format'),
210
+ }, withLogging('convert', async ({ input, output, format }) => {
211
+ const result = await image.convert(input, output, format);
212
+ return textResult(JSON.stringify({ ok: true, ...result }));
213
+ }));
214
+ server.tool('resize', 'Resize an image to specified dimensions', {
215
+ input: z.string().describe('Path to source image'),
216
+ output: z.string().describe('Path for output image'),
217
+ width: z.number().describe('Target width in pixels'),
218
+ height: z
219
+ .number()
220
+ .optional()
221
+ .describe('Target height in pixels (optional, maintains aspect ratio if omitted)'),
222
+ fit: z
223
+ .enum(['cover', 'contain', 'fill', 'inside', 'outside'])
224
+ .optional()
225
+ .default('cover')
226
+ .describe('How to fit the image'),
227
+ }, withLogging('resize', async ({ input, output, width, height, fit }) => {
228
+ const result = await image.resize(input, output, width, height, fit);
229
+ return textResult(JSON.stringify({ ok: true, ...result }));
230
+ }));
231
+ server.tool('crop', 'Crop a region from an image', {
232
+ input: z.string().describe('Path to source image'),
233
+ output: z.string().describe('Path for output image'),
234
+ left: z.number().describe('Left edge position in pixels'),
235
+ top: z.number().describe('Top edge position in pixels'),
236
+ width: z.number().describe('Width of crop region in pixels'),
237
+ height: z.number().describe('Height of crop region in pixels'),
238
+ }, withLogging('crop', async ({ input, output, left, top, width, height }) => {
239
+ const result = await image.crop(input, output, left, top, width, height);
240
+ return textResult(JSON.stringify({ ok: true, ...result }));
241
+ }));
242
+ server.tool('compress', 'Compress an image to reduce file size', {
243
+ input: z.string().describe('Path to source image'),
244
+ output: z.string().describe('Path for output image'),
245
+ quality: z.number().min(1).max(100).optional().default(80).describe('Quality level 1-100'),
246
+ }, withLogging('compress', async ({ input, output, quality }) => {
247
+ const result = await image.compress(input, output, quality);
248
+ return textResult(JSON.stringify({ ok: true, ...result }));
249
+ }));
250
+ server.tool('thumbnail', 'Create a thumbnail from an image', {
251
+ input: z.string().describe('Path to source image'),
252
+ output: z.string().describe('Path for output image'),
253
+ size: z
254
+ .enum(['small', 'medium', 'large'])
255
+ .optional()
256
+ .default('medium')
257
+ .describe('Thumbnail size preset (small=150px, medium=300px, large=600px)'),
258
+ }, withLogging('thumbnail', async ({ input, output, size }) => {
259
+ const result = await image.thumbnail(input, output, size);
260
+ return textResult(JSON.stringify({ ok: true, ...result }));
261
+ }));
262
+ // ============================================================================
263
+ // MCP Resources - Browser state accessible via @ mentions
264
+ // ============================================================================
265
+ // Resource: browser://state - Current browser state (URL, title, launched status)
266
+ server.resource('Browser State', 'browser://state', {
267
+ description: 'Current browser state including URL, title, and status',
268
+ mimeType: 'application/json',
269
+ }, async () => {
270
+ if (!launched) {
271
+ return {
272
+ contents: [
273
+ {
274
+ uri: 'browser://state',
275
+ mimeType: 'application/json',
276
+ text: JSON.stringify({ launched: false, url: null, title: null }),
277
+ },
278
+ ],
279
+ };
280
+ }
281
+ const state = await browser.getUrl();
282
+ return {
283
+ contents: [
284
+ {
285
+ uri: 'browser://state',
286
+ mimeType: 'application/json',
287
+ text: JSON.stringify({ launched: true, ...state }),
288
+ },
289
+ ],
290
+ };
291
+ });
292
+ // Resource: browser://html - Current page HTML content
293
+ server.resource('Page HTML', 'browser://html', { description: 'HTML content of the current page (truncated to 10KB)', mimeType: 'text/html' }, async () => {
294
+ if (!launched) {
295
+ return {
296
+ contents: [
297
+ {
298
+ uri: 'browser://html',
299
+ mimeType: 'text/plain',
300
+ text: 'Browser not launched. Use goto tool first.',
301
+ },
302
+ ],
303
+ };
304
+ }
305
+ const html = await browser.getHtml(false);
306
+ return {
307
+ contents: [
308
+ {
309
+ uri: 'browser://html',
310
+ mimeType: 'text/html',
311
+ text: html,
312
+ },
313
+ ],
314
+ };
315
+ });
316
+ // Resource: browser://html/full - Full page HTML content
317
+ server.resource('Full Page HTML', 'browser://html/full', { description: 'Complete HTML content of the current page', mimeType: 'text/html' }, async () => {
318
+ if (!launched) {
319
+ return {
320
+ contents: [
321
+ {
322
+ uri: 'browser://html/full',
323
+ mimeType: 'text/plain',
324
+ text: 'Browser not launched. Use goto tool first.',
325
+ },
326
+ ],
327
+ };
328
+ }
329
+ const html = await browser.getHtml(true);
330
+ return {
331
+ contents: [
332
+ {
333
+ uri: 'browser://html/full',
334
+ mimeType: 'text/html',
335
+ text: html,
336
+ },
337
+ ],
338
+ };
339
+ });
340
+ // Resource: browser://screenshot - Current page screenshot (base64)
341
+ server.resource('Page Screenshot', 'browser://screenshot', { description: 'Screenshot of the current page as base64 PNG', mimeType: 'image/png' }, async () => {
342
+ if (!launched) {
343
+ return {
344
+ contents: [
345
+ {
346
+ uri: 'browser://screenshot',
347
+ mimeType: 'text/plain',
348
+ text: 'Browser not launched. Use goto tool first.',
349
+ },
350
+ ],
351
+ };
352
+ }
353
+ const result = await browser.screenshot(undefined, false);
354
+ currentScreenshotBuffer = result.buffer || null;
355
+ return {
356
+ contents: [
357
+ {
358
+ uri: 'browser://screenshot',
359
+ mimeType: 'image/png',
360
+ blob: result.buffer?.toString('base64') || '',
361
+ },
362
+ ],
363
+ };
364
+ });
365
+ // ============================================================================
366
+ // MCP Prompts - Common workflows accessible via / commands
367
+ // ============================================================================
368
+ // Prompt: Analyze current page
369
+ server.prompt('analyze_page', 'Analyze the current page content and structure', async () => {
370
+ if (!launched) {
371
+ return {
372
+ messages: [
373
+ {
374
+ role: 'user',
375
+ content: {
376
+ type: 'text',
377
+ text: 'The browser is not launched yet. Please use the goto tool to navigate to a URL first, then I can analyze the page.',
378
+ },
379
+ },
380
+ ],
381
+ };
382
+ }
383
+ const state = await browser.getUrl();
384
+ const html = await browser.getHtml(false);
385
+ return {
386
+ messages: [
387
+ {
388
+ role: 'user',
389
+ content: {
390
+ type: 'text',
391
+ text: `Analyze the following webpage:
392
+
393
+ URL: ${state.url}
394
+ Title: ${state.title}
395
+
396
+ HTML Content (truncated):
397
+ \`\`\`html
398
+ ${html}
399
+ \`\`\`
400
+
401
+ Please provide:
402
+ 1. A summary of the page purpose and content
403
+ 2. Key interactive elements (forms, buttons, links)
404
+ 3. Any notable structure or patterns
405
+ 4. Suggestions for what actions might be useful`,
406
+ },
407
+ },
408
+ ],
409
+ };
410
+ });
411
+ // Prompt: Extract data from page
412
+ server.prompt('extract_data', 'Extract structured data from the current page', { selector: z.string().optional().describe('CSS selector to focus extraction (optional)') }, async ({ selector }) => {
413
+ if (!launched) {
414
+ return {
415
+ messages: [
416
+ {
417
+ role: 'user',
418
+ content: {
419
+ type: 'text',
420
+ text: 'The browser is not launched yet. Please use the goto tool to navigate to a URL first.',
421
+ },
422
+ },
423
+ ],
424
+ };
425
+ }
426
+ const state = await browser.getUrl();
427
+ let elements = [];
428
+ if (selector) {
429
+ elements = await browser.query(selector);
430
+ }
431
+ return {
432
+ messages: [
433
+ {
434
+ role: 'user',
435
+ content: {
436
+ type: 'text',
437
+ text: `Extract structured data from this webpage:
438
+
439
+ URL: ${state.url}
440
+ Title: ${state.title}
441
+ ${selector ? `\nSelector: ${selector}\nMatched Elements: ${elements.length}\n\nElements:\n${JSON.stringify(elements, null, 2)}` : ''}
442
+
443
+ Please:
444
+ 1. Use the query tool to find relevant data elements
445
+ 2. Extract and structure the data in a useful format (JSON, table, etc.)
446
+ 3. Identify patterns that could help with similar pages`,
447
+ },
448
+ },
449
+ ],
450
+ };
451
+ });
452
+ // Prompt: Navigate and interact
453
+ server.prompt('navigate_to', 'Navigate to a URL and describe what you find', { url: z.string().url().describe('URL to navigate to') }, async ({ url }) => {
454
+ return {
455
+ messages: [
456
+ {
457
+ role: 'user',
458
+ content: {
459
+ type: 'text',
460
+ text: `Please navigate to ${url} and:
461
+
462
+ 1. Use the goto tool to navigate there
463
+ 2. Take a screenshot to see the page
464
+ 3. Describe what you see
465
+ 4. Identify the main interactive elements
466
+ 5. Suggest what actions might be useful
467
+
468
+ Start by navigating to the URL.`,
469
+ },
470
+ },
471
+ ],
472
+ };
473
+ });
474
+ // Prompt: Fill form
475
+ server.prompt('fill_form', 'Help fill out a form on the current page', { formData: z.string().optional().describe('JSON object with field names and values to fill') }, async ({ formData }) => {
476
+ if (!launched) {
477
+ return {
478
+ messages: [
479
+ {
480
+ role: 'user',
481
+ content: {
482
+ type: 'text',
483
+ text: 'The browser is not launched yet. Please use the goto tool to navigate to a page with a form first.',
484
+ },
485
+ },
486
+ ],
487
+ };
488
+ }
489
+ const state = await browser.getUrl();
490
+ return {
491
+ messages: [
492
+ {
493
+ role: 'user',
494
+ content: {
495
+ type: 'text',
496
+ text: `Help fill out a form on this page:
497
+
498
+ URL: ${state.url}
499
+ Title: ${state.title}
500
+ ${formData ? `\nData to fill: ${formData}` : ''}
501
+
502
+ Please:
503
+ 1. Use the query tool to find form inputs (input, textarea, select)
504
+ 2. Identify required fields and their types
505
+ 3. Use the type tool to fill in each field
506
+ 4. Report what was filled and any issues encountered`,
507
+ },
508
+ },
509
+ ],
510
+ };
511
+ });
512
+ // Prompt: Screenshot comparison
513
+ server.prompt('compare_screenshots', 'Take screenshots and compare changes', async () => {
514
+ return {
515
+ messages: [
516
+ {
517
+ role: 'user',
518
+ content: {
519
+ type: 'text',
520
+ text: `I'll help you compare page states:
521
+
522
+ 1. Take an initial screenshot
523
+ 2. Perform some action (click, navigate, etc.)
524
+ 3. Take another screenshot
525
+ 4. Describe the differences
526
+
527
+ What action would you like me to perform between screenshots?`,
528
+ },
529
+ },
530
+ ],
531
+ };
532
+ });
533
+ // ============================================================================
534
+ // Start server
535
+ // ============================================================================
536
+ async function main() {
537
+ const transport = new StdioServerTransport();
538
+ await server.connect(transport);
539
+ }
540
+ main().catch(console.error);
541
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { BrowserOptions } from './types.js';
2
+ export interface ServerOptions extends BrowserOptions {
3
+ port?: number;
4
+ }
5
+ export declare class BrowserServer {
6
+ private browser;
7
+ private app;
8
+ private server;
9
+ private port;
10
+ constructor(options?: ServerOptions);
11
+ private setupMiddleware;
12
+ private setupRoutes;
13
+ private handleCommand;
14
+ start(): Promise<void>;
15
+ stop(): Promise<void>;
16
+ getPort(): number;
17
+ getApp(): import("express-serve-static-core").Express;
18
+ }
19
+ export declare function startServer(options?: ServerOptions): Promise<BrowserServer>;
20
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAuBD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAmD;IACjE,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,GAAE,aAAkB;IAOvC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;YAIL,aAAa;IAsBrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,OAAO,IAAI,MAAM;IAIjB,MAAM;CAGP;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAIrF"}