Skip to main content
Glama

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
NameRequiredDescriptionDefault
urlYesURL to load
scriptYesJavaScript code to execute

Implementation Reference

  • 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); } }
  • 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'], }, },
  • 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); } } );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/telmon95/VulneraMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server