Skip to content

Commit 92fc214

Browse files
Merge pull request #149 from matipojo/fix-puppeteer-async-eval
fix(puppeteer): enable async code execution in puppeteer_evaluate tool
2 parents 370198d + 695aa90 commit 92fc214

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

src/puppeteer/index.ts

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
127136
async 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

Comments
 (0)