test_rule
Test Autoconsent rules on specific URLs to verify their functionality in handling consent management platforms using browser automation.
Instructions
Tests the given Autoconsent rule on the given URL
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rule | Yes | Autoconsent rule (AutoConsentCMPRule) | |
| url | Yes | URL to navigate to |
Implementation Reference
- src/tools/test-rule.ts:35-108 (handler)Core handler function implementing the test_rule tool logic: injects autoconsent script, handles messages, navigates to URL, and collects results.export async function testRule( page: Page, url: string, rule: AutoConsentCMPRule, { viewportWidth = 1280, viewportHeight = 720 }: TestRuleSettings = {}, ): Promise<TestRuleResults> { // Set viewport await page.setViewport({ width: viewportWidth, height: viewportHeight }); // Reset browser data - clear cookies, cache, and storage await resetBrowserData(page); const messages: ContentScriptMessage[] = []; async function messageCallback(message: ContentScriptMessage) { messages.push(message); switch (message.type) { case "init": { await page.evaluate( `autoconsentReceiveMessage(${JSON.stringify({ type: "initResp", rules: { autoconsent: [rule], }, config: { enabled: true, autoAction: "optOut", disabledCmps: [], enablePrehide: true, detectRetries: 20, enableCosmeticRules: true, }, })})`, ); break; } case "eval": { const result = await page.evaluate(message.code); await page.evaluate( `autoconsentReceiveMessage(${JSON.stringify({ id: message.id, type: "evalResp", result: result, })})`, ); break; } } } await page.exposeFunction("autoconsentSendMessage", messageCallback); await page.goto(url, { waitUntil: "domcontentloaded", }); await injectAutoconsent(page); page.frames().forEach(injectAutoconsent); // page.on("framenavigated", injectAutoconsent); await new Promise((resolve) => setTimeout(resolve, 5000)); const results = { errors: messages.filter((msg) => msg.type === "autoconsentError"), cmpDetectedMessage: messages.find((msg) => msg.type === "cmpDetected"), popupFoundMessage: messages.find((msg) => msg.type === "popupFound"), optOutResultMessage: messages.find((msg) => msg.type === "optOutResult"), }; await page.removeExposedFunction("autoconsentSendMessage"); return results; }
- src/index.ts:131-141 (schema)MCP input schema for the test_rule tool defining parameters: url (string) and rule (object).inputSchema: { type: "object", properties: { url: { type: "string", description: "URL to navigate to" }, rule: { type: "object", description: "Autoconsent rule (AutoConsentCMPRule)", }, }, required: ["url", "rule"], },
- src/index.ts:128-142 (registration)Registration of test_rule tool in the TOOLS array used by ListToolsRequestHandler.{ name: "test_rule", description: "Tests the given Autoconsent rule on the given URL", inputSchema: { type: "object", properties: { url: { type: "string", description: "URL to navigate to" }, rule: { type: "object", description: "Autoconsent rule (AutoConsentCMPRule)", }, }, required: ["url", "rule"], }, },
- src/index.ts:430-472 (handler)Dispatch handler in handleToolCall that invokes testRule and formats the results for MCP response.case "test_rule": try { const rule = args.rule as AutoConsentCMPRule; const results = await testRule(page, args.url, rule); let output = `Test results for rule "${rule.name}" on ${args.url}:\n\n`; if (results.errors.length > 0) { output += `Errors:\n${results.errors.map((err) => JSON.stringify(err, null, 2)).join("\n")}\n\n`; } if (results.cmpDetectedMessage) { output += `CMP Detected: ${JSON.stringify(results.cmpDetectedMessage, null, 2)}\n\n`; } if (results.popupFoundMessage) { output += `Popup Found: ${JSON.stringify(results.popupFoundMessage, null, 2)}\n\n`; } if (results.optOutResultMessage) { output += `Opt-out Result: ${JSON.stringify(results.optOutResultMessage, null, 2)}\n\n`; } return { content: [ { type: "text", text: output, }, ], isError: false, }; } catch (error) { return { content: [ { type: "text", text: `Failed to test rule: ${(error as Error).message}`, }, ], isError: true, }; }
- src/tools/test-rule.ts:14-24 (schema)TypeScript type definitions for input settings and output results used by testRule function.type TestRuleSettings = { viewportWidth?: number; viewportHeight?: number; }; type TestRuleResults = { errors: ErrorMessage[]; cmpDetectedMessage?: DetectedMessage; popupFoundMessage?: FoundMessage; optOutResultMessage?: OptOutResultMessage; };