mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-27 08:15:16 +02:00
Merge pull request #149 from matipojo/fix-puppeteer-async-eval
fix(puppeteer): enable async code execution in puppeteer_evaluate tool
This commit is contained in:
@@ -124,6 +124,15 @@ async function ensureBrowser() {
|
|||||||
return page!;
|
return page!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
mcpHelper: {
|
||||||
|
logs: string[],
|
||||||
|
originalConsole: Partial<typeof console>,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function handleToolCall(name: string, args: any): Promise<CallToolResult> {
|
async function handleToolCall(name: string, args: any): Promise<CallToolResult> {
|
||||||
const page = await ensureBrowser();
|
const page = await ensureBrowser();
|
||||||
|
|
||||||
@@ -263,32 +272,34 @@ async function handleToolCall(name: string, args: any): Promise<CallToolResult>
|
|||||||
|
|
||||||
case "puppeteer_evaluate":
|
case "puppeteer_evaluate":
|
||||||
try {
|
try {
|
||||||
const result = await page.evaluate((script) => {
|
await page.evaluate(() => {
|
||||||
const logs: string[] = [];
|
window.mcpHelper = {
|
||||||
const originalConsole = { ...console };
|
logs: [],
|
||||||
|
originalConsole: { ...console },
|
||||||
|
};
|
||||||
|
|
||||||
['log', 'info', 'warn', 'error'].forEach(method => {
|
['log', 'info', 'warn', 'error'].forEach(method => {
|
||||||
(console as any)[method] = (...args: any[]) => {
|
(console as any)[method] = (...args: any[]) => {
|
||||||
logs.push(`[${method}] ${args.join(' ')}`);
|
window.mcpHelper.logs.push(`[${method}] ${args.join(' ')}`);
|
||||||
(originalConsole as any)[method](...args);
|
(window.mcpHelper.originalConsole as any)[method](...args);
|
||||||
};
|
};
|
||||||
});
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
try {
|
const result = await page.evaluate( args.script );
|
||||||
const result = eval(script);
|
|
||||||
Object.assign(console, originalConsole);
|
const logs = await page.evaluate(() => {
|
||||||
return { result, logs };
|
Object.assign(console, window.mcpHelper.originalConsole);
|
||||||
} catch (error) {
|
const logs = window.mcpHelper.logs;
|
||||||
Object.assign(console, originalConsole);
|
delete ( window as any).mcpHelper;
|
||||||
throw error;
|
return logs;
|
||||||
}
|
});
|
||||||
}, args.script);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
content: [
|
content: [
|
||||||
{
|
{
|
||||||
type: "text",
|
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,
|
isError: false,
|
||||||
@@ -387,4 +398,4 @@ async function runServer() {
|
|||||||
await server.connect(transport);
|
await server.connect(transport);
|
||||||
}
|
}
|
||||||
|
|
||||||
runServer().catch(console.error);
|
runServer().catch(console.error);
|
||||||
|
|||||||
Reference in New Issue
Block a user