render.execute_js
Execute JavaScript code on webpages to analyze security vulnerabilities, test scripts, and perform automated reconnaissance for bug bounty hunting.
Instructions
Execute JavaScript in the context of a webpage
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to load | |
| script | Yes | JavaScript code to execute |
Implementation Reference
- src/tools/render.ts:209-235 (handler)Handler function that loads the webpage using Puppeteer, executes the provided JavaScript code in the page context using page.evaluate and eval, handles errors, and returns the result or error message.async ({ url, script }: any): Promise<ToolResult> => { let page: Page | null = null; try { const browserInstance = await getBrowser(); page = await browserInstance.newPage(); await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 }); const result = await page.evaluate((scriptToRun) => { try { return eval(scriptToRun); } catch (e) { return { error: e instanceof Error ? e.message : String(e) }; } }, script); await page.close(); return formatToolResult(true, { url, result, }); } catch (error: any) { if (page) await page.close().catch(() => {}); return formatToolResult(false, null, error.message); } }
- src/tools/render.ts:198-208 (schema)Schema definition for the tool, specifying the input parameters: url (string, required) and script (string, required).{ description: 'Execute JavaScript in the context of a webpage', inputSchema: { type: 'object', properties: { url: { type: 'string', description: 'URL to load' }, script: { type: 'string', description: 'JavaScript code to execute' }, }, required: ['url', 'script'], }, },
- src/tools/render.ts:196-236 (registration)Tool registration call using server.tool() with the tool name 'render.execute_js', its schema, and handler function. This is invoked from registerRenderTools(server) which is called in src/index.ts.server.tool( 'render.execute_js', { description: 'Execute JavaScript in the context of a webpage', inputSchema: { type: 'object', properties: { url: { type: 'string', description: 'URL to load' }, script: { type: 'string', description: 'JavaScript code to execute' }, }, required: ['url', 'script'], }, }, async ({ url, script }: any): Promise<ToolResult> => { let page: Page | null = null; try { const browserInstance = await getBrowser(); page = await browserInstance.newPage(); await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 }); const result = await page.evaluate((scriptToRun) => { try { return eval(scriptToRun); } catch (e) { return { error: e instanceof Error ? e.message : String(e) }; } }, script); await page.close(); return formatToolResult(true, { url, result, }); } catch (error: any) { if (page) await page.close().catch(() => {}); return formatToolResult(false, null, error.message); } } );