@@ -124,6 +124,15 @@ async function ensureBrowser() {
124124 return page ! ;
125125}
126126
127+ declare global {
128+ interface Window {
129+ mcpHelper: {
130+ logs: string [ ] ,
131+ originalConsole : Partial < typeof console > ,
132+ }
133+ }
134+ }
135+
127136async function handleToolCall ( name : string , args : any ) : Promise < CallToolResult > {
128137 const page = await ensureBrowser ( ) ;
129138
@@ -263,32 +272,34 @@ async function handleToolCall(name: string, args: any): Promise<CallToolResult>
263272
264273 case "puppeteer_evaluate" :
265274 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+ } ;
269280
270281 [ 'log' , 'info' , 'warn' , 'error' ] . forEach ( method => {
271282 ( 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 ) ;
274285 } ;
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+ } ) ;
286297
287298 return {
288299 content : [
289300 {
290301 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' ) } ` ,
292303 } ,
293304 ] ,
294305 isError : false ,
@@ -387,4 +398,4 @@ async function runServer() {
387398 await server . connect ( transport ) ;
388399}
389400
390- runServer ( ) . catch ( console . error ) ;
401+ runServer ( ) . catch ( console . error ) ;
0 commit comments