safari-devtools-mcp 1.2.0 → 1.2.1

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.
Files changed (56) hide show
  1. package/build/src/index.d.ts.map +1 -1
  2. package/build/src/index.js +30 -79
  3. package/build/src/index.js.map +1 -1
  4. package/build/src/tools/console.d.ts +1 -13
  5. package/build/src/tools/console.d.ts.map +1 -1
  6. package/build/src/tools/console.js +82 -67
  7. package/build/src/tools/console.js.map +1 -1
  8. package/build/src/tools/cookies.d.ts +1 -20
  9. package/build/src/tools/cookies.d.ts.map +1 -1
  10. package/build/src/tools/cookies.js +126 -111
  11. package/build/src/tools/cookies.js.map +1 -1
  12. package/build/src/tools/css.d.ts +1 -6
  13. package/build/src/tools/css.d.ts.map +1 -1
  14. package/build/src/tools/css.js +51 -45
  15. package/build/src/tools/css.js.map +1 -1
  16. package/build/src/tools/input.d.ts +1 -63
  17. package/build/src/tools/input.d.ts.map +1 -1
  18. package/build/src/tools/input.js +300 -253
  19. package/build/src/tools/input.js.map +1 -1
  20. package/build/src/tools/network.d.ts +1 -13
  21. package/build/src/tools/network.d.ts.map +1 -1
  22. package/build/src/tools/network.js +82 -67
  23. package/build/src/tools/network.js.map +1 -1
  24. package/build/src/tools/page-content.d.ts +1 -11
  25. package/build/src/tools/page-content.d.ts.map +1 -1
  26. package/build/src/tools/page-content.js +100 -83
  27. package/build/src/tools/page-content.js.map +1 -1
  28. package/build/src/tools/pages.d.ts +1 -30
  29. package/build/src/tools/pages.d.ts.map +1 -1
  30. package/build/src/tools/pages.js +237 -202
  31. package/build/src/tools/pages.js.map +1 -1
  32. package/build/src/tools/screenshot.d.ts +1 -6
  33. package/build/src/tools/screenshot.d.ts.map +1 -1
  34. package/build/src/tools/screenshot.js +72 -65
  35. package/build/src/tools/screenshot.js.map +1 -1
  36. package/build/src/tools/script.d.ts +1 -6
  37. package/build/src/tools/script.d.ts.map +1 -1
  38. package/build/src/tools/script.js +40 -33
  39. package/build/src/tools/script.js.map +1 -1
  40. package/build/src/tools/scroll.d.ts +1 -10
  41. package/build/src/tools/scroll.d.ts.map +1 -1
  42. package/build/src/tools/scroll.js +48 -40
  43. package/build/src/tools/scroll.js.map +1 -1
  44. package/build/src/tools/snapshot.d.ts +1 -11
  45. package/build/src/tools/snapshot.d.ts.map +1 -1
  46. package/build/src/tools/snapshot.js +77 -68
  47. package/build/src/tools/snapshot.js.map +1 -1
  48. package/build/src/tools/storage.d.ts +1 -17
  49. package/build/src/tools/storage.d.ts.map +1 -1
  50. package/build/src/tools/storage.js +113 -98
  51. package/build/src/tools/storage.js.map +1 -1
  52. package/build/src/tools/types.d.ts +9 -1
  53. package/build/src/tools/types.d.ts.map +1 -1
  54. package/build/src/tools/types.js +3 -1
  55. package/build/src/tools/types.js.map +1 -1
  56. package/package.json +7 -8
@@ -3,233 +3,268 @@
3
3
  * Mirrors chrome-devtools-mcp tool names: list_pages, select_page, close_page, new_page, navigate_page, resize_page
4
4
  */
5
5
  import { z } from 'zod';
6
- // ---- list_pages ----
7
- export const listPagesSchema = {};
8
- export const listPages = async (_params, driver) => {
9
- const pages = await driver.listPages();
10
- const lines = pages.map(p => ` pageId=${p.pageId} ${p.isSelected ? '* ' : ' '}${p.title} (${p.url})`);
11
- let text = `Open pages (* = selected):\n${lines.join('\n')}`;
12
- const warnings = pages.filter(p => p.warning).map(p => p.warning);
13
- if (warnings.length > 0) {
14
- text += `\n\n⚠️ ${warnings.join('\n')}`;
15
- }
16
- return {
17
- content: [{ type: 'text', text }],
18
- };
19
- };
20
- // ---- select_page ----
21
- export const selectPageSchema = {
22
- pageId: z
23
- .number()
24
- .describe('The ID of the page to select. Call list_pages to get available pages.'),
25
- };
26
- export const selectPage = async (params, driver) => {
27
- await driver.selectPage(params.pageId);
28
- const pages = await driver.listPages();
29
- const lines = pages.map(p => ` pageId=${p.pageId} ${p.isSelected ? '* ' : ' '}${p.title} (${p.url})`);
30
- return {
31
- content: [
32
- {
33
- type: 'text',
34
- text: `Selected page ${params.pageId}.\n\nOpen pages (* = selected):\n${lines.join('\n')}`,
35
- },
36
- ],
37
- };
38
- };
39
- // ---- close_page ----
40
- export const closePageSchema = {
41
- pageId: z
42
- .number()
43
- .describe('The ID of the page to close. Call list_pages to list pages.'),
44
- };
45
- export const closePage = async (params, driver) => {
46
- try {
47
- await driver.closePage(params.pageId);
48
- return {
49
- content: [
50
- {
51
- type: 'text',
52
- text: `Closed page ${params.pageId}.`,
53
- },
54
- ],
55
- };
56
- }
57
- catch (error) {
58
- return {
59
- content: [
60
- {
61
- type: 'text',
62
- text: error instanceof Error ? error.message : String(error),
63
- },
64
- ],
65
- isError: true,
66
- };
67
- }
68
- };
69
- // ---- new_page ----
70
- export const newPageSchema = {
71
- url: z.string().describe('URL to load in a new page.'),
72
- };
73
- export const newPage = async (params, driver) => {
74
- const result = await driver.newPage(params.url);
75
- let text = `Opened new page with URL: ${params.url}`;
76
- if (result.warning) {
77
- text += `\n\n⚠️ ${result.warning}`;
78
- }
79
- return {
80
- content: [{ type: 'text', text }],
81
- };
82
- };
83
- // ---- navigate_page ----
84
- export const navigatePageSchema = {
85
- type: z
86
- .enum(['url', 'back', 'forward', 'reload'])
87
- .optional()
88
- .describe('Navigate the page by URL, back or forward in history, or reload.'),
89
- url: z.string().optional().describe('Target URL (only type=url)'),
90
- };
91
- export const navigatePage = async (params, driver) => {
92
- const type = params.type || (params.url ? 'url' : undefined);
93
- if (!type && !params.url) {
94
- return {
95
- content: [
96
- { type: 'text', text: 'Either URL or a type is required.' },
97
- ],
98
- isError: true,
99
- };
100
- }
101
- try {
102
- switch (type || 'url') {
103
- case 'url':
104
- if (!params.url) {
105
- return {
106
- content: [
107
- {
108
- type: 'text',
109
- text: 'A URL is required for navigation of type=url.',
110
- },
111
- ],
112
- isError: true,
113
- };
114
- }
115
- await driver.navigate(params.url);
116
- return {
117
- content: [
118
- {
119
- type: 'text',
120
- text: `Successfully navigated to ${params.url}.`,
121
- },
122
- ],
123
- };
124
- case 'back':
125
- await driver.goBack();
6
+ import { defineTool } from './types.js';
7
+ export const tools = [
8
+ defineTool({
9
+ name: 'list_pages',
10
+ description: 'Get a list of pages (tabs) open in Safari.',
11
+ schema: {},
12
+ handler: async (_params, driver) => {
13
+ const pages = await driver.listPages();
14
+ const lines = pages.map(p => ` pageId=${p.pageId} ${p.isSelected ? '* ' : ' '}${p.title} (${p.url})`);
15
+ let text = `Open pages (* = selected):\n${lines.join('\n')}`;
16
+ const warnings = pages.filter(p => p.warning).map(p => p.warning);
17
+ if (warnings.length > 0) {
18
+ text += `\n\n⚠️ ${warnings.join('\n')}`;
19
+ }
20
+ return {
21
+ content: [{ type: 'text', text }],
22
+ };
23
+ },
24
+ }),
25
+ defineTool({
26
+ name: 'select_page',
27
+ description: 'Select a page as context for future tool calls.',
28
+ schema: {
29
+ pageId: z
30
+ .number()
31
+ .describe('The ID of the page to select. Call list_pages to get available pages.'),
32
+ },
33
+ handler: async (params, driver) => {
34
+ await driver.selectPage(params.pageId);
35
+ const pages = await driver.listPages();
36
+ const lines = pages.map(p => ` pageId=${p.pageId} ${p.isSelected ? '* ' : ' '}${p.title} (${p.url})`);
37
+ return {
38
+ content: [
39
+ {
40
+ type: 'text',
41
+ text: `Selected page ${params.pageId}.\n\nOpen pages (* = selected):\n${lines.join('\n')}`,
42
+ },
43
+ ],
44
+ };
45
+ },
46
+ }),
47
+ defineTool({
48
+ name: 'close_page',
49
+ description: 'Closes a page by its ID. The last open page cannot be closed.',
50
+ schema: {
51
+ pageId: z
52
+ .number()
53
+ .describe('The ID of the page to close. Call list_pages to list pages.'),
54
+ },
55
+ handler: async (params, driver) => {
56
+ try {
57
+ await driver.closePage(params.pageId);
126
58
  return {
127
59
  content: [
128
60
  {
129
61
  type: 'text',
130
- text: `Successfully navigated back to ${await driver.getCurrentUrl()}.`,
62
+ text: `Closed page ${params.pageId}.`,
131
63
  },
132
64
  ],
133
65
  };
134
- case 'forward':
135
- await driver.goForward();
66
+ }
67
+ catch (error) {
136
68
  return {
137
69
  content: [
138
70
  {
139
71
  type: 'text',
140
- text: `Successfully navigated forward to ${await driver.getCurrentUrl()}.`,
72
+ text: error instanceof Error ? error.message : String(error),
141
73
  },
142
74
  ],
75
+ isError: true,
143
76
  };
144
- case 'reload':
145
- await driver.reload();
77
+ }
78
+ },
79
+ }),
80
+ defineTool({
81
+ name: 'new_page',
82
+ description: 'Open a new tab and load a URL.',
83
+ schema: {
84
+ url: z.string().describe('URL to load in a new page.'),
85
+ },
86
+ handler: async (params, driver) => {
87
+ const result = await driver.newPage(params.url);
88
+ let text = `Opened new page with URL: ${params.url}`;
89
+ if (result.warning) {
90
+ text += `\n\n⚠️ ${result.warning}`;
91
+ }
92
+ return {
93
+ content: [{ type: 'text', text }],
94
+ };
95
+ },
96
+ }),
97
+ defineTool({
98
+ name: 'navigate_page',
99
+ description: 'Go to a URL, or back, forward, or reload.',
100
+ schema: {
101
+ type: z
102
+ .enum(['url', 'back', 'forward', 'reload'])
103
+ .optional()
104
+ .describe('Navigate the page by URL, back or forward in history, or reload.'),
105
+ url: z.string().optional().describe('Target URL (only type=url)'),
106
+ },
107
+ handler: async (params, driver) => {
108
+ const type = params.type || (params.url ? 'url' : undefined);
109
+ if (!type && !params.url) {
146
110
  return {
147
111
  content: [
148
- { type: 'text', text: 'Successfully reloaded the page.' },
112
+ { type: 'text', text: 'Either URL or a type is required.' },
149
113
  ],
114
+ isError: true,
150
115
  };
151
- default:
116
+ }
117
+ try {
118
+ switch (type || 'url') {
119
+ case 'url':
120
+ if (!params.url) {
121
+ return {
122
+ content: [
123
+ {
124
+ type: 'text',
125
+ text: 'A URL is required for navigation of type=url.',
126
+ },
127
+ ],
128
+ isError: true,
129
+ };
130
+ }
131
+ await driver.navigate(params.url);
132
+ return {
133
+ content: [
134
+ {
135
+ type: 'text',
136
+ text: `Successfully navigated to ${params.url}.`,
137
+ },
138
+ ],
139
+ };
140
+ case 'back':
141
+ await driver.goBack();
142
+ return {
143
+ content: [
144
+ {
145
+ type: 'text',
146
+ text: `Successfully navigated back to ${await driver.getCurrentUrl()}.`,
147
+ },
148
+ ],
149
+ };
150
+ case 'forward':
151
+ await driver.goForward();
152
+ return {
153
+ content: [
154
+ {
155
+ type: 'text',
156
+ text: `Successfully navigated forward to ${await driver.getCurrentUrl()}.`,
157
+ },
158
+ ],
159
+ };
160
+ case 'reload':
161
+ await driver.reload();
162
+ return {
163
+ content: [
164
+ {
165
+ type: 'text',
166
+ text: 'Successfully reloaded the page.',
167
+ },
168
+ ],
169
+ };
170
+ default:
171
+ return {
172
+ content: [
173
+ {
174
+ type: 'text',
175
+ text: `Unknown navigation type: ${type}`,
176
+ },
177
+ ],
178
+ isError: true,
179
+ };
180
+ }
181
+ }
182
+ catch (error) {
152
183
  return {
153
184
  content: [
154
- { type: 'text', text: `Unknown navigation type: ${type}` },
185
+ {
186
+ type: 'text',
187
+ text: `Navigation failed: ${error instanceof Error ? error.message : String(error)}`,
188
+ },
155
189
  ],
156
190
  isError: true,
157
191
  };
158
- }
159
- }
160
- catch (error) {
161
- return {
162
- content: [
163
- {
164
- type: 'text',
165
- text: `Navigation failed: ${error instanceof Error ? error.message : String(error)}`,
166
- },
167
- ],
168
- isError: true,
169
- };
170
- }
171
- };
172
- // ---- resize_page ----
173
- export const resizePageSchema = {
174
- width: z.number().describe('Page width'),
175
- height: z.number().describe('Page height'),
176
- };
177
- export const resizePage = async (params, driver) => {
178
- await driver.resizePage(params.width, params.height);
179
- return {
180
- content: [
181
- {
182
- type: 'text',
183
- text: `Resized page to ${params.width}x${params.height}.`,
184
- },
185
- ],
186
- };
187
- };
188
- // ---- handle_dialog ----
189
- export const handleDialogSchema = {
190
- action: z
191
- .enum(['accept', 'dismiss'])
192
- .describe('Whether to dismiss or accept the dialog'),
193
- promptText: z
194
- .string()
195
- .optional()
196
- .describe('Optional prompt text to enter into the dialog.'),
197
- };
198
- export const handleDialog = async (params, driver) => {
199
- // Safari WebDriver handles alerts via the driver's switchTo().alert() API
200
- try {
201
- const d = await driver.ensureDriver();
202
- const alert = await d.switchTo().alert();
203
- if (params.promptText) {
204
- await alert.sendKeys(params.promptText);
205
- }
206
- if (params.action === 'accept') {
207
- await alert.accept();
192
+ }
193
+ },
194
+ }),
195
+ defineTool({
196
+ name: 'resize_page',
197
+ description: "Resizes the selected page's window so that the page has specified dimensions.",
198
+ schema: {
199
+ width: z.number().describe('Page width'),
200
+ height: z.number().describe('Page height'),
201
+ },
202
+ handler: async (params, driver) => {
203
+ await driver.resizePage(params.width, params.height);
208
204
  return {
209
205
  content: [
210
- { type: 'text', text: 'Successfully accepted the dialog.' },
206
+ {
207
+ type: 'text',
208
+ text: `Resized page to ${params.width}x${params.height}.`,
209
+ },
211
210
  ],
212
211
  };
213
- }
214
- else {
215
- await alert.dismiss();
216
- return {
217
- content: [
218
- { type: 'text', text: 'Successfully dismissed the dialog.' },
219
- ],
220
- };
221
- }
222
- }
223
- catch (error) {
224
- return {
225
- content: [
226
- {
227
- type: 'text',
228
- text: `No open dialog found or error handling dialog: ${error instanceof Error ? error.message : String(error)}`,
229
- },
230
- ],
231
- isError: true,
232
- };
233
- }
234
- };
212
+ },
213
+ }),
214
+ defineTool({
215
+ name: 'handle_dialog',
216
+ description: 'If a browser dialog was opened, use this command to handle it.',
217
+ schema: {
218
+ action: z
219
+ .enum(['accept', 'dismiss'])
220
+ .describe('Whether to dismiss or accept the dialog'),
221
+ promptText: z
222
+ .string()
223
+ .optional()
224
+ .describe('Optional prompt text to enter into the dialog.'),
225
+ },
226
+ handler: async (params, driver) => {
227
+ try {
228
+ const d = await driver.ensureDriver();
229
+ const alert = await d.switchTo().alert();
230
+ if (params.promptText) {
231
+ await alert.sendKeys(params.promptText);
232
+ }
233
+ if (params.action === 'accept') {
234
+ await alert.accept();
235
+ return {
236
+ content: [
237
+ {
238
+ type: 'text',
239
+ text: 'Successfully accepted the dialog.',
240
+ },
241
+ ],
242
+ };
243
+ }
244
+ else {
245
+ await alert.dismiss();
246
+ return {
247
+ content: [
248
+ {
249
+ type: 'text',
250
+ text: 'Successfully dismissed the dialog.',
251
+ },
252
+ ],
253
+ };
254
+ }
255
+ }
256
+ catch (error) {
257
+ return {
258
+ content: [
259
+ {
260
+ type: 'text',
261
+ text: `No open dialog found or error handling dialog: ${error instanceof Error ? error.message : String(error)}`,
262
+ },
263
+ ],
264
+ isError: true,
265
+ };
266
+ }
267
+ },
268
+ }),
269
+ ];
235
270
  //# sourceMappingURL=pages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../src/tools/pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../src/tools/pages.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,5 @@
6
6
  * fullPage screenshots natively. Element screenshots are supported via UIDs.
7
7
  */
8
8
  import { z } from 'zod';
9
- import type { ToolHandler } from './types.js';
10
- export declare const takeScreenshotSchema: {
11
- uid: z.ZodOptional<z.ZodString>;
12
- filePath: z.ZodOptional<z.ZodString>;
13
- };
14
- export declare const takeScreenshot: ToolHandler;
9
+ export declare const tools: import("./types.js").ToolDef<z.ZodRawShape>[];
15
10
  //# sourceMappingURL=screenshot.d.ts.map
@@ -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,WAyD5B,CAAC"}
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;AAItB,eAAO,MAAM,KAAK,+CA6EjB,CAAC"}