webby-mcp

cordlesssteve/webby-mcp

3.2

If you are the rightful owner of webby-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

Webby is a comprehensive website validator MCP server that tests websites across performance, accessibility, SEO, and security dimensions.

Tools
12
Resources
0
Prompts
0

Webby - Comprehensive Website Validator MCP Server

A Model Context Protocol (MCP) server that provides comprehensive website testing across performance, accessibility, SEO, and security dimensions.

Features

šŸš€ Performance Testing

  • WebPageTest āœ… - Real browser testing via Playwright automation (300 tests/month free, no API key)
  • Google PageSpeed Insights āœ… - Core Web Vitals and Google ranking signals (25K API calls/day free)
  • GTmetrix āœ… - Lighthouse + custom metrics with historical tracking (requires API key)

♿ Accessibility Testing

  • Axe DevTools āœ… - Fast WCAG scans via Playwright + axe-core (free, open-source)
  • WAVE āœ… - WCAG compliance and contrast analysis (requires API key)

šŸ” SEO Testing

  • PageSpeed Insights SEO āœ… - Uses Lighthouse SEO (free, comprehensive)

šŸ”’ Security Testing

  • Mozilla Observatory āœ… - HTTP security headers analysis (CSP, HSTS) - Free API, 1 scan/min
  • SSL Labs āœ… - Comprehensive SSL/TLS certificate testing - Free API (requires email)

Installation

cd ~/mcp-servers/servers/src/webby
npm install
npm run build

MCP Tools (11 Total)

Performance Tools (3)

validate_performance_pagespeed

{
  url: string,
  strategy?: 'mobile' | 'desktop',  // default: mobile
  apiKey?: string                   // optional, for higher quota
}
// Returns: Performance score, Core Web Vitals, metrics

validate_performance_webpagetest ✨ NEW

{
  url: string,
  location?: string,              // e.g., 'Dulles:Chrome'
  runs?: number,                  // default: 1
  waitForResults?: boolean,       // default: false (returns test ID immediately)
  timeout?: number                // default: 300000 (5 min)
}
// Returns: Test ID + results URL immediately OR full results if waitForResults=true
// Metrics: Load Time, FCP, LCP, Speed Index, TTI, TBT, CLS, Performance Grade

validate_performance_gtmetrix

{
  url: string,
  apiKey: string,                 // required
  location?: string,              // e.g., 'vancouver-canada'
  browser?: string                // e.g., 'chrome'
}
// Returns: Lighthouse score, PageSpeed score, load time, page size

Accessibility Tools (2)

validate_accessibility_axe

{
  url: string,
  wcagLevel?: string              // wcag2a, wcag2aa, wcag2aaa, wcag21aa, wcag22aa
}
// Returns: Violations by severity (critical, serious, moderate, minor), passes, incomplete

validate_accessibility_wave

{
  url: string,
  apiKey: string,                 // required
  reporttype?: 1 | 2 | 3 | 4     // detail level (default: 2)
}
// Returns: Errors, contrast errors, alerts, WAVE report URL, credits remaining

Security Tools (2)

validate_security_mozilla_observatory

{
  url: string,
  forceRescan?: boolean           // default: false
}
// Returns: Grade (A+ to F), score, tests passed/failed, details URL

validate_security_ssl_labs

{
  url: string,
  email: string,                  // required by API
  maxAge?: number,                // cached report age in hours
  startNew?: boolean,             // force new assessment
  waitForComplete?: boolean,      // wait for completion (can take 2-5 min)
  maxWaitMinutes?: number         // default: 5
}
// Returns: Grade (A+ to F), endpoint details, protocol info, status

Category Runners (4)

validate_all_performance

{
  url: string,
  pagespeedApiKey?: string,
  gtmetrixApiKey?: string,
  webpagetestEnabled?: boolean,        // enable browser automation
  webpagetestWaitForResults?: boolean  // wait for WPT completion
}
// Returns: Results from PageSpeed + optionally WebPageTest + optionally GTmetrix

validate_all_accessibility

{
  url: string,
  waveApiKey?: string,            // optional
  wcagLevel?: string              // for Axe
}
// Returns: Results from Axe + optionally WAVE

validate_all_seo

{
  url: string
}
// Returns: SEO analysis from PageSpeed Insights (Lighthouse SEO)

validate_all_security

{
  url: string,
  email: string,                  // for SSL Labs
  waitForSSL?: boolean            // wait for SSL Labs completion
}
// Returns: Results from Mozilla Observatory + SSL Labs

Master Runner (1)

validate_comprehensive

{
  url: string,
  email: string,                  // required for SSL Labs
  categories?: string[],          // ['performance', 'accessibility', 'seo', 'security']
  pagespeedApiKey?: string,
  gtmetrixApiKey?: string,
  waveApiKey?: string,
  wcagLevel?: string,
  waitForSSL?: boolean
}
// Returns: Complete analysis across all selected categories with overall health score

Response Format

{
  "tool": "webpagetest",
  "success": true,
  "url": "https://example.com",
  "test_id": "250107_AiDcA4_ABC",
  "results_url": "https://www.webpagetest.org/result/250107_AiDcA4_ABC/",
  "status": "complete",
  "summary": {
    "loadTime": 2500,
    "firstContentfulPaint": 1200,
    "speedIndex": 2300,
    "largestContentfulPaint": 2100,
    "timeToInteractive": 3500,
    "totalBlockingTime": 250,
    "cumulativeLayoutShift": 0.05
  },
  "performance_grade": "A",
  "security_grade": "A+"
}

Implementation Status

āœ… Fully Implemented (9 tools)

  • validate_performance_pagespeed - Google PageSpeed Insights API
  • validate_performance_webpagetest - Playwright browser automation ✨
  • validate_performance_gtmetrix - GTmetrix API
  • validate_accessibility_axe - Playwright + axe-core
  • validate_accessibility_wave - WAVE API
  • validate_security_mozilla_observatory - Mozilla Observatory API
  • validate_security_ssl_labs - SSL Labs API with polling
  • validate_all_* - All 4 category orchestrators
  • validate_comprehensive - Master orchestrator

āœ… All Tools Functional

No placeholders - all 11 tools are fully implemented and working!

API Quotas & Limits

ToolFree LimitAPI Key RequiredImplementation
Mozilla Observatory1 scan/min per domainNoāœ… Direct API
SSL LabsUnlimited (rate limited)Email onlyāœ… Direct API
PageSpeed Insights25,000/dayOptional (free)āœ… Direct API
WebPageTest300/monthNoāœ… Browser automation
GTmetrixLimited creditsYes (free tier)āœ… Direct API
AxeUnlimitedNoāœ… Browser automation
WAVEVaries by planYes (paid)āœ… Direct API

Browser Automation

WebPageTest and Axe use Playwright for headless browser automation:

  • Singleton browser instance - Reused across tests for efficiency
  • Configurable timeouts - Default 5 minutes for WebPageTest, 1 minute for Axe
  • Graceful cleanup - Browser closed on MCP server shutdown
  • No API keys needed - Free access via web UI automation

Project Structure

webby/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ performance/
│   │   ā”œā”€ā”€ pagespeed.ts          āœ… Google API
│   │   ā”œā”€ā”€ webpagetest.ts        āœ… Playwright automation
│   │   └── gtmetrix.ts           āœ… GTmetrix API
│   ā”œā”€ā”€ accessibility/
│   │   ā”œā”€ā”€ axe.ts                āœ… Playwright + axe-core
│   │   └── wave.ts               āœ… WAVE API
│   ā”œā”€ā”€ security/
│   │   ā”œā”€ā”€ mozilla-observatory.ts āœ… Mozilla API
│   │   └── ssl-labs.ts           āœ… SSL Labs API + polling
│   ā”œā”€ā”€ shared/
│   │   └── browser-utils.ts      āœ… Playwright utilities
│   └── orchestrator/
│       └── run-all.ts            āœ… All orchestrators
ā”œā”€ā”€ dist/                         # Compiled JavaScript
ā”œā”€ā”€ index.ts                      # Main MCP server entry
ā”œā”€ā”€ package.json
└── README.md

Usage Examples

Quick WebPageTest (instant response)

validate_performance_webpagetest("https://example.com")
// Returns test ID immediately, check results later at provided URL

Complete WebPageTest (wait for results)

validate_performance_webpagetest("https://example.com", {
  waitForResults: true,
  timeout: 300000  // 5 minutes
})
// Waits for test completion, returns full metrics

Run all performance tests

validate_all_performance("https://example.com", {
  webpagetestEnabled: true,        // Enable browser automation
  webpagetestWaitForResults: false // Get test ID instantly
})
// Returns: PageSpeed + WebPageTest results

Comprehensive validation

validate_comprehensive("https://example.com", {
  email: "your@email.com",         // For SSL Labs
  categories: ["performance", "security"],
  webpagetestEnabled: true
})
// Returns: Full analysis with overall health score

License

MIT