safari-devtools-mcp 0.1.8 → 1.0.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/README.md +2 -2
- package/build/src/injected/console.d.ts +1 -1
- package/build/src/injected/console.js +8 -8
- package/build/src/tools/screenshot.d.ts.map +1 -1
- package/build/src/tools/screenshot.js +7 -2
- package/build/src/tools/screenshot.js.map +1 -1
- package/build/src/tools/snapshot.d.ts.map +1 -1
- package/build/src/tools/snapshot.js +4 -3
- package/build/src/tools/snapshot.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Chrome developers get powerful AI debugging through [chrome-devtools-mcp](https:
|
|
|
14
14
|
|
|
15
15
|
- **Browser debugging**: Capture console logs, inspect network requests, and evaluate JavaScript — with stack traces and full request/response details.
|
|
16
16
|
- **Reliable automation**: Click, type, fill forms, drag and drop, and press keyboard shortcuts using accessibility-tree snapshots with stable UIDs.
|
|
17
|
-
- **Native macOS integration**: Tab management via AppleScript for listing, switching, and controlling Safari tabs across windows
|
|
17
|
+
- **Native macOS integration**: Tab management via AppleScript for listing, switching, and controlling Safari tabs across windows
|
|
18
18
|
|
|
19
19
|
## Requirements
|
|
20
20
|
|
|
@@ -118,7 +118,7 @@ Add the standard config to your `.junie/mcp.json` in the project root.
|
|
|
118
118
|
Open "Install MCP Server" in Raycast and fill in:
|
|
119
119
|
|
|
120
120
|
- **Command**: `npx`
|
|
121
|
-
- **Arguments**: `-y safari-devtools-mcp`
|
|
121
|
+
- **Arguments**: `-y safari-devtools-mcp@latest`
|
|
122
122
|
|
|
123
123
|
Or copy the standard config JSON above before opening the command — Raycast will auto-fill the form.
|
|
124
124
|
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* structured metadata (level, timestamp, stack traces for errors).
|
|
6
6
|
* Messages are stored in window.__safariDevToolsConsoleLogs.
|
|
7
7
|
*/
|
|
8
|
-
export declare const CONSOLE_CAPTURE_SCRIPT = "\n(function() {\n if (window.__safariDevToolsConsoleInitialized) return;\n window.__safariDevToolsConsoleInitialized = true;\n window.__safariDevToolsConsoleLogs = [];\n window.__safariDevToolsConsoleMsgId = 0;\n\n const originalConsole = {};\n const methods = [\n 'log', 'debug', 'info', 'error', 'warn', 'trace',\n 'assert', 'dir', 'table', 'clear', 'count', 'timeEnd'\n ];\n\n methods.forEach(function(method) {\n originalConsole[method] = console[method];\n\n console[method] = function() {\n var args = Array.from(arguments);\n var entry = {\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: method,\n message: args.map(function(arg) {\n try {\n if (typeof arg === 'object') {\n var s = JSON.stringify(arg, null, 2);\n return s && s.length >
|
|
8
|
+
export declare const CONSOLE_CAPTURE_SCRIPT = "\n(function() {\n if (window.__safariDevToolsConsoleInitialized) return;\n window.__safariDevToolsConsoleInitialized = true;\n window.__safariDevToolsConsoleLogs = [];\n window.__safariDevToolsConsoleMsgId = 0;\n\n const originalConsole = {};\n const methods = [\n 'log', 'debug', 'info', 'error', 'warn', 'trace',\n 'assert', 'dir', 'table', 'clear', 'count', 'timeEnd'\n ];\n\n methods.forEach(function(method) {\n originalConsole[method] = console[method];\n\n console[method] = function() {\n var args = Array.from(arguments);\n var entry = {\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: method,\n message: args.map(function(arg) {\n try {\n if (typeof arg === 'object') {\n var s = JSON.stringify(arg, null, 2);\n return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;\n }\n var str = String(arg);\n return str.length > 4000 ? str.substring(0, 4000) + '... [truncated]' : str;\n } catch(e) {\n return String(arg).substring(0, 4000);\n }\n }).join(' '),\n timestamp: Date.now(),\n args: args.map(function(arg) {\n try {\n var s = typeof arg === 'object' ? JSON.stringify(arg) : String(arg);\n return s && s.length > 8000 ? s.substring(0, 8000) + '... [truncated]' : s;\n } catch(e) {\n return String(arg).substring(0, 8000);\n }\n })\n };\n\n // Capture stack trace for errors and traces\n if (method === 'error' || method === 'warn' || method === 'trace' || method === 'assert') {\n try {\n var err = new Error();\n // Remove the first two lines (Error + this wrapper)\n var stack = err.stack || '';\n var lines = stack.split('\\n');\n entry.stackTrace = lines.slice(2).join('\\n');\n } catch(e) {}\n }\n\n // Special handling for assert - only log if assertion fails\n if (method === 'assert') {\n if (args[0]) return originalConsole[method].apply(console, args);\n entry.message = 'Assertion failed: ' + args.slice(1).map(function(a) {\n try {\n var s = typeof a === 'object' ? JSON.stringify(a) : String(a);\n return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;\n } catch(e) { return String(a).substring(0, 4000); }\n }).join(' ');\n }\n\n // Special handling for clear\n if (method === 'clear') {\n entry.message = 'Console was cleared';\n }\n\n window.__safariDevToolsConsoleLogs.push(entry);\n\n // Call original method\n if (originalConsole[method]) {\n originalConsole[method].apply(console, args);\n }\n };\n });\n\n // Capture uncaught errors\n window.addEventListener('error', function(event) {\n window.__safariDevToolsConsoleLogs.push({\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: 'error',\n message: event.message || String(event),\n timestamp: Date.now(),\n source: event.filename ? event.filename + ':' + event.lineno + ':' + event.colno : undefined,\n stackTrace: event.error ? event.error.stack : undefined\n });\n });\n\n // Capture unhandled promise rejections\n window.addEventListener('unhandledrejection', function(event) {\n var message = 'Unhandled Promise Rejection: ';\n try {\n var r = event.reason instanceof Error ? event.reason.message : JSON.stringify(event.reason);\n message += r && r.length > 4000 ? r.substring(0, 4000) + '... [truncated]' : r;\n } catch(e) {\n message += String(event.reason);\n }\n window.__safariDevToolsConsoleLogs.push({\n msgid: window.__safariDevToolsConsoleMsgId++,\n level: 'error',\n message: message,\n timestamp: Date.now(),\n stackTrace: event.reason instanceof Error ? event.reason.stack : undefined\n });\n });\n})();\n";
|
|
9
9
|
//# sourceMappingURL=console.d.ts.map
|
|
@@ -30,21 +30,21 @@ export const CONSOLE_CAPTURE_SCRIPT = `
|
|
|
30
30
|
try {
|
|
31
31
|
if (typeof arg === 'object') {
|
|
32
32
|
var s = JSON.stringify(arg, null, 2);
|
|
33
|
-
return s && s.length >
|
|
33
|
+
return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;
|
|
34
34
|
}
|
|
35
35
|
var str = String(arg);
|
|
36
|
-
return str.length >
|
|
36
|
+
return str.length > 4000 ? str.substring(0, 4000) + '... [truncated]' : str;
|
|
37
37
|
} catch(e) {
|
|
38
|
-
return String(arg).substring(0,
|
|
38
|
+
return String(arg).substring(0, 4000);
|
|
39
39
|
}
|
|
40
40
|
}).join(' '),
|
|
41
41
|
timestamp: Date.now(),
|
|
42
42
|
args: args.map(function(arg) {
|
|
43
43
|
try {
|
|
44
44
|
var s = typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
|
|
45
|
-
return s && s.length >
|
|
45
|
+
return s && s.length > 8000 ? s.substring(0, 8000) + '... [truncated]' : s;
|
|
46
46
|
} catch(e) {
|
|
47
|
-
return String(arg).substring(0,
|
|
47
|
+
return String(arg).substring(0, 8000);
|
|
48
48
|
}
|
|
49
49
|
})
|
|
50
50
|
};
|
|
@@ -66,8 +66,8 @@ export const CONSOLE_CAPTURE_SCRIPT = `
|
|
|
66
66
|
entry.message = 'Assertion failed: ' + args.slice(1).map(function(a) {
|
|
67
67
|
try {
|
|
68
68
|
var s = typeof a === 'object' ? JSON.stringify(a) : String(a);
|
|
69
|
-
return s && s.length >
|
|
70
|
-
} catch(e) { return String(a).substring(0,
|
|
69
|
+
return s && s.length > 4000 ? s.substring(0, 4000) + '... [truncated]' : s;
|
|
70
|
+
} catch(e) { return String(a).substring(0, 4000); }
|
|
71
71
|
}).join(' ');
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -102,7 +102,7 @@ export const CONSOLE_CAPTURE_SCRIPT = `
|
|
|
102
102
|
var message = 'Unhandled Promise Rejection: ';
|
|
103
103
|
try {
|
|
104
104
|
var r = event.reason instanceof Error ? event.reason.message : JSON.stringify(event.reason);
|
|
105
|
-
message += r && r.length >
|
|
105
|
+
message += r && r.length > 4000 ? r.substring(0, 4000) + '... [truncated]' : r;
|
|
106
106
|
} catch(e) {
|
|
107
107
|
message += String(event.reason);
|
|
108
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,oBAAoB;;;CAahC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,oBAAoB;;;CAahC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAyD5B,CAAC"}
|
|
@@ -40,18 +40,23 @@ export const takeScreenshot = async (params, driver) => {
|
|
|
40
40
|
],
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
// Check size — if too large,
|
|
43
|
+
// Check size — if too large for inline base64, save to temp file
|
|
44
44
|
if (base64Data.length >= 2_000_000) {
|
|
45
45
|
const { tmpdir } = await import('os');
|
|
46
46
|
const { join } = await import('path');
|
|
47
47
|
const tempPath = join(tmpdir(), `safari-screenshot-${Date.now()}.png`);
|
|
48
48
|
const buffer = Buffer.from(base64Data, 'base64');
|
|
49
49
|
await writeFile(tempPath, buffer);
|
|
50
|
+
const sizeMB = (buffer.length / 1_048_576).toFixed(1);
|
|
50
51
|
return {
|
|
51
52
|
content: [
|
|
52
53
|
{
|
|
53
54
|
type: 'text',
|
|
54
|
-
text:
|
|
55
|
+
text: [
|
|
56
|
+
description,
|
|
57
|
+
`\nScreenshot (${sizeMB} MB) exceeded the 1.5 MB inline limit and was saved to: ${tempPath}`,
|
|
58
|
+
'Tip: Use the filePath parameter to save directly to a preferred location, or use resize_page to reduce viewport size before capturing.',
|
|
59
|
+
].join('\n'),
|
|
55
60
|
},
|
|
56
61
|
],
|
|
57
62
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAGtC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uGAAuG,CACxG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4IAA4I,CAC7I;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAClE,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IAExB,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC;QACtE,WAAW,GAAG,0CAA0C,MAAM,CAAC,GAAG,IAAI,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,WAAW,GAAG,mDAAmD,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,MAAM,CAAC,QAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,GAAG,WAAW,yBAAyB,MAAM,CAAC,QAAQ,GAAG;iBAChE;aACF;SACF,CAAC;IACJ,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/tools/screenshot.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAGtC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uGAAuG,CACxG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4IAA4I,CAC7I;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAClE,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IAExB,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC;QACtE,WAAW,GAAG,0CAA0C,MAAM,CAAC,GAAG,IAAI,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3C,WAAW,GAAG,mDAAmD,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,MAAM,CAAC,QAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,GAAG,WAAW,yBAAyB,MAAM,CAAC,QAAQ,GAAG;iBAChE;aACF;SACF,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACnC,MAAM,EAAC,MAAM,EAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,EAAC,IAAI,EAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;wBACJ,WAAW;wBACX,iBAAiB,MAAM,2DAA2D,QAAQ,EAAE;wBAC5F,wIAAwI;qBACzI,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAC;YAC1C;gBACE,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,WAAW;aACtB;SACF;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,kBAAkB;;;CAa9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,kBAAkB;;;CAa9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,WAoB1B,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAWzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WA6BrB,CAAC"}
|
|
@@ -9,15 +9,16 @@ export const takeSnapshotSchema = {
|
|
|
9
9
|
verbose: z
|
|
10
10
|
.boolean()
|
|
11
11
|
.optional()
|
|
12
|
-
.describe('Whether to include all possible information (tag names, attributes). Default is
|
|
12
|
+
.describe('Whether to include all possible information (tag names, attributes). Default is true.'),
|
|
13
13
|
filePath: z
|
|
14
14
|
.string()
|
|
15
15
|
.optional()
|
|
16
16
|
.describe('The absolute path, or a path relative to the current working directory, to save the snapshot to instead of attaching it to the response.'),
|
|
17
17
|
};
|
|
18
18
|
export const takeSnapshot = async (params, driver) => {
|
|
19
|
-
const
|
|
20
|
-
const
|
|
19
|
+
const verbose = params.verbose !== false; // default true
|
|
20
|
+
const tree = await driver.takeSnapshot(verbose);
|
|
21
|
+
const text = formatSnapshot(tree, verbose);
|
|
21
22
|
if (params.filePath) {
|
|
22
23
|
await writeFile(params.filePath, text, 'utf-8');
|
|
23
24
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,cAAc,EAAC,MAAM,oCAAoC,CAAC;AAGlE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,cAAc,EAAC,MAAM,oCAAoC,CAAC;AAGlE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,uFAAuF,CACxF;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,0IAA0I,CAC3I;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,eAAe;IACzD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,SAAS,CAAC,MAAM,CAAC,QAAkB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,MAAM,CAAC,QAAQ,GAAG;iBAC9C;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAC,CAAC;KACzC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,uEAAuE,CACxE;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAgB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAgB,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAA6B,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvD,gCAAgC;QAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qBAAqB,KAAK,eAAe,YAAY,EAAE;iBAC9D;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "safari-devtools-mcp",
|
|
3
3
|
"mcpName": "io.github.HayoDev/safari-devtools-mcp",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"description": "MCP server for Safari DevTools — browser debugging and automation for AI coding agents",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "build/src/index.js",
|