mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-26 15:55:25 +02:00
fix(fetch): fix puppeteer server to allow evaluate async functions
This commit is contained in:
@@ -124,6 +124,15 @@ async function ensureBrowser() {
|
||||
return page!;
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
mcpHelper: {
|
||||
logs: string[],
|
||||
originalConsole: Partial<typeof console>,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function handleToolCall(name: string, args: any): Promise<{ toolResult: CallToolResult }> {
|
||||
const page = await ensureBrowser();
|
||||
|
||||
@@ -285,33 +294,35 @@ async function handleToolCall(name: string, args: any): Promise<{ toolResult: Ca
|
||||
|
||||
case "puppeteer_evaluate":
|
||||
try {
|
||||
const result = await page.evaluate((script) => {
|
||||
const logs: string[] = [];
|
||||
const originalConsole = { ...console };
|
||||
await page.evaluate(() => {
|
||||
window.mcpHelper = {
|
||||
logs: [],
|
||||
originalConsole: { ...console },
|
||||
};
|
||||
|
||||
['log', 'info', 'warn', 'error'].forEach(method => {
|
||||
(console as any)[method] = (...args: any[]) => {
|
||||
logs.push(`[${method}] ${args.join(' ')}`);
|
||||
(originalConsole as any)[method](...args);
|
||||
window.mcpHelper.logs.push(`[${method}] ${args.join(' ')}`);
|
||||
(window.mcpHelper.originalConsole as any)[method](...args);
|
||||
};
|
||||
});
|
||||
} );
|
||||
} );
|
||||
|
||||
try {
|
||||
const result = eval(script);
|
||||
Object.assign(console, originalConsole);
|
||||
return { result, logs };
|
||||
} catch (error) {
|
||||
Object.assign(console, originalConsole);
|
||||
throw error;
|
||||
}
|
||||
}, args.script);
|
||||
const result = await page.evaluate( args.script );
|
||||
|
||||
const logs = await page.evaluate(() => {
|
||||
Object.assign(console, window.mcpHelper.originalConsole);
|
||||
const logs = window.mcpHelper.logs;
|
||||
delete ( window.mcpHelper as any).logs;
|
||||
return logs;
|
||||
});
|
||||
|
||||
return {
|
||||
toolResult: {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: `Execution result:\n${JSON.stringify(result.result, null, 2)}\n\nConsole output:\n${result.logs.join('\n')}`,
|
||||
text: `Execution result:\n${JSON.stringify(result, null, 2)}\n\nConsole output:\n${logs.join('\n')}`,
|
||||
},
|
||||
],
|
||||
isError: false,
|
||||
|
||||
Reference in New Issue
Block a user