@@ -124,6 +124,15 @@ async function ensureBrowser() {
124
124
return page ! ;
125
125
}
126
126
127
+ declare global {
128
+ interface Window {
129
+ mcpHelper: {
130
+ logs: string [ ] ,
131
+ originalConsole : Partial < typeof console > ,
132
+ }
133
+ }
134
+ }
135
+
127
136
async function handleToolCall ( name : string , args : any ) : Promise < CallToolResult > {
128
137
const page = await ensureBrowser ( ) ;
129
138
@@ -263,32 +272,34 @@ async function handleToolCall(name: string, args: any): Promise<CallToolResult>
263
272
264
273
case "puppeteer_evaluate" :
265
274
try {
266
- const result = await page . evaluate ( ( script ) => {
267
- const logs : string [ ] = [ ] ;
268
- const originalConsole = { ...console } ;
275
+ await page . evaluate ( ( ) => {
276
+ window . mcpHelper = {
277
+ logs : [ ] ,
278
+ originalConsole : { ...console } ,
279
+ } ;
269
280
270
281
[ 'log' , 'info' , 'warn' , 'error' ] . forEach ( method => {
271
282
( console as any ) [ method ] = ( ...args : any [ ] ) => {
272
- logs . push ( `[${ method } ] ${ args . join ( ' ' ) } ` ) ;
273
- ( originalConsole as any ) [ method ] ( ...args ) ;
283
+ window . mcpHelper . logs . push ( `[${ method } ] ${ args . join ( ' ' ) } ` ) ;
284
+ ( window . mcpHelper . originalConsole as any ) [ method ] ( ...args ) ;
274
285
} ;
275
- } ) ;
276
-
277
- try {
278
- const result = eval ( script ) ;
279
- Object . assign ( console , originalConsole ) ;
280
- return { result , logs } ;
281
- } catch ( error ) {
282
- Object . assign ( console , originalConsole ) ;
283
- throw error ;
284
- }
285
- } , args . script ) ;
286
+ } ) ;
287
+ } ) ;
288
+
289
+ const result = await page . evaluate ( args . script ) ;
290
+
291
+ const logs = await page . evaluate ( ( ) => {
292
+ Object . assign ( console , window . mcpHelper . originalConsole ) ;
293
+ const logs = window . mcpHelper . logs ;
294
+ delete ( window as any ) . mcpHelper ;
295
+ return logs ;
296
+ } ) ;
286
297
287
298
return {
288
299
content : [
289
300
{
290
301
type : "text" ,
291
- text : `Execution result:\n${ JSON . stringify ( result . result , null , 2 ) } \n\nConsole output:\n${ result . logs . join ( '\n' ) } ` ,
302
+ text : `Execution result:\n${ JSON . stringify ( result , null , 2 ) } \n\nConsole output:\n${ logs . join ( '\n' ) } ` ,
292
303
} ,
293
304
] ,
294
305
isError : false ,
@@ -387,4 +398,4 @@ async function runServer() {
387
398
await server . connect ( transport ) ;
388
399
}
389
400
390
- runServer ( ) . catch ( console . error ) ;
401
+ runServer ( ) . catch ( console . error ) ;
0 commit comments