Skip to main content
Glama

audit_webpage

Analyze webpage accessibility by checking compliance with WCAG standards using axe-core. Identify issues, include HTML snippets, and specify tags like wcag2a or best-practice for targeted audits.

Instructions

Perform an accessibility audit on a webpage

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
includeHtmlNoWhether to include HTML snippets in the results
tagsNoSpecific accessibility tags to check (e.g., wcag2a, wcag2aa, wcag21a, best-practice)
urlYesURL of the webpage to audit

Implementation Reference

  • The handler function for 'audit_webpage' tool. Launches Puppeteer browser, navigates to the provided URL, runs Axe accessibility audit with optional tags, formats violations with node details (optionally including HTML), and returns JSON results.
    async auditWebpage(args) {
      if (!args.url) {
        throw new McpError(
          ErrorCode.InvalidParams,
          'URL is required'
        );
      }
    
      try {
        const browser = await puppeteer.launch({
          headless: 'new',
          args: ['--no-sandbox', '--disable-setuid-sandbox'],
        });
        const page = await browser.newPage();
        
        // Set a reasonable viewport
        await page.setViewport({ width: 1280, height: 800 });
        
        // Navigate to the page
        await page.goto(args.url, { waitUntil: 'networkidle2', timeout: 30000 });
        
        // Run axe on the page
        const axeOptions = {};
        if (args.tags && args.tags.length > 0) {
          axeOptions.runOnly = {
            type: 'tag',
            values: args.tags,
          };
        }
        
        const results = await new AxePuppeteer(page).options(axeOptions).analyze();
        
        // Close the browser
        await browser.close();
        
        // Format the results
        const formattedResults = {
          url: args.url,
          timestamp: new Date().toISOString(),
          violations: results.violations.map(violation => {
            const formattedViolation = {
              id: violation.id,
              impact: violation.impact,
              description: violation.description,
              helpUrl: violation.helpUrl,
              nodes: violation.nodes.map(node => {
                const formattedNode = {
                  impact: node.impact,
                  target: node.target,
                  failureSummary: node.failureSummary,
                };
                
                if (args.includeHtml) {
                  formattedNode.html = node.html;
                }
                
                return formattedNode;
              }),
            };
            
            return formattedViolation;
          }),
          passes: results.passes.length,
          incomplete: results.incomplete.length,
          inapplicable: results.inapplicable.length,
        };
        
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify(formattedResults, null, 2),
            },
          ],
        };
      } catch (error) {
        return {
          content: [
            {
              type: 'text',
              text: `Error auditing webpage: ${error.message}`,
            },
          ],
          isError: true,
        };
      }
    }
  • Input schema for the 'audit_webpage' tool defining required 'url' and optional 'includeHtml' and 'tags' parameters.
    inputSchema: {
      type: 'object',
      properties: {
        url: {
          type: 'string',
          description: 'URL of the webpage to audit',
        },
        includeHtml: {
          type: 'boolean',
          description: 'Whether to include HTML snippets in the results',
          default: false,
        },
        tags: {
          type: 'array',
          items: {
            type: 'string',
          },
          description: 'Specific accessibility tags to check (e.g., wcag2a, wcag2aa, wcag21a, best-practice)',
        },
      },
      required: ['url'],
    },
  • src/index.js:40-65 (registration)
    Registration of the 'audit_webpage' tool in the ListTools response, including name, description, and input schema.
    {
      name: 'audit_webpage',
      description: 'Perform an accessibility audit on a webpage',
      inputSchema: {
        type: 'object',
        properties: {
          url: {
            type: 'string',
            description: 'URL of the webpage to audit',
          },
          includeHtml: {
            type: 'boolean',
            description: 'Whether to include HTML snippets in the results',
            default: false,
          },
          tags: {
            type: 'array',
            items: {
              type: 'string',
            },
            description: 'Specific accessibility tags to check (e.g., wcag2a, wcag2aa, wcag21a, best-practice)',
          },
        },
        required: ['url'],
      },
    },
  • src/index.js:85-86 (registration)
    Dispatch case in the CallToolRequestSchema handler that routes 'audit_webpage' calls to the auditWebpage method.
    case 'audit_webpage':
      return this.auditWebpage(request.params.arguments);

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

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/priyankark/a11y-mcp'

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