Skip to main content
Glama

Lighthouse MCP 服务器

NPM 版本 许可证:MIT Node 版本 CI 覆盖率 赞助

一个模型上下文协议(MCP)服务器,利用 Google Lighthouse 提供全面的网页性能审计和分析能力。该服务器使 LLM 和 AI 代理能够执行详细的网站性能评估、可访问性审计、SEO 分析、安全检查以及 Core Web Vitals 监控。

🌟 主要特性

  • 🚀 性能分析:完整的 Lighthouse 审计,包括 Core Web Vitals、性能评分和优化建议

  • ♿ 可访问性审计:WCAG 合规性检查和可访问性评分分析

  • 🔍 SEO 分析:搜索引擎优化审计和最佳实践建议

  • 🔒 安全评估:HTTPS、CSP 和安全漏洞扫描

  • 📊 资源分析:JavaScript、CSS、图片和字体优化机会

  • 📱 移动端与桌面端对比:跨设备对比分析,支持网络节流选项

  • ⚡ Core Web Vitals:LCP、INP、CLS 监控及阈值检查

  • 🎯 性能预算:自定义性能阈值和预算监控

  • 🤖 代理浏览:Lighthouse 13 审计,评估页面为 AI 代理服务的质量(WebMCP 工具、代理可访问性树、llms.txt)

  • 🧩 结构化输出:每个工具都声明了 outputSchema 并返回经过验证的 structuredContent,客户端获得的是类型化数据,而非需要解析的 JSON 字符串

  • 📚 参考资源:内置的网页性能、可访问性、SEO 和安全方面的指南与最佳实践

Related MCP server: mcp-seo

🛠️ 环境要求

  • Node.js 22.0.0 或更高版本

  • Chrome/Chromium 浏览器(由 Lighthouse 自动管理)

  • VS Code、Cursor、Windsurf、Claude Desktop 或任何其他 MCP 客户端

🚀 快速开始

使用以下任一配置,通过你偏好的客户端安装 Lighthouse MCP 服务器:

{
  "mcpServers": {
    "lighthouse": {
      "command": "npx",
      "args": ["@danielsogl/lighthouse-mcp@latest"]
    }
  }
}

持久化 Chrome 配置文件(登录会话)

如果需要经过身份验证的会话,请使用持久化 Chrome 配置文件并以有头模式启动:

{
  "mcpServers": {
    "lighthouse": {
      "command": "npx",
      "args": [
        "@danielsogl/lighthouse-mcp@latest",
        "--profile-path",
        "<profile-path>",
        "--no-headless"
      ]
    }
  }
}

你可以使用 --chrome-flag 传递额外的 Chrome 标志,例如 --chrome-flag=--disable-gpu。 如果标志值以 -- 开头且与已知选项名称匹配,请优先使用 --chrome-flag=... 以避免被解析为顶层选项。 配置文件模式会禁用 Lighthouse 的存储重置,以便 cookie 和本地存储在多次运行之间得以保留。 如果 --user-data-dir 指向不存在的目录,该目录将被创建并视为全新配置文件。 将 --profile-path 设置为 chrome://version 中显示的配置文件路径(例如 .../Default)。 注意:Chrome 的远程调试要求使用非默认的用户数据目录,因此请复用专用的配置文件目录,而不是系统默认目录。 如果你愿意,也可以分别传递 --user-data-dir 和 --profile-directory。 仅使用 --chrome-port 附加不会保留存储;请包含配置文件标志以保持会话。

CLI 选项

MCP 服务器支持的运行时标志:

  • --profile-path <path>:使用 chrome://version 中的配置文件路径(自动推导用户数据目录和配置文件名称)

  • --user-data-dir <path>:复用 Chrome 配置文件目录以实现持久化会话

  • --profile-directory <name>:在用户数据目录中选择一个配置文件

  • --chrome-path <path>:Chrome/Chromium 可执行文件的显式路径(覆盖自动检测;也遵循 CHROME_PATH 环境变量)

  • --chrome-flag <flag> 或 --chrome-flag=<flag>:透传额外的 Chrome 标志(可重复)

  • --chrome-port <port> 或 --remote-debugging-port <port>:附加到已启用远程调试的现有 Chrome 实例

  • --headless:强制无头模式

  • --no-headless:强制有头模式

日志

Lighthouse 将日志输出到 stderr。服务器将其保持在 error 级别,以免淹没你的 MCP 客户端的日志;调试时(例如 Chrome 启动失败时)可将 LIGHTHOUSE_LOG_LEVEL 设置为 silent、info 或 verbose。

LIGHTHOUSE_LOG_LEVEL=verbose npx @danielsogl/lighthouse-mcp@latest

WSL2 / 自定义 Chrome 路径

如果检测到了错误的 Chrome 二进制文件(例如在 WSL2 上检测到 Windows 版 Chrome 而非 Linux 版),请显式设置路径:

# Via CLI flag
npx @danielsogl/lighthouse-mcp@latest --chrome-path /usr/bin/google-chrome

# Via environment variable
CHROME_PATH=/usr/bin/google-chrome npx @danielsogl/lighthouse-mcp@latest

在你的 MCP 配置中:

{
  "mcpServers": {
    "lighthouse": {
      "command": "npx",
      "args": ["@danielsogl/lighthouse-mcp@latest", "--chrome-path", "/usr/bin/google-chrome"]
    }
  }
}

端到端冒烟测试(配置文件)

使用持久化配置文件运行真实审计(如有需要,请使用现有配置文件目录并登录一次):

npm run smoke:profile -- --url https://example.com \
  --profile-path "<profile-path>" \
  --no-headless

端到端冒烟测试(附加到现有 Chrome)

启动已启用远程调试的 Chrome:

/path/to/GoogleChromeExecutable \
  --remote-debugging-port=9222 \
  --user-data-dir /path/to/chrome-profile

将 /path/to/GoogleChromeExecutable 替换为你所在平台的 Chrome/Chromium 二进制文件路径。

然后将 Lighthouse 附加到该实例:

npm run smoke:profile -- --url https://example.com --chrome-port 9222

附加时如需保留存储,请传入配置文件路径,以便 Lighthouse 保留 cookie/本地存储:

npm run smoke:profile -- --url https://example.com \
  --chrome-port 9222 \
  --profile-path "<profile-path>"

在 VS Code 中安装

你也可以使用 VS Code CLI 安装 Lighthouse MCP 服务器:

# For VS Code
code --add-mcp '{"name":"lighthouse","command":"npx","args":["-y","@danielsogl/lighthouse-mcp@latest"]}'

# For VS Code Insiders
code-insiders --add-mcp '{"name":"lighthouse","command":"npx","args":["-y","@danielsogl/lighthouse-mcp@latest"]}'

安装完成后,Lighthouse MCP 服务器即可在 VS Code 中与你的 GitHub Copilot 代理配合使用。

在 Cursor 中安装

安装 MCP 服务器

前往 Cursor 设置 → MCP → 添加新的 MCP 服务器。将其命名为 "lighthouse",使用 command 类型,命令为 npx @danielsogl/lighthouse-mcp@latest:

{
  "mcpServers": {
    "lighthouse": {
      "command": "npx",
      "args": ["@danielsogl/lighthouse-mcp@latest"]
    }
  }
}

在 Windsurf 中安装

请遵循 Windsurf MCP 文档。使用以下配置:

{
  "mcpServers": {
    "lighthouse": {
      "command": "npx",
      "args": ["@danielsogl/lighthouse-mcp@latest"]
    }
  }
}

在 Claude Desktop 中安装

请遵循 MCP 安装指南,使用以下配置:

{
  "mcpServers": {
    "lighthouse": {
      "command": "npx",
      "args": ["@danielsogl/lighthouse-mcp@latest"]
    }
  }
}

🔧 可用工具

Lighthouse MCP 服务器提供以下工具,用于全面的网页分析:

🏁 审计工具

工具

描述

参数

run_audit

运行全面的 Lighthouse 审计

url、categories?、device?、throttling?

get_accessibility_score

获取可访问性评分和建议

url、device?、includeDetails?

get_seo_analysis

获取 SEO 分析和建议

url、device?、includeDetails?

⚡ 性能工具

工具

描述

参数

get_performance_score

获取整体性能评分

url、device?

get_core_web_vitals

获取 Core Web Vitals 指标

url、device?、includeDetails?、threshold?

compare_mobile_desktop

跨设备对比性能

url、categories?、throttling?、includeDetails?

check_performance_budget

对照性能预算进行检查

url、device?、budget

get_lcp_opportunities

查找 LCP 优化机会

url、device?、includeDetails?、threshold?

🔍 分析工具

工具

描述

参数

find_unused_javascript

查找未使用的 JavaScript 代码

url、device?、minBytes?、includeSourceMaps?

analyze_resources

分析所有网站资源

url、device?、resourceTypes?、minSize?

🔒 安全工具

工具

描述

参数

get_security_audit

执行全面的安全审计

url、device?、checks?

💬 可用提示词

Lighthouse MCP 服务器包含可复用的提示词,帮助 LLM 提供结构化的分析和建议:

📊 分析提示词

提示词

描述

参数

analyze-audit-results

分析 Lighthouse 审计结果

auditResults、focusArea?

compare-audits

对比前后审计结果

beforeAudit、afterAudit、changesImplemented?

optimize-core-web-vitals

获取 Core Web Vitals 优化建议

coreWebVitals、framework?、constraints?

optimize-resources

获取资源优化建议

resourceAnalysis、loadingStrategy?、criticalUserJourneys?

📚 可用资源

Lighthouse MCP 服务器提供内置的参考资源,包含基本指南和最佳实践:

资源

描述

URI

core-web-vitals-thresholds

Core Web Vitals 性能阈值

lighthouse://performance/core-web-vitals-thresholds

optimization-techniques

性能优化技术及其影响

lighthouse://performance/optimization-techniques

wcag-guidelines

WCAG 2.1 无障碍指南和问题

lighthouse://accessibility/wcag-guidelines

seo-best-practices

SEO 最佳实践和优化机会

lighthouse://seo/best-practices

security-best-practices

Web 安全最佳实践和漏洞

lighthouse://security/best-practices

budget-guidelines

按站点类型划分的性能预算建议

lighthouse://performance/budget-guidelines

categories-scoring

Lighthouse 审计类别和评分方法

lighthouse://audits/categories-scoring

framework-guides

特定框架的优化指南

lighthouse://frameworks/optimization-guides

🎯 策略提示词

提示词

描述

参数

create-performance-plan

生成全面的性能改进计划

currentMetrics、targetGoals?、timeframe?

create-performance-budget

创建自定义性能预算建议

currentMetrics、businessGoals?、userBase?

seo-recommendations

生成 SEO 改进建议

seoAudit、websiteType?、targetAudience?

accessibility-guide

创建无障碍改进指南

accessibilityAudit、complianceLevel?、userGroups?

🔧 提示词参数详情

  • auditResults:来自 Lighthouse 工具的 JSON 审计结果

  • focusArea:要关注的特定类别("performance"、"accessibility"、"seo"、"best-practices"、"agentic-browsing")

  • beforeAudit / afterAudit:更改前后的 Lighthouse 审计结果

  • changesImplemented:两次审计之间所做更改的描述

  • currentMetrics:来自审计的当前性能指标

  • targetGoals:特定的性能目标或业务目标

  • timeframe:实施改进的时间表

  • framework:前端框架或技术栈

  • constraints:技术或业务约束

  • websiteType:网站类型(例如,电子商务、博客、企业)

  • targetAudience:目标受众或市场信息

  • complianceLevel:WCAG 合规级别("AA" 或 "AAA")

  • userGroups:无障碍方面需要考虑的特定用户群体

📋 参数详情

通用参数

  • url(必需):要分析的网站 URL

  • device:目标设备("desktop" 或 "mobile",默认值:"desktop")

  • includeDetails:包含详细的审计信息(默认值:false)

  • throttling:启用网络/CPU 节流(默认值:false)

特定参数

  • categories:要审计的 Lighthouse 类别(["performance", "accessibility", "best-practices", "seo", "agentic-browsing"])

  • threshold:指标的自定义阈值(例如,{"lcp": 2.5, "inp": 200, "cls": 0.1})

  • budget:性能预算限制(例如,{"performanceScore": 90, "largestContentfulPaint": 2500})

  • resourceTypes:要分析的资源类型(["images", "javascript", "css", "fonts", "other"])

  • minBytes:分析的最小文件大小阈值(默认值:2048)

  • checks:要执行的安全检查(["https", "csp", "hsts", "origin-isolation", "clickjacking", "trusted-types", "third-party-cookies", "deprecations"])

💡 使用示例

基本性能审计

// Get overall performance score
{
  "tool": "get_performance_score",
  "arguments": {
    "url": "https://example.com",
    "device": "mobile"
  }
}

Core Web Vitals 分析

// Check Core Web Vitals with custom thresholds
{
  "tool": "get_core_web_vitals",
  "arguments": {
    "url": "https://example.com",
    "device": "mobile",
    "includeDetails": true,
    "threshold": {
      "lcp": 2.5,
      "inp": 200,
      "cls": 0.1
    }
  }
}

安全评估

// Comprehensive security audit
{
  "tool": "get_security_audit",
  "arguments": {
    "url": "https://example.com",
    "checks": ["https", "csp", "hsts"]
  }
}

资源优化

// Find optimization opportunities
{
  "tool": "analyze_resources",
  "arguments": {
    "url": "https://example.com",
    "resourceTypes": ["images", "javascript"],
    "minSize": 1024
  }
}

使用参考资源

访问内置指南和最佳实践:

// Get Core Web Vitals thresholds
{
  "resource": {
    "uri": "lighthouse://performance/core-web-vitals-thresholds"
  }
}

// Access WCAG accessibility guidelines
{
  "resource": {
    "uri": "lighthouse://accessibility/wcag-guidelines"
  }
}

// Get framework-specific optimization guides
{
  "resource": {
    "uri": "lighthouse://frameworks/optimization-guides"
  }
}

使用提示词进行分析

// Analyze audit results with focused recommendations
{
  "prompt": "analyze-audit-results",
  "arguments": {
    "auditResults": "{...lighthouse audit json...}",
    "focusArea": "performance"
  }
}

// Create a performance improvement plan
{
  "prompt": "create-performance-plan",
  "arguments": {
    "currentMetrics": "{...current performance metrics...}",
    "targetGoals": "Achieve 90+ performance score and sub-2s LCP",
    "timeframe": "3 months"
  }
}

// Compare before/after audit results
{
  "prompt": "compare-audits",
  "arguments": {
    "beforeAudit": "{...before audit results...}",
    "afterAudit": "{...after audit results...}",
    "changesImplemented": "Implemented lazy loading and image optimization"
  }
}

🎯 使用场景

  • 性能监控:自动化性能跟踪和 Core Web Vitals 监控

  • 无障碍合规:WCAG 2.1 合规检查和修复指导

  • SEO 优化:技术 SEO 审计和搜索引擎优化建议

  • 安全评估:漏洞扫描和安全最佳实践验证

  • 资源优化:包体分析和优化机会识别

  • 性能预算:自动化性能预算监控和告警

  • CI/CD 集成:自动化质量门禁和性能回归检测

🏗️ 架构

该服务器基于以下技术构建:

🧪 测试

npm run test:run      # unit tests
npm run test:coverage # unit tests with coverage
npm run test:e2e      # end-to-end tests

端到端测试套件会构建服务器,通过 stdio 与真实的 MCP 客户端启动它,并针对在回环地址上提供的测试页面运行实际的 Lighthouse 审计。该套件需要安装 Chrome;如果 Chrome 位于非标准位置,请设置 CHROME_PATH。

🤝 贡献

欢迎贡献!请阅读我们的贡献指南,了解以下详细信息:

  • 代码风格和标准

  • 测试要求

  • 拉取请求流程

  • 开发环境设置

📜 许可证

本项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。

🔒 安全

如有安全问题,请参阅我们的安全策略。

📞 支持

🙏 致谢

  • Google Lighthouse 团队提供了出色的审计引擎

  • Anthropic 制定了 Model Context Protocol 规范

  • 开源社区持续提供灵感和贡献


由 Daniel Sogl 用 ❤️ 构建

Available Tools

11 tools
analyze_resourcesAnalyze Page ResourcesA
Read-only

Analyze website resources (images, JS, CSS, fonts) for optimization opportunities

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop
minSizeNoMinimum resource size in KB to include
resourceTypesNoTypes of resources to analyze

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
deviceYes
filtersYes
summaryYes
resourcesYes
timestampYes
optimizationYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe, read-only operation that may access external URLs. The description adds the focus on optimization opportunities but does not disclose details like whether it fetches live pages, handles redirects, or has rate limits. With annotations covering the safety profile, a 3 is appropriate – it adds some context but not rich behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, clear sentence that front-loads the resource types and purpose. No waste, though it could be slightly more specific about the output or usage context. Efficient and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover safety, the description is adequate for a resource analysis tool. It doesn't explain return values (covered by output schema) or edge cases, but for a read-only analysis tool with 4 parameters, it is reasonably complete. Could benefit from mentioning that it analyzes a single URL or that it's for optimization, but these are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are documented in the schema. The description adds the overall purpose but does not add syntax or format details beyond what the schema provides. Baseline 3 is correct when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Analyze') and resource ('website resources') with a clear scope (images, JS, CSS, fonts) and purpose (optimization opportunities). It distinguishes from siblings like get_performance_score or get_seo_analysis by focusing on resource-level analysis, though it doesn't explicitly name a sibling it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for optimization analysis but does not explicitly state when to use this tool versus alternatives like find_unused_javascript or get_lcp_opportunities. The sibling list suggests related tools, but no exclusions or conditions are provided. The context is clear enough for a general audit, but lacks explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_performance_budgetCheck Performance BudgetB
Read-only

Check if website performance meets specified budget thresholds

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
budgetYes
deviceNoDevice to emulate (default: desktop)desktop

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint: true and openWorldHint: true, indicating a read-only operation that may access external resources. The description adds no extra behavioral context—it does not mention that the tool will perform a live audit, make network requests, or have rate limits. While there is no contradiction, the description fails to disclose the operation's networked nature, which is a meaningful behavioral trait beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no filler. It conveys the purpose immediately and contains no redundant information. It earns a high score for being appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (nested budget object, optional device, output schema present), the description is minimal. It does not explain when to use it compared to siblings, nor does it clarify the semantics of the budget fields beyond what the schema provides. The output schema exists, so return values are covered, but the lack of usage guidance leaves the description somewhat incomplete for guiding an agent toward correct invocation in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%: url and device have descriptions, but the budget object itself lacks a description at the top level. The inner properties are described, so the schema partially covers the main parameter. The description adds no additional meaning about how to structure the budget or interpret thresholds, leaving the agent to rely on the schema's inner property descriptions, which are adequate but not enriched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: checking website performance against budget thresholds. It uses a specific verb ('check') and resource ('website performance'), and the notion of 'budget thresholds' distinguishes it from sibling tools that return raw scores or metrics. However, it does not explicitly name an alternative or contrast with similar tools like get_performance_score, so it is clear but not strongly differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool instead of siblings such as run_audit, get_performance_score, or get_core_web_vitals. The description only states what it does, leaving the agent to infer appropriate use. No exclusions, alternatives, or preconditions are provided, so usage context is entirely absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_mobile_desktopCompare Mobile vs DesktopA
Read-only

Compare website performance between mobile and desktop devices

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
categoriesNo
throttlingNoWhether to throttle the audit (default: false)
includeDetailsNoInclude detailed metrics and recommendations

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate safety. However, it adds no extra behavioral context such as how the comparison is structured, whether it returns a single report or dual reports, or any throttling implications. With annotations covering the read-only nature, the description provides marginal added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero filler. It delivers the core purpose immediately and does not elaborate unnecessarily.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, annotations cover safety, and an output schema exists so return format details are not required. However, the description lacks usage guidance and does not mention any special considerations (e.g., throttling, category selection) that an agent might need to know for effective invocation. It is minimally sufficient but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% (high), and all parameters have descriptive names and default values in the schema. The description adds no parameter-specific meaning beyond what the schema already provides. The baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (compare) on a defined resource (website performance) between mobile and desktop devices. It clearly distinguishes itself from sibling audit tools like run_audit or get_performance_score, which focus on single-device audits or individual metric categories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given on when to use this tool versus alternatives. It does not mention that it is the preferred tool when a mobile/desktop comparison is needed, nor does it exclude cases where a single-device audit would suffice. The usage context is only implied by the tool's name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_unused_javascriptFind Unused JavaScriptB
Read-only

Find unused JavaScript code to reduce bundle size

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop
minBytesNoMinimum unused bytes to report (default: 2048)

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
deviceYes
summaryYes
timestampYes
unusedFilesYes
thresholdBytesNo
recommendationsYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=true and openWorldHint=true, so the tool's non-destructive and open-world behavior is covered, and the description does not contradict the annotations. The description adds little beyond the generic 'find' behavior—no mention of how the scan is performed, what resources are fetched, or what output to expect—so it stays at the baseline for annotation-covered tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that immediately states the tool's core function. It avoids filler and front-loads the verb and resource, making it easy for an agent to parse at a glance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the schema, annotations, and output schema fill in a lot. However, the description does not mention the need for a URL or clarify how this audit relates to the many other audit siblings, leaving the agent without enough context to confidently choose and invoke it among the broader toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage of the input parameters is 100%, so the baseline is 3. The description mentions bundle size, which loosely relates to minBytes, but it does not add detail about how url, device, or minBytes interplay; the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Find') and a concrete resource ('unused JavaScript code'), and adds the motivating goal of reducing bundle size. It is clear enough to be distinguished from performance scoring tools, but it does not explicitly differentiate it from a sibling like analyze_resources, so it misses the 5 criterion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as get_performance_score, analyze_resources, or run_audit. There are no conditions, prerequisites, or exclusion criteria—only a one-line purpose statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accessibility_scoreGet Accessibility ScoreB
Read-only

Get the accessibility score and recommendations for a website

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop
includeDetailsNoInclude detailed metrics and recommendations

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only restates the purpose and adds no behavioral traits beyond the annotations. Annotations declare readOnlyHint and openWorldHint, but the description does not disclose what an audit entails (e.g., live network request, duration, caching). Since annotations are present, the burden is lower, but the description adds no value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, clear sentence with no redundancy. The primary action and outcome are front-loaded. Perfectly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has an output schema (though not shown), and full schema coverage. The description is adequate but omits context about how the audit is performed (live vs. cached) and what 'recommendations' entail. Given the complexity level, this is a minimum-viable description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all parameters, including device enum and includeDetails. The description does not elaborate on parameters, but the schema carries the full burden. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'accessibility score and recommendations for a website'. It distinguishes itself from performance, SEO, and security siblings by naming the accessibility domain, but does not explicitly reference alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. It does not mention prerequisites, use cases, or exclusions. An agent would have to infer from the name that it is for accessibility audits only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_core_web_vitalsGet Core Web VitalsA
Read-only

Get Core Web Vitals metrics for a website

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop
thresholdNo
includeDetailsNoInclude detailed metrics and recommendations

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and openWorldHint=true, meaning the tool performs a safe, read-only operation. The description adds no new behavioral information beyond the name, but given the annotations already cover the safety and non-mutating nature, the description's transparency is adequate. It does not contradict annotations, and the openWorldHint suggests the tool may reach external websites, which is not disclosed in the description but is implied by the term 'website'. The absence of details about rate limits or external dependencies is minor since the tool is read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly states the tool's purpose. Every word is meaningful; there is no fluff or repetition. It is appropriately front-loaded, with the verb 'Get' immediately clarifying the action. This is a model of conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters, nested threshold object, output schema present), the description is relatively sparse, but the robust input schema and presence of an output schema reduce the need for extensive description. The description covers the 'what' but not the 'how' or nuances like how thresholds affect evaluation or what 'detailed metrics' entails. With the output schema handling return values and the schema handling parameters, the description is sufficient for a read-only tool, so it slightly exceeds the minimum viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all parameters with reasonable detail (url, device, threshold object with fields, includeDetails). The schema description coverage is 75%, so most parameters are documented. The description does not add any additional meaning beyond what the schema provides; for example, it doesn't explain how thresholds are used or how includeDetails alters the output. With high coverage, the baseline is 3, and the description contributes minimal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get Core Web Vitals metrics for a website' clearly identifies the specific metrics (Core Web Vitals) and the resource (a website), using a precise verb. It is specific enough to distinguish it from generic measures like 'get_performance_score', though it could name a specific competitor (e.g., get_performance_score) to further differentiate. The title and description are aligned, with the description adding 'metrics' to clarify the resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus siblings such as 'get_performance_score' or 'compare_mobile_desktop'. However, the purpose is clear enough that an agent can infer it is for Core Web Vitals (LCP, INP, CLS) specifically, which is a subset of performance. There are no exclusions or alternatives mentioned, so the usage context is implied rather than explicit, warranting a mid-range score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lcp_opportunitiesGet LCP OpportunitiesB
Read-only

Get LCP optimization opportunities for a website

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop
thresholdNoLCP threshold in seconds (default: 2.5)
includeDetailsNoInclude detailed metrics and recommendations

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description itself adds little behavioral context, such as whether the tool performs a live network audit or how results are ordered, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or repetition. It states the essential purpose efficiently, and nothing extraneous is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema and complete parameter documentation reduce the need for the description to explain return values or parameters. However, the lack of usage guidance relative to sibling tools and the absence of operational caveats leave the overall context only adequate, not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter is documented with types, defaults, enums, and constraints. The description adds no additional parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb ('Get') and resource ('LCP optimization opportunities for a website'), so an agent understands the tool's core purpose. It does not explicitly distinguish itself from sibling tools such as get_core_web_vitals or get_performance_score, but the LCP-specific focus provides reasonable differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives like get_core_web_vitals, get_performance_score, or run_audit. There are no stated exclusions, prerequisites, or context cues, leaving the agent to infer selection based solely on the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_performance_scoreGet Performance ScoreC
Read-only

Get the performance score for a website

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral information beyond the annotations. It does not state that the tool fetches a live URL, runs a Lighthouse audit, or that it may take time or require network access. With readOnlyHint and openWorldHint already provided, the description contributes nothing extra.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no wasted words. It is appropriately concise for the tool's simplicity, though it is not front-loaded with any additional context because there is none.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with an output schema, the description is minimally adequate but lacks key contextual details such as what constitutes a 'performance score' (e.g., Lighthouse metric), prerequisites like URL accessibility, or any potential variability. Given the existence of siblings, it is not sufficiently complete to guide correct selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% as both 'url' and 'device' are described in the input schema. The description adds no additional meaning about the parameters or their usage, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('get') and resource ('performance score for a website'), making the intent clear. However, it does not differentiate from nearby siblings like get_core_web_vitals or get_lcp_opportunities, which also relate to performance metrics, so there is a mild ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as get_core_web_vitals or analyze_resources. No exclusions or recommended contexts are provided, leaving an agent to infer the appropriate choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_security_auditGet Security AuditA
Read-only

Perform security audit checking HTTPS, CSP, and other security measures

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
checksNoSpecific security checks to perform
deviceNoDevice to emulate (default: desktop)desktop

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered; the description adds that it checks HTTPS/CSP and 'other security measures', which is useful but thin. It does not mention network behavior toward the target URL or response characteristics, though openWorldHint partially implies external access. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action ('Perform security audit') and gives concrete examples of check types. The tail 'and other security measures' is slightly vague but functions as a pointer to the schema's enum without bloating the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, full parameter documentation in the schema, and annotations covering the read-only/open-world safety profile, the description is largely sufficient for correct invocation. The notable gap is the missing relationship to 'run_audit', which is the one sibling that could genuinely confuse tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — url, checks, and device are all documented in the input schema, so the description carries no required burden. The mention of 'HTTPS, CSP' marginally reinforces the enum values in the 'checks' parameter, but adds little beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('security audit') and concrete focus areas (HTTPS, CSP), which cleanly separates it from the nine accessibility/SEO/performance siblings. However, it does not distinguish itself from the overlapping sibling 'run_audit', whose scope is left undefined, so an agent cannot fully tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the security focus and the 'checking HTTPS, CSP' phrasing, which suggests this is the tool for security-related audits. There is no explicit statement of when to prefer it over 'run_audit' or when not to use it, leaving the selection logic to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_seo_analysisGet SEO AnalysisC
Read-only

Get SEO analysis and recommendations for a website

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop
includeDetailsNoInclude detailed metrics and recommendations

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds no further behavioral context such as rate limits, time expectations, or the nature of external fetches, offering minimal value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently states the core purpose. It is appropriately concise for a tool whose parameters and return format are fully specified in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the large set of specialized audit siblings, the description is thin on context for selection. It doesn't mention that this provides a comprehensive overview or when to prefer it over targeted tools, and it omits any note about output shape (though the output schema covers that). The lack of usage guidance undermines completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides full descriptions for all three parameters at 100% coverage. The description adds no extra meaning, so the baseline of 3 applies. Nothing is lacking in terms of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves SEO analysis and recommendations for a website, using a specific verb and resource. While it doesn't explicitly contrast with sibling audit tools, the name and resource make it distinct from performance, accessibility, and security-specific tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to choose this tool over alternative audit or metric tools. An agent must infer from the name that it covers general SEO, with no explicit exclusions or references to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_auditRun Lighthouse AuditB
Read-only

Run a comprehensive Lighthouse audit on a website

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to audit
deviceNoDevice to emulate (default: desktop)desktop
categoriesNo
throttlingNoWhether to throttle the audit (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
summaryYes
recommendationsNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe read operation. The description adds 'comprehensive' but doesn't disclose behavioral traits like the fact that it runs multiple categories, the time it takes, or that it may be slower than targeted audits. With annotations covering safety, the description adds minimal behavioral context beyond the word 'comprehensive'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no waste. It's front-loaded with the verb and resource. It could be slightly more informative, but it's concise and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema (not shown) and 4 parameters with 75% schema coverage. The description is minimal but the schema and annotations carry some weight. However, given the complexity of a Lighthouse audit (multiple categories, device emulation, throttling), the description could explain what 'comprehensive' means and how it relates to the sibling tools. It's adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so most parameters are documented in the schema. The description doesn't add any parameter-specific meaning beyond what the schema provides. The 'categories' parameter has an enum with 'agentic-browsing' which is unusual, but the description doesn't explain it. Baseline 3 is appropriate since the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Run') and resource ('Lighthouse audit'), and the title clarifies it's a website audit. It's clear what the tool does, though it doesn't explicitly differentiate from siblings like get_performance_score or get_accessibility_score, which are more specific. The description is broad but not misleading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for running a comprehensive audit, but it doesn't explicitly state when to use this tool versus the more specific sibling tools (e.g., get_performance_score, get_accessibility_score). It doesn't mention alternatives or exclusions. The context signals show many sibling tools that are more targeted, so the description should guide the agent on when to choose this comprehensive audit over those.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv1.0.27
    • Changedanalyze_resources1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "device": {
        +      "type": "string"
        +    },
        +    "filters": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "minSizeKB": {
        +          "type": "number"
        +        },
        +        "resourceTypes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "resourceTypes",
        +        "minSizeKB"
        +      ],
        +      "type": "object"
        +    },
        +    "optimization": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "priorities": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "recommendations": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "recommendations",
        +        "priorities"
        +      ],
        +      "type": "object"
        +    },
        +    "resources": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "filename": {
        +            "type": "string"
        +          },
        +          "mimeType": {
        +            "type": "string"
        +          },
        +          "sizeKB": {
        +            "type": "number"
        +          },
        +          "type": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "filename",
        +          "type",
        +          "sizeKB",
        +          "mimeType",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "resourceCounts": {
        +          "additionalProperties": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "type": "number"
        +              },
        +              "sizeKB": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "count",
        +              "sizeKB"
        +            ],
        +            "type": "object"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "totalResources": {
        +          "type": "number"
        +        },
        +        "totalSizeKB": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "totalResources",
        +        "totalSizeKB",
        +        "resourceCounts"
        +      ],
        +      "type": "object"
        +    },
        +    "timestamp": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "url",
        +    "device",
        +    "timestamp",
        +    "filters",
        +    "summary",
        +    "resources",
        +    "optimization"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_performance_budget1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "overallPassed": {
        +          "type": "boolean"
        +        },
        +        "results": {
        +          "additionalProperties": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "actual": {
        +                "type": "number"
        +              },
        +              "budget": {
        +                "type": "number"
        +              },
        +              "difference": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "passed": {
        +                "type": "boolean"
        +              },
        +              "unit": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "actual",
        +              "budget",
        +              "unit",
        +              "passed",
        +              "difference"
        +            ],
        +            "type": "object"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "overallPassed",
        +        "results",
        +        "fetchTime"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Removedcheck_pwa_readiness
    • Changedcompare_mobile_desktop2 fields changed
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "performance",
        -  "accessibility",
        -  "best-practices",
        -  "seo",
        -  "pwa"
        -]New value: +[
        +  "performance",
        +  "accessibility",
        +  "best-practices",
        +  "seo",
        +  "agentic-browsing"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "differences": {
        +          "additionalProperties": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "better": {
        +                "enum": [
        +                  "mobile",
        +                  "desktop"
        +                ],
        +                "type": "string"
        +              },
        +              "desktop": {
        +                "type": "number"
        +              },
        +              "difference": {
        +                "type": "number"
        +              },
        +              "mobile": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "mobile",
        +              "desktop",
        +              "difference",
        +              "better"
        +            ],
        +            "type": "object"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "includeDetails": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "differences"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedfind_unused_javascript1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "device": {
        +      "type": "string"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "hasUnusedCode": {
        +          "type": "boolean"
        +        },
        +        "totalFilesAnalyzed": {
        +          "type": "number"
        +        },
        +        "totalUnusedKB": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "totalUnusedKB",
        +        "totalFilesAnalyzed",
        +        "hasUnusedCode"
        +      ],
        +      "type": "object"
        +    },
        +    "thresholdBytes": {
        +      "type": "number"
        +    },
        +    "timestamp": {
        +      "type": "string"
        +    },
        +    "unusedFiles": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "filename": {
        +            "type": "string"
        +          },
        +          "totalKB": {
        +            "type": "number"
        +          },
        +          "unusedKB": {
        +            "type": "number"
        +          },
        +          "unusedPercent": {
        +            "type": "number"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "filename",
        +          "totalKB",
        +          "unusedKB",
        +          "unusedPercent",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "url": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "url",
        +    "device",
        +    "timestamp",
        +    "summary",
        +    "unusedFiles",
        +    "recommendations"
        +  ],
        +  "type": "object"
        +}
    • Changedget_accessibility_score1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "accessibilityScore": {
        +          "type": "number"
        +        },
        +        "audits": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "type": "string"
        +              },
        +              "displayValue": {
        +                "type": "string"
        +              },
        +              "score": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "title": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "title",
        +              "score",
        +              "displayValue"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "includeDetails": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "accessibilityScore",
        +        "fetchTime",
        +        "includeDetails"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_core_web_vitals3 fields changed
      • removedInput schema / properties / threshold / properties / fid
        Removed value: -{
        -  "description": "First Input Delay threshold in milliseconds",
        -  "minimum": 0,
        -  "type": "number"
        -}
      • addedInput schema / properties / threshold / properties / inp
        Added value: +{
        +  "description": "Interaction to Next Paint threshold in milliseconds (compared against TBT in lab runs)",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "coreWebVitals": {
        +          "additionalProperties": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "score": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "title": {
        +                "type": "string"
        +              },
        +              "value": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "title",
        +              "value"
        +            ],
        +            "type": "object"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "includeDetails": {
        +          "type": "boolean"
        +        },
        +        "thresholdResults": {
        +          "additionalProperties": {
        +            "anyOf": [
        +              {
        +                "type": "boolean"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "coreWebVitals",
        +        "thresholdResults",
        +        "fetchTime"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_lcp_opportunities1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "includeDetails": {
        +          "type": "boolean"
        +        },
        +        "lcpValue": {
        +          "type": "number"
        +        },
        +        "needsImprovement": {
        +          "type": "boolean"
        +        },
        +        "opportunities": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "type": "string"
        +              },
        +              "displayValue": {
        +                "type": "string"
        +              },
        +              "id": {
        +                "type": "string"
        +              },
        +              "numericValue": {
        +                "type": "number"
        +              },
        +              "score": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "title": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "threshold": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "lcpValue",
        +        "threshold",
        +        "needsImprovement",
        +        "opportunities",
        +        "fetchTime"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_performance_score1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "metrics": {
        +          "additionalProperties": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "score": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "title": {
        +                "type": "string"
        +              },
        +              "value": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "title",
        +              "value"
        +            ],
        +            "type": "object"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "performanceScore": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "performanceScore",
        +        "metrics",
        +        "fetchTime"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_security_audit2 fields changed
      • changedInput schema / properties / checks / items / enum
        Previous value: -[
        -  "https",
        -  "mixed-content",
        -  "csp",
        -  "hsts",
        -  "vulnerabilities"
        -]New value: +[
        +  "https",
        +  "csp",
        +  "hsts",
        +  "origin-isolation",
        +  "clickjacking",
        +  "trusted-types",
        +  "third-party-cookies",
        +  "deprecations"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "auditCount": {
        +          "type": "number"
        +        },
        +        "audits": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "type": "string"
        +              },
        +              "displayValue": {
        +                "type": "string"
        +              },
        +              "id": {
        +                "type": "string"
        +              },
        +              "score": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "status": {
        +                "enum": [
        +                  "pass",
        +                  "fail",
        +                  "warning"
        +                ],
        +                "type": "string"
        +              },
        +              "title": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "title",
        +              "description",
        +              "score",
        +              "displayValue",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "failedAudits": {
        +          "type": "number"
        +        },
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "overallScore": {
        +          "type": "number"
        +        },
        +        "passedAudits": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "overallScore",
        +        "audits",
        +        "auditCount",
        +        "passedAudits",
        +        "failedAudits",
        +        "fetchTime"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedget_seo_analysis1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "audits": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "description": {
        +                "type": "string"
        +              },
        +              "displayValue": {
        +                "type": "string"
        +              },
        +              "score": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "title": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "title",
        +              "score",
        +              "displayValue"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "includeDetails": {
        +          "type": "boolean"
        +        },
        +        "seoScore": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "seoScore",
        +        "fetchTime",
        +        "includeDetails"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Changedrun_audit2 fields changed
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "performance",
        -  "accessibility",
        -  "best-practices",
        -  "seo",
        -  "pwa"
        -]New value: +[
        +  "performance",
        +  "accessibility",
        +  "best-practices",
        +  "seo",
        +  "agentic-browsing"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "categories": {
        +          "additionalProperties": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "score": {
        +                "type": "number"
        +              },
        +              "title": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "title",
        +              "score"
        +            ],
        +            "type": "object"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "metrics": {
        +          "additionalProperties": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "score": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "title": {
        +                "type": "string"
        +              },
        +              "value": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "title",
        +              "value"
        +            ],
        +            "type": "object"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "version": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "categories",
        +        "metrics",
        +        "version",
        +        "fetchTime"
        +      ],
        +      "type": "object"
        +    },
        +    "recommendations": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "summary": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "data"
        +  ],
        +  "type": "object"
        +}
  2. 12 tool updatesv1.0.26
    • Addedanalyze_resources
    • Addedcheck_performance_budget
    • Addedcheck_pwa_readiness
    • Addedcompare_mobile_desktop
    • Addedfind_unused_javascript
    • Addedget_accessibility_score
    • Addedget_core_web_vitals
    • Addedget_lcp_opportunities
    • Addedget_performance_score
    • Addedget_security_audit
    • Addedget_seo_analysis
    • Addedrun_audit

TDQS

B3.3/5.0

Scored across 11 tools

Disambiguation2/5

There is significant overlap between run_audit and the specific getter tools (accessibility, SEO, performance), as run_audit likely encompasses all of those. Additionally, get_lcp_opportunities, find_unused_javascript, and analyze_resources all target performance optimization with unclear boundaries.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (e.g., get_*, run_audit, compare_mobile_desktop, check_performance_budget). Minor deviations include run_audit vs. get_security_audit (both use 'audit' but different verbs) and find_unused_javascript/analyze_resources not using 'get_' prefix, but the overall convention is consistent.

Tool Count5/5

With 11 tools, the set is well-scoped for a website auditing server. Each tool covers a distinct aspect of Lighthouse auditing (performance, SEO, accessibility, security, resources), and the count is within the ideal 3-15 range without feeling bloated.

Completeness4/5

The tool surface covers major Lighthouse categories (performance, accessibility, SEO, security, Core Web Vitals, resources) and includes useful extras like budget checks and mobile/desktop comparison. However, it lacks explicit best practices and PWA audits, which are standard Lighthouse categories, creating minor gaps.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

  • MCP server for building and testing AI agents with multi-model experimentation and insights.

  • SEO MCP server: crawl your site, find AI-visibility gaps, and ship the fix from your coding agent.

  • Website QA for your coding agent: audit SEO, performance, security, accessibility over MCP.

  • Your agent needs to crawl a site and say what is wrong with it — broken tags, duplicate content, pages nothing can index, resources that never load. **What you can ask for** • "Crawl this site and list every page with a duplicate title or missing description." • "Which pages are non-indexable, and why?" • "Run Lighthouse on these URLs and give me the failing audits." • "Show the internal link graph and the orphan pages." • "Give me this page's raw HTML and its microdata." **How to use it** Point any MCP client at https://mcp.aisa.one/seo-onpage/mcp and sign in with OAuth — there is no key to create or paste. 20 tools: submit a crawl and read its summary, pages, resources, links and waterfall; duplicate content and duplicate tags; keyword density; non-indexable and uncrawlable resources; parsed content, raw HTML, microdata, screenshots and Lighthouse. **Why this rather than the source** A crawler you drive from the agent, with the audit results as structured data rather than a PDF. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the broken pages here, then ask the same agent what those pages used to rank for — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo/mcp for all of it at once — rankings, keywords, backlinks, site health and AI-answer visibility across DataForSEO, Semrush and Ahrefs.

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A comprehensive MCP server providing 15 web tools including search, scraping, screenshots, SEO audits, and DNS/SSL checks through a single installation. It delivers clean, LLM-optimized outputs so AI agents can focus on reasoning rather than parsing raw HTML.
    15
    17 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to perform comprehensive SEO audits on web pages, including meta tags, headings, links, images, performance, and more, via a CLI or MCP server.
    18
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for SEO, performance, GEO, and UX audits with 37 tools covering technical SEO, Lighthouse performance, AI search optimization, content analysis, accessibility, security, and more.
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    An MCP server that audits websites for accessibility (WCAG 2.1 AA/EAA), performance, SEO, design quality, and mobile responsiveness, providing actionable scores, grades, and prioritized fixes.
    6
    -