Skip to main content
Glama

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
NameRequiredDescriptionDefault
ruleYesAutoconsent rule (AutoConsentCMPRule)
urlYesURL to navigate to

Implementation Reference

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

Other Tools

Related Tools

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/noisysocks/autoconsent-mcp'

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