cdp_send
Send commands to Chrome DevTools Protocol for browser automation, enabling navigation, DOM manipulation, and JavaScript execution through direct CDP method calls.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | CDP method (e.g., 'Page.navigate', 'DOM.getDocument', 'Runtime.evaluate') | |
| params | No | Parameters object for the CDP method |
Implementation Reference
- server.js:41-59 (handler)Handler function that ensures a CDP session exists, sends the specified CDP method with parameters, and returns the result as JSON or an error.async ({ method, params }) => { const { cdp } = await ensureBrowser(); try { const result = await cdp.send(method, params || {}); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: JSON.stringify({ error: error.message }, null, 2), }, ], isError: true, }; } }
- server.js:32-40 (schema)Input schema for cdp_send tool using Zod: requires 'method' string and optional 'params' object.{ method: z .string() .describe("CDP method (e.g., 'Page.navigate', 'DOM.getDocument', 'Runtime.evaluate')"), params: z .record(z.unknown()) .optional() .describe("Parameters object for the CDP method"), },
- server.js:31-60 (registration)Registration of the cdp_send tool using server.tool, including schema and inline handler."cdp_send", { method: z .string() .describe("CDP method (e.g., 'Page.navigate', 'DOM.getDocument', 'Runtime.evaluate')"), params: z .record(z.unknown()) .optional() .describe("Parameters object for the CDP method"), }, async ({ method, params }) => { const { cdp } = await ensureBrowser(); try { const result = await cdp.send(method, params || {}); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; } catch (error) { return { content: [ { type: "text", text: JSON.stringify({ error: error.message }, null, 2), }, ], isError: true, }; } } );
- server.js:16-26 (helper)Helper function to launch Chromium browser, create a page, and establish CDP session if not already done.async function ensureBrowser() { if (!browser) { browser = await chromium.launch({ headless: false, args: ["--disable-web-security", "--allow-running-insecure-content"], }); page = await browser.newPage(); cdp = await page.context().newCDPSession(page); } return { browser, page, cdp }; }