@pyrokine/mcp-chrome 1.0.0 → 1.1.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.
Files changed (103) hide show
  1. package/README.md +176 -86
  2. package/dist/cdp/client.d.ts +10 -0
  3. package/dist/cdp/client.d.ts.map +1 -1
  4. package/dist/cdp/client.js +48 -18
  5. package/dist/cdp/client.js.map +1 -1
  6. package/dist/cdp/launcher.d.ts.map +1 -1
  7. package/dist/cdp/launcher.js +14 -4
  8. package/dist/cdp/launcher.js.map +1 -1
  9. package/dist/core/auto-wait.d.ts +7 -0
  10. package/dist/core/auto-wait.d.ts.map +1 -1
  11. package/dist/core/auto-wait.js +14 -4
  12. package/dist/core/auto-wait.js.map +1 -1
  13. package/dist/core/errors.d.ts +1 -0
  14. package/dist/core/errors.d.ts.map +1 -1
  15. package/dist/core/errors.js +32 -7
  16. package/dist/core/errors.js.map +1 -1
  17. package/dist/core/index.d.ts +1 -0
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +1 -0
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/locator.d.ts +12 -0
  22. package/dist/core/locator.d.ts.map +1 -1
  23. package/dist/core/locator.js +73 -10
  24. package/dist/core/locator.js.map +1 -1
  25. package/dist/core/session.d.ts +66 -10
  26. package/dist/core/session.d.ts.map +1 -1
  27. package/dist/core/session.js +261 -60
  28. package/dist/core/session.js.map +1 -1
  29. package/dist/core/types.d.ts +11 -0
  30. package/dist/core/types.d.ts.map +1 -1
  31. package/dist/core/types.js +5 -2
  32. package/dist/core/types.js.map +1 -1
  33. package/dist/core/unified-session.d.ts +431 -0
  34. package/dist/core/unified-session.d.ts.map +1 -0
  35. package/dist/core/unified-session.js +1010 -0
  36. package/dist/core/unified-session.js.map +1 -0
  37. package/dist/extension/bridge.d.ts +222 -0
  38. package/dist/extension/bridge.d.ts.map +1 -0
  39. package/dist/extension/bridge.js +421 -0
  40. package/dist/extension/bridge.js.map +1 -0
  41. package/dist/extension/http-server.d.ts +58 -0
  42. package/dist/extension/http-server.d.ts.map +1 -0
  43. package/dist/extension/http-server.js +313 -0
  44. package/dist/extension/http-server.js.map +1 -0
  45. package/dist/extension/index.d.ts +7 -0
  46. package/dist/extension/index.d.ts.map +1 -0
  47. package/dist/extension/index.js +6 -0
  48. package/dist/extension/index.js.map +1 -0
  49. package/dist/extension/native-host-installer.d.ts +21 -0
  50. package/dist/extension/native-host-installer.d.ts.map +1 -0
  51. package/dist/extension/native-host-installer.js +147 -0
  52. package/dist/extension/native-host-installer.js.map +1 -0
  53. package/dist/extension/socket-server.d.ts +32 -0
  54. package/dist/extension/socket-server.d.ts.map +1 -0
  55. package/dist/extension/socket-server.js +177 -0
  56. package/dist/extension/socket-server.js.map +1 -0
  57. package/dist/extension/ws-server.d.ts +40 -0
  58. package/dist/extension/ws-server.d.ts.map +1 -0
  59. package/dist/extension/ws-server.js +246 -0
  60. package/dist/extension/ws-server.js.map +1 -0
  61. package/dist/index.js +6 -4
  62. package/dist/index.js.map +1 -1
  63. package/dist/native-host/index.js +280 -0
  64. package/dist/native-host/mcp-chrome-host +2 -0
  65. package/dist/tools/browse.d.ts +4 -0
  66. package/dist/tools/browse.d.ts.map +1 -1
  67. package/dist/tools/browse.js +137 -25
  68. package/dist/tools/browse.js.map +1 -1
  69. package/dist/tools/cookies.d.ts +33 -25
  70. package/dist/tools/cookies.d.ts.map +1 -1
  71. package/dist/tools/cookies.js +124 -38
  72. package/dist/tools/cookies.js.map +1 -1
  73. package/dist/tools/evaluate.d.ts +15 -0
  74. package/dist/tools/evaluate.d.ts.map +1 -1
  75. package/dist/tools/evaluate.js +87 -23
  76. package/dist/tools/evaluate.js.map +1 -1
  77. package/dist/tools/extract.d.ts +28 -2
  78. package/dist/tools/extract.d.ts.map +1 -1
  79. package/dist/tools/extract.js +319 -198
  80. package/dist/tools/extract.js.map +1 -1
  81. package/dist/tools/input.d.ts +30 -0
  82. package/dist/tools/input.d.ts.map +1 -1
  83. package/dist/tools/input.js +167 -19
  84. package/dist/tools/input.js.map +1 -1
  85. package/dist/tools/logs.d.ts +4 -0
  86. package/dist/tools/logs.d.ts.map +1 -1
  87. package/dist/tools/logs.js +102 -68
  88. package/dist/tools/logs.js.map +1 -1
  89. package/dist/tools/manage.d.ts +16 -0
  90. package/dist/tools/manage.d.ts.map +1 -1
  91. package/dist/tools/manage.js +215 -10
  92. package/dist/tools/manage.js.map +1 -1
  93. package/dist/tools/schema.d.ts +86 -13
  94. package/dist/tools/schema.d.ts.map +1 -1
  95. package/dist/tools/schema.js +240 -1
  96. package/dist/tools/schema.js.map +1 -1
  97. package/dist/tools/wait.d.ts +30 -0
  98. package/dist/tools/wait.d.ts.map +1 -1
  99. package/dist/tools/wait.js +329 -115
  100. package/dist/tools/wait.js.map +1 -1
  101. package/package.json +4 -5
  102. package/scripts/start-chrome-headless.sh +0 -37
  103. package/scripts/start-chrome.sh +0 -41
@@ -2,10 +2,10 @@
2
2
  * cookies 工具
3
3
  *
4
4
  * Cookie 管理:
5
- * - get: 获取 cookies
5
+ * - get: 获取 cookies(支持多种过滤条件)
6
6
  * - set: 设置 cookie
7
- * - delete: 删除 cookie
8
- * - clear: 清空所有 cookies
7
+ * - delete: 删除指定 cookie
8
+ * - clear: 清空 cookies(支持按域名过滤)
9
9
  */
10
10
  /**
11
11
  * cookies 工具定义
@@ -21,37 +21,45 @@ export declare const cookiesToolDefinition: {
21
21
  enum: string[];
22
22
  description: string;
23
23
  };
24
+ url: {
25
+ type: string;
26
+ description: string;
27
+ };
24
28
  name: {
25
29
  type: string;
26
30
  description: string;
27
31
  };
32
+ domain: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ path: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ secure: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ session: {
45
+ type: string;
46
+ description: string;
47
+ };
28
48
  value: {
29
49
  type: string;
30
50
  description: string;
31
51
  };
32
- options: {
52
+ httpOnly: {
53
+ type: string;
54
+ description: string;
55
+ };
56
+ sameSite: {
57
+ type: string;
58
+ enum: string[];
59
+ description: string;
60
+ };
61
+ expirationDate: {
33
62
  type: string;
34
- properties: {
35
- domain: {
36
- type: string;
37
- };
38
- path: {
39
- type: string;
40
- };
41
- expires: {
42
- type: string;
43
- };
44
- httpOnly: {
45
- type: string;
46
- };
47
- secure: {
48
- type: string;
49
- };
50
- sameSite: {
51
- type: string;
52
- enum: string[];
53
- };
54
- };
55
63
  description: string;
56
64
  };
57
65
  output: {
@@ -1 +1 @@
1
- {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/tools/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCjC,CAAA;AAwBD;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1D,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CAwKD"}
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/tools/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DjC,CAAA;AAyBD;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1D,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CAiPD"}
@@ -2,14 +2,14 @@
2
2
  * cookies 工具
3
3
  *
4
4
  * Cookie 管理:
5
- * - get: 获取 cookies
5
+ * - get: 获取 cookies(支持多种过滤条件)
6
6
  * - set: 设置 cookie
7
- * - delete: 删除 cookie
8
- * - clear: 清空所有 cookies
7
+ * - delete: 删除指定 cookie
8
+ * - clear: 清空 cookies(支持按域名过滤)
9
9
  */
10
10
  import { writeFile } from 'fs/promises';
11
11
  import { z } from 'zod';
12
- import { formatErrorResponse, getSession } from '../core/index.js';
12
+ import { formatErrorResponse, getUnifiedSession } from '../core/index.js';
13
13
  /**
14
14
  * cookies 工具定义
15
15
  */
@@ -24,26 +24,50 @@ export const cookiesToolDefinition = {
24
24
  enum: ['get', 'set', 'delete', 'clear'],
25
25
  description: '操作类型',
26
26
  },
27
+ // 通用过滤参数(get/clear)
28
+ url: {
29
+ type: 'string',
30
+ description: 'URL 过滤(get/clear/set/delete)',
31
+ },
27
32
  name: {
28
33
  type: 'string',
29
- description: 'Cookie 名(get/set/delete',
34
+ description: 'Cookie 名称(get/set/delete 必填)',
35
+ },
36
+ domain: {
37
+ type: 'string',
38
+ description: '域名过滤(get/clear)',
39
+ },
40
+ path: {
41
+ type: 'string',
42
+ description: '路径过滤(get)或设置路径(set)',
43
+ },
44
+ secure: {
45
+ type: 'boolean',
46
+ description: '只返回 secure cookies(get)或设置 secure 属性(set)',
47
+ },
48
+ session: {
49
+ type: 'boolean',
50
+ description: '只返回会话 cookies(get)',
30
51
  },
52
+ // set 专用参数
31
53
  value: {
32
54
  type: 'string',
33
55
  description: 'Cookie 值(set)',
34
56
  },
35
- options: {
36
- type: 'object',
37
- properties: {
38
- domain: { type: 'string' },
39
- path: { type: 'string' },
40
- expires: { type: 'number' },
41
- httpOnly: { type: 'boolean' },
42
- secure: { type: 'boolean' },
43
- sameSite: { type: 'string', enum: ['Strict', 'Lax', 'None'] },
44
- },
45
- description: 'Cookie 选项(set)',
57
+ httpOnly: {
58
+ type: 'boolean',
59
+ description: 'httpOnly 属性(set)',
60
+ },
61
+ sameSite: {
62
+ type: 'string',
63
+ enum: ['Strict', 'Lax', 'None'],
64
+ description: 'SameSite 属性(set)',
65
+ },
66
+ expirationDate: {
67
+ type: 'number',
68
+ description: '过期时间戳(set)',
46
69
  },
70
+ // 输出
47
71
  output: {
48
72
  type: 'string',
49
73
  description: '输出文件路径(get)。若指定,cookies 导出为 JSON 文件',
@@ -57,18 +81,19 @@ export const cookiesToolDefinition = {
57
81
  */
58
82
  const cookiesSchema = z.object({
59
83
  action: z.enum(['get', 'set', 'delete', 'clear']),
84
+ // 通用过滤参数
85
+ url: z.string().optional(),
60
86
  name: z.string().optional(),
87
+ domain: z.string().optional(),
88
+ path: z.string().optional(),
89
+ secure: z.boolean().optional(),
90
+ session: z.boolean().optional(),
91
+ // set 专用参数
61
92
  value: z.string().optional(),
62
- options: z
63
- .object({
64
- domain: z.string().optional(),
65
- path: z.string().optional(),
66
- expires: z.number().optional(),
67
- httpOnly: z.boolean().optional(),
68
- secure: z.boolean().optional(),
69
- sameSite: z.enum(['Strict', 'Lax', 'None']).optional(),
70
- })
71
- .optional(),
93
+ httpOnly: z.boolean().optional(),
94
+ sameSite: z.enum(['Strict', 'Lax', 'None']).optional(),
95
+ expirationDate: z.number().optional(),
96
+ // 输出
72
97
  output: z.string().optional(),
73
98
  });
74
99
  /**
@@ -77,16 +102,26 @@ const cookiesSchema = z.object({
77
102
  export async function handleCookies(params) {
78
103
  try {
79
104
  const args = cookiesSchema.parse(params);
80
- const session = getSession();
105
+ const unifiedSession = getUnifiedSession();
81
106
  switch (args.action) {
82
107
  case 'get': {
83
- const cookies = await session.getCookies();
84
- // 如果指定了 name,只返回匹配的 cookie
85
- const result = args.name
86
- ? cookies.filter((c) => c.name === args.name)
87
- : cookies;
108
+ // 构建过滤条件
109
+ const filter = {};
110
+ if (args.url)
111
+ filter.url = args.url;
112
+ if (args.name)
113
+ filter.name = args.name;
114
+ if (args.domain)
115
+ filter.domain = args.domain;
116
+ if (args.path)
117
+ filter.path = args.path;
118
+ if (args.secure !== undefined)
119
+ filter.secure = args.secure;
120
+ if (args.session !== undefined)
121
+ filter.session = args.session;
122
+ const cookies = await unifiedSession.getCookies(filter);
88
123
  if (args.output) {
89
- await writeFile(args.output, JSON.stringify(result, null, 2), 'utf-8');
124
+ await writeFile(args.output, JSON.stringify(cookies, null, 2), 'utf-8');
90
125
  return {
91
126
  content: [
92
127
  {
@@ -95,7 +130,7 @@ export async function handleCookies(params) {
95
130
  success: true,
96
131
  action: 'get',
97
132
  output: args.output,
98
- count: result.length,
133
+ count: cookies.length,
99
134
  }),
100
135
  },
101
136
  ],
@@ -108,13 +143,30 @@ export async function handleCookies(params) {
108
143
  text: JSON.stringify({
109
144
  success: true,
110
145
  action: 'get',
111
- cookies: result,
146
+ count: cookies.length,
147
+ cookies,
112
148
  }, null, 2),
113
149
  },
114
150
  ],
115
151
  };
116
152
  }
117
153
  case 'set': {
154
+ if (!args.url) {
155
+ return {
156
+ content: [
157
+ {
158
+ type: 'text',
159
+ text: JSON.stringify({
160
+ error: {
161
+ code: 'INVALID_ARGUMENT',
162
+ message: '设置 cookie 需要 url 参数',
163
+ },
164
+ }),
165
+ },
166
+ ],
167
+ isError: true,
168
+ };
169
+ }
118
170
  if (!args.name) {
119
171
  return {
120
172
  content: [
@@ -147,7 +199,15 @@ export async function handleCookies(params) {
147
199
  isError: true,
148
200
  };
149
201
  }
150
- await session.setCookie(args.name, args.value, args.options);
202
+ await unifiedSession.setCookie(args.name, args.value, {
203
+ url: args.url,
204
+ domain: args.domain,
205
+ path: args.path,
206
+ secure: args.secure,
207
+ httpOnly: args.httpOnly,
208
+ sameSite: args.sameSite,
209
+ expirationDate: args.expirationDate,
210
+ });
151
211
  return {
152
212
  content: [
153
213
  {
@@ -155,6 +215,7 @@ export async function handleCookies(params) {
155
215
  text: JSON.stringify({
156
216
  success: true,
157
217
  action: 'set',
218
+ url: args.url,
158
219
  name: args.name,
159
220
  }),
160
221
  },
@@ -162,6 +223,22 @@ export async function handleCookies(params) {
162
223
  };
163
224
  }
164
225
  case 'delete': {
226
+ if (!args.url) {
227
+ return {
228
+ content: [
229
+ {
230
+ type: 'text',
231
+ text: JSON.stringify({
232
+ error: {
233
+ code: 'INVALID_ARGUMENT',
234
+ message: '删除 cookie 需要 url 参数',
235
+ },
236
+ }),
237
+ },
238
+ ],
239
+ isError: true,
240
+ };
241
+ }
165
242
  if (!args.name) {
166
243
  return {
167
244
  content: [
@@ -178,7 +255,7 @@ export async function handleCookies(params) {
178
255
  isError: true,
179
256
  };
180
257
  }
181
- await session.deleteCookie(args.name);
258
+ await unifiedSession.deleteCookie(args.url, args.name);
182
259
  return {
183
260
  content: [
184
261
  {
@@ -186,6 +263,7 @@ export async function handleCookies(params) {
186
263
  text: JSON.stringify({
187
264
  success: true,
188
265
  action: 'delete',
266
+ url: args.url,
189
267
  name: args.name,
190
268
  }),
191
269
  },
@@ -193,7 +271,13 @@ export async function handleCookies(params) {
193
271
  };
194
272
  }
195
273
  case 'clear': {
196
- await session.clearCookies();
274
+ // 构建过滤条件
275
+ const filter = {};
276
+ if (args.url)
277
+ filter.url = args.url;
278
+ if (args.domain)
279
+ filter.domain = args.domain;
280
+ const result = await unifiedSession.clearCookies(Object.keys(filter).length > 0 ? filter : undefined);
197
281
  return {
198
282
  content: [
199
283
  {
@@ -201,6 +285,8 @@ export async function handleCookies(params) {
201
285
  text: JSON.stringify({
202
286
  success: true,
203
287
  action: 'clear',
288
+ filter: Object.keys(filter).length > 0 ? filter : 'all',
289
+ count: result.count,
204
290
  }),
205
291
  },
206
292
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/tools/cookies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/tools/cookies.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,21 @@ export declare const evaluateToolDefinition: {
28
28
  type: string;
29
29
  description: string;
30
30
  };
31
+ mode: {
32
+ type: string;
33
+ enum: string[];
34
+ description: string;
35
+ };
36
+ tabId: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ frame: {
41
+ oneOf: {
42
+ type: string;
43
+ }[];
44
+ description: string;
45
+ };
31
46
  };
32
47
  required: string[];
33
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;CAyBlC,CAAA;AAcD;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3D,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CA4CD"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsClC,CAAA;AAeD;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC3D,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CAkFD"}
@@ -3,9 +3,12 @@
3
3
  *
4
4
  * 在页面上下文执行 JavaScript
5
5
  */
6
+ import { randomUUID } from 'crypto';
6
7
  import { writeFile } from 'fs/promises';
8
+ import { tmpdir } from 'os';
9
+ import { join } from 'path';
7
10
  import { z } from 'zod';
8
- import { formatErrorResponse, getSession } from '../core/index.js';
11
+ import { formatErrorResponse, getUnifiedSession } from '../core/index.js';
9
12
  /**
10
13
  * evaluate 工具定义
11
14
  */
@@ -21,15 +24,28 @@ export const evaluateToolDefinition = {
21
24
  },
22
25
  args: {
23
26
  type: 'array',
24
- description: '传递给脚本的参数',
27
+ description: '传递给脚本的参数。使用时 script 必须是函数表达式,如 "(x, y) => x + y",参数通过 IIFE 调用传入',
25
28
  },
26
29
  output: {
27
30
  type: 'string',
28
- description: '输出文件路径(可选)。若指定,结果序列化为 JSON 写入文件',
31
+ description: '输出文件路径(可选)。若指定,字符串结果直接写入原始文本,其他类型序列化为 JSON',
29
32
  },
30
33
  timeout: {
31
34
  type: 'number',
32
- description: '脚本执行超时',
35
+ description: '超时(毫秒)。Extension 模式作为端到端预算(含传输);CDP 模式作为脚本执行超时',
36
+ },
37
+ mode: {
38
+ type: 'string',
39
+ enum: ['stealth', 'precise'],
40
+ description: '执行模式。precise(默认)使用 debugger API,可绕过 CSP;stealth 使用 JS 注入,不触发调试提示但受 CSP 限制',
41
+ },
42
+ tabId: {
43
+ type: 'string',
44
+ description: '目标 Tab ID(可选,仅 Extension 模式)。不指定则使用当前 attach 的 tab。可操作非当前 attach 的 tab。CDP 模式下忽略此参数',
45
+ },
46
+ frame: {
47
+ oneOf: [{ type: 'string' }, { type: 'number' }],
48
+ description: 'iframe 定位(可选,仅 Extension 模式)。CSS 选择器(如 "iframe#main")或索引(如 0)。不指定则在主框架执行',
33
49
  },
34
50
  },
35
51
  required: ['script'],
@@ -43,6 +59,9 @@ const evaluateSchema = z.object({
43
59
  args: z.array(z.unknown()).optional(),
44
60
  output: z.string().optional(),
45
61
  timeout: z.number().optional(),
62
+ mode: z.enum(['stealth', 'precise']).optional(),
63
+ tabId: z.string().optional(),
64
+ frame: z.union([z.string(), z.number()]).optional(),
46
65
  });
47
66
  /**
48
67
  * evaluate 工具处理器
@@ -50,35 +69,80 @@ const evaluateSchema = z.object({
50
69
  export async function handleEvaluate(params) {
51
70
  try {
52
71
  const args = evaluateSchema.parse(params);
53
- const session = getSession();
54
- const result = await session.evaluate(args.script, args.args, args.timeout);
55
- if (args.output) {
56
- await writeFile(args.output, JSON.stringify(result, null, 2), 'utf-8');
72
+ const unifiedSession = getUnifiedSession();
73
+ return await unifiedSession.withTabId(args.tabId, async () => {
74
+ return await unifiedSession.withFrame(args.frame, async () => {
75
+ const result = await unifiedSession.evaluate(args.script, args.mode, args.timeout, args.args);
76
+ const normalizedResult = result === undefined ? null : result;
77
+ if (args.output) {
78
+ // string 类型直接写入原始文本,其他类型 JSON 序列化
79
+ const content = typeof result === 'string' ? result : JSON.stringify(normalizedResult, null, 2);
80
+ await writeFile(args.output, content, 'utf-8');
81
+ return {
82
+ content: [
83
+ {
84
+ type: 'text',
85
+ text: JSON.stringify({
86
+ success: true,
87
+ output: args.output,
88
+ }),
89
+ },
90
+ ],
91
+ };
92
+ }
93
+ const serialized = JSON.stringify({ success: true, result: normalizedResult }, null, 2);
94
+ // 检测结果大小,超过 100KB 自动保存到文件
95
+ if (serialized.length > 100_000) {
96
+ const suffix = typeof result === 'string' ? 'txt' : 'json';
97
+ const tmpPath = join(tmpdir(), `mcp-chrome-eval-${randomUUID()}.${suffix}`);
98
+ const fileContent = typeof result === 'string' ? result : JSON.stringify(normalizedResult, null, 2);
99
+ await writeFile(tmpPath, fileContent, 'utf-8');
100
+ return {
101
+ content: [
102
+ {
103
+ type: 'text',
104
+ text: JSON.stringify({
105
+ success: true,
106
+ autoSaved: true,
107
+ path: tmpPath,
108
+ size: fileContent.length,
109
+ hint: '结果过大已自动保存到文件,请使用 Read 工具读取',
110
+ }),
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ return {
116
+ content: [
117
+ {
118
+ type: 'text',
119
+ text: serialized,
120
+ },
121
+ ],
122
+ };
123
+ });
124
+ }); // withTabId
125
+ }
126
+ catch (error) {
127
+ // 检测 CSP 错误,提示使用 precise 模式
128
+ const errorMessage = error instanceof Error ? error.message : String(error);
129
+ if (errorMessage.includes('CSP') || errorMessage.includes('Content Security Policy') || errorMessage.includes('unsafe-eval')) {
57
130
  return {
58
131
  content: [
59
132
  {
60
133
  type: 'text',
61
134
  text: JSON.stringify({
62
- success: true,
63
- output: args.output,
135
+ error: {
136
+ code: 'CSP_BLOCKED',
137
+ message: 'CSP 限制:此页面禁止动态代码执行',
138
+ suggestion: '请添加 mode="precise" 参数使用 debugger API 绕过 CSP(会显示调试提示)',
139
+ },
64
140
  }),
65
141
  },
66
142
  ],
143
+ isError: true,
67
144
  };
68
145
  }
69
- return {
70
- content: [
71
- {
72
- type: 'text',
73
- text: JSON.stringify({
74
- success: true,
75
- result,
76
- }, null, 2),
77
- },
78
- ],
79
- };
80
- }
81
- catch (error) {
82
146
  return formatErrorResponse(error);
83
147
  }
84
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAA;AACrB,OAAO,EAAC,mBAAmB,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE;QACT,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACR,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,eAAe;aAC/B;YACD,IAAI,EAAE;gBACF,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,UAAU;aAC1B;YACD,MAAM,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;aACjD;YACD,OAAO,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,QAAQ;aACxB;SACJ;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACvB;CACJ,CAAA;AAED;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAA;AAIlC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAe;IAIhD,IAAI,CAAC;QACD,MAAM,IAAI,GAAM,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;QAE5B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAE3E,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,SAAS,CACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAC/B,OAAO,CACV,CAAA;YACD,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACI,OAAO,EAAE,IAAI;4BACb,MAAM,EAAE,IAAI,CAAC,MAAM;yBACtB,CAAC;qBAC1B;iBACJ;aACJ,CAAA;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAChB;wBACI,OAAO,EAAE,IAAI;wBACb,MAAM;qBACT,EACD,IAAI,EACJ,CAAC,CACJ;iBACJ;aACJ;SACJ,CAAA;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/tools/evaluate.ts"],"names":[],"mappings":"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"}
@@ -144,6 +144,26 @@ export declare const extractToolDefinition: {
144
144
  };
145
145
  readonly required: readonly ["css"];
146
146
  readonly additionalProperties: false;
147
+ }, {
148
+ readonly type: "object";
149
+ readonly title: "CSS + 文本组合定位";
150
+ readonly description: "通过 CSS 选择器 + 文本内容组合定位(先 CSS 筛选,再按文本过滤)";
151
+ readonly properties: {
152
+ readonly css: {
153
+ readonly type: "string";
154
+ readonly description: "CSS 选择器";
155
+ };
156
+ readonly text: {
157
+ readonly type: "string";
158
+ readonly description: "文本内容";
159
+ };
160
+ readonly exact: {
161
+ readonly type: "boolean";
162
+ readonly description: "是否精确匹配(默认 false)";
163
+ };
164
+ };
165
+ readonly required: readonly ["css", "text"];
166
+ readonly additionalProperties: false;
147
167
  }, {
148
168
  readonly type: "object";
149
169
  readonly title: "XPath 定位";
@@ -182,11 +202,11 @@ export declare const extractToolDefinition: {
182
202
  type: string;
183
203
  description: string;
184
204
  };
185
- selector: {
205
+ output: {
186
206
  type: string;
187
207
  description: string;
188
208
  };
189
- output: {
209
+ tabId: {
190
210
  type: string;
191
211
  description: string;
192
212
  };
@@ -194,6 +214,12 @@ export declare const extractToolDefinition: {
194
214
  type: string;
195
215
  description: string;
196
216
  };
217
+ frame: {
218
+ oneOf: {
219
+ type: string;
220
+ }[];
221
+ description: string;
222
+ };
197
223
  };
198
224
  required: string[];
199
225
  };
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCjC,CAAA;AAiBD;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1D,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CA2MD"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CjC,CAAA;AAkBD;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1D,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC,CAgOD"}