mcpField
L

Lazynext Accessibility Checker

远程服务
checker.lazynext.com开发工具04 天前更新

关于 Lazynext Accessibility Checker

Lazynext Accessibility Checker 扫描渲染后的网页或 HTML,检查 WCAG 无障碍问题,并生成按严重程度加权的评分和可分享报告。开发者和网站团队可通过 API、MCP 工具、SDK 及 CI 扫描使用它。

主要功能

  1. 01扫描渲染后的 URL 和 HTML
  2. 02按严重程度加权评分
  3. 03键盘焦点与对比度检查
  4. 04网站爬取与每日监控
  5. 05可分享报告及导出
  6. 06SDK、命令行与 CI 门禁

适用场景

  1. 01发布前检查网页
  2. 02审查整个网站的无障碍情况
  3. 03按评分阈值门禁 CI 构建
  4. 04通过报告链接分享问题

MCP 相关

MCP 端点提供 `scan_url`、`scan_html`、`get_report` 和 `list_rules` 工具。MCP 扫描使用与 `/scan` API 相同的配额,并保存为同类报告。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://api.lazynext.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

4
参数类型必填说明
urlstring是要扫描的 http(s) URL
siteboolean否抓取同源页面(免费版 3 个 / Pro 版 10 个)
licensestring否Pro 许可证邮箱(可选)
viewportenum否渲染配置——移动设备 390×844 手持设备(默认);桌面设备保留移动端之前的基准渲染mobile | desktop

详细介绍

无障碍检查器

真正的 WCAG 2.1 无障碍审计:粘贴 URL,我们会在真实的 Chromium 中渲染页面,按 Tab 键追踪键盘焦点,根据计算后的样式计算颜色对比度,并返回带评分的报告,附上规则引用,可直接据此创建工单。

在线体验: https://checker.lazynext.com/ API: https://accessibility-checker.dry-hall-6a50.workers.dev

curl -X POST https://accessibility-checker.dry-hall-6a50.workers.dev/scan \
  -H 'content-type: application/json' \
  -d '{"url": "https://yoursite.com", "license": "[email protected]", "email_report": true}'
# → {"score": 70, "score_model": "weighted-v1", "issues": [{"rule": "wcag-1.3.1", ...}],
#    "rendered": true, "benchmark": {"pct": 61, "sites": 128},
#    "report": ".../report/<id>"}

评分按严重程度加权:已确认的 WCAG A 级问题按完整权重计分,AA/AAA 级问题的权重逐级降低,警告类启发式检查按一半权重计分,同一规则的重复问题按一半边际成本计分——满是小瑕疵的页面,得分会高于存在几个阻断性问题的页面。

端点:POST /scan(html 或 url;{"url": ..., "site": true} 会抓取同源页面——免费版 3 个 / Pro 版 10 个——并返回每页评分;真实网站扫描还会返回 benchmark——该评分相对于此工具已扫描网站集合的排名,扫描网站达到 ≥10 个后显示), GET /checkout(从试用版升级为付费版), POST /cancel(通过购买时使用的邮箱自助取消), POST /lead(收集邮箱),GET /report/:id(可分享的报告——支持 ?level=A|AA|AAA|BP、?rule=<id>、?by=page 视图;CSV/JSON/PDF 导出遵循这些筛选条件), GET /badge/:id.svg(可嵌入报告的评分徽章), GET /rules(覆盖范围清单——涵盖 74 项 WCAG 标准和 1 项最佳实践检查;列出每项检查的名称、级别、WCAG 版本和检测方式;Accept: text/html 返回可浏览的目录,默认返回 JSON), GET /openapi.json(涵盖整个 REST 接口的 OpenAPI 3.1 契约), POST /monitor / GET /monitor?license= / DELETE /monitor(Pro 每日监控——平台会重新扫描每个已注册的 URL,并在页面评分下降 ≥ 10 分时发送 Brevo 警报邮件),GET /health。

Agent 接入方式

  • MCP — POST /mcp,JSON-RPC 2.0(initialize、tools/list、tools/call;GET 返回 405,不支持 SSE)。工具:scan_url、scan_html、get_report、list_rules。添加到 MCP 客户端: {"mcpServers": {"a11y": {"url": "https://checker.lazynext.com/mcp"}}
  • A2A — Agent 卡片位于 GET /.well-known/agent.json;POST /a2a 处理 message/send(发送包含 URL 或 HTML 的文本部分)、tasks/send(别名)和 tasks/get(任务 ID 即持久化报告 ID)。扫描会以已完成任务的形式返回,并附带报告产物。
  • Widget — <script src="https://checker.lazynext.com/widget.js" data-target="#el"></script> 可在任意位置挂载 Shadow DOM 扫描框;Pro 用户可选填 data-license="[email protected]"。
  • 通过 MCP/A2A 执行的扫描共用 /scan 免费配额(每天每个 IP 3 次 URL 扫描),并持久保存相同的 30 天报告。

SDK + CLI

import { AccessibilityChecker } from './sdk/js/index.js';
const a11y = new AccessibilityChecker({ license: '[email protected]' }); // license optional
const { score, issues, report } = await a11y.scan({ url: 'https://example.com' });
await a11y.site('https://example.com');   // same-origin crawl
await a11y.report(id);                     // stored report object (.json export)
await a11y.reportCsv(id);                  // CSV export
await a11y.rules();                        // full coverage manifest
c := checker.New("[email protected]")            // license optional
res, err := c.Scan(checker.ScanOptions{URL: "https://example.com"})
rep, _ := c.Report(id)                     // stored report object (.json export)
rules, _ := c.Rules()
from lazynext_a11y import AccessibilityChecker   # sdk/python, stdlib only
c = AccessibilityChecker(license="[email protected]")  # license optional
res = c.scan(url="https://example.com")
lazynext-a11y scan https://example.com --site    # bin/cli.js in sdk/js
lazynext-a11y rules --pretty
lazynext-a11y report <id>                        # CSV to stdout (--json for the object)
lazynext-a11y monitor add <url> --license [email protected]
  • sdk/js — index.js + index.d.ts,零依赖,支持 Node 18+ 和浏览器;bin: 入口为 lazynext-a11y(安装前可运行 node sdk/js/bin/cli.js)
  • sdk/go — checker 包,仅使用标准库(go build 可顺利完成)
  • sdk/python — lazynext_a11y 模块,仅使用标准库(pip install sdk/python)
  • scripts/ci-scan.mjs — CI 门禁:node scripts/ci-scan.mjs --url <u> --fail-under 80

检查内容

  • 渲染后的 DOM(通过 Cloudflare Browser Rendering):地标、标题、图片替代文本、表单标签关联(包括标签包裹)、含糊的链接文本、视口缩放锁定
  • 计算样式对比度(WCAG 1.4.3 + 1.4.6):基于实际绘制样式进行亮度计算——普通文本 4.5:1 / 大号文本 3:1,另含 7:1 的增强级别
  • 其他规则(src/rules/additional.js):标题内容(2.4.6)、标签名称一致性(2.5.3)、视口最大缩放比例(1.4.4)、文本间距覆盖(1.4.10)、部分内容的语言(3.1.2)、状态消息(4.1.3)、焦点可见性(2.4.7 — 行内 + 样式表轮廓抑制)、定时刷新(2.2.1)、自动播放/移动内容(1.4.2/2.2.2)、自动完成令牌(1.3.5)、焦点时上下文变化(3.2.1)、更改时自动提交(3.2.2)、accesskey / 单字符快捷键(2.1.4)、文字图片(1.4.5)、多种导航机制(2.4.5)、未启用连字符断词的两端对齐文本(1.4.8 — warn-class 启发式)、仅图标控件的可访问名称覆盖率(4.1.2)、动作触发运动(2.5.4)、方向锁定(1.3.4)、不支持通过 Escape 关闭的悬停/焦点内容(1.4.13 — warn-class)以及按下事件导航(2.5.2)。此外还包括此前需要浏览器才能检查的静态覆盖项:重复 ID(4.1.1)、悬空的 label/aria/label-for 引用 + iframe 标题 + 无效的 role/aria-attribute 名称 + 可聚焦的 aria-hidden 元素 + 嵌套交互元素(4.1.2)、多余的列表/dl 项目 + fieldset/optgroup/表格结构 + 已弃用的呈现标记(1.3.1)、没有替代内容的图片输入框/区域/canvas/svg(1.1.1)、没有字幕轨道的媒体(1.2.1)、autofocus(3.2.1)、role/tabindex/可滚动区域的键盘操作缺陷(2.1.1)、javascript:/失效/悬空片段链接(2.4.4)、闪烁内容(2.3.1)、仅依赖感官的说明(1.3.3 — warn-class)、未关联的标签(3.3.2)、长篇内容缺少分节标题(2.4.10 — AAA 建议项)以及未命名的重复地标(1.3.1)
  • 渲染布局检查:目标尺寸 24×24px(2.5.8 — 豁免行内链接和 UA 控件)、焦点未被作者叠加层遮挡(2.4.11)、可见的焦点指示器(2.4.13)、控件边界的非文本对比度(1.4.11 — 与相邻背景相比为 3:1)、文本间距覆盖导致的裁切(1.4.12 — 注入 WCAG 度量,仅检查差值)以及颜色的使用(1.4.1 — 限定于正文:未加下划线的正文链接与周围文本的对比度必须 ≥3:1;按该准则本身,导航/结构性链接不在检查范围内)
  • 键盘:在浏览器中实际按 Tab — 无法通过键盘操作的页面(2.1.1)、焦点陷阱(2.1.2)、焦点顺序缺陷和循环(2.4.3)、对话框的 Escape 处理;静态检查也能捕获粘贴的 HTML 中吞掉 Tab 按键的处理程序和无法关闭的对话框
  • Shadow DOM:渲染扫描会将开放的 shadow root 序列化为 <template shadowrootmode> 标记,因此标记规则也会检查封装内容;焦点盘点和 Tab 跟踪同样会遍历开放的 root。按设计无法遍历封闭的 root——这是明确的局限。元素规则会忽略 <script> 内容,因此形似标记的 JS 字符串不会被重复计为真实元素
  • 跨页面(src/rules/crosspage.js,站点扫描):一致的导航(3.2.3)、一致的识别(3.2.4)、一致的帮助机制(3.2.6)
  • WCAG 2.2 + Section 508:src/rules/wcag22.js 添加 2.2 时代的检查项(可访问的身份验证 3.3.8、冗余输入 3.3.7、拖动 2.5.7,…);src/rules/section508.js 将发现的问题映射到 36 CFR 1194 条款
  • DOM 事实:iframe 标题、重复 ID、可聚焦的 aria-hidden 元素、autofocus、没有 noopener 的 target=_blank、媒体字幕、表头、跳转链接

定价

  • 免费:每个 IP 每天 3 次渲染扫描
  • Pro $9/mo:无限扫描 + 电子邮件报告 — /checkout(Dodo Payments)
    • 14 天免费试用:预先收取银行卡信息,第 14 天自动转为付费;可随时通过 POST /cancel 或网站上的取消链接取消
    • 第 11 天通过电子邮件发送试用到期提醒

架构

  • src/scanner.js — 无依赖的 WCAG 引擎(API 运行的同一模块)
  • src/rules/ — additional(每页静态检查)、crosspage(全站扫描检查)、 focuscycle、wcag22、section508 — 均已接入扫描流程
  • src/crawl.js + src/monitor.js — 同源站点爬取(免费版 3 个页面 / Pro 版 10 个页面)和定时重新扫描并发送提醒的监控器
  • worker.js — Cloudflare Worker:扫描 API、速率限制、许可证检查、 可分享的报告、潜在客户收集、试用版结账、自助取消、 通过电子邮件发送 Pro 报告,以及 MCP/A2A/widget/PWA 界面
  • src/openapi.js — 在 /openapi.json 提供的 OpenAPI 3.1 契约; src/rules_catalog.js — /rules 对应的 HTML 覆盖范围目录
  • index.html — Pages 站点(扫描 UI、站点扫描、监控器、试用版 CTA、 取消、电子邮件报告订阅、402 潜在客户转化漏斗、localStorage 扫描历史)
  • action.yml + scripts/ci-scan.mjs — 用于 CI 门禁的 GitHub Action

GitHub Action

根据无障碍评分控制部署:

- uses: Lazynext-AI/accessibility-checker@main
  with:
    url: https://staging.example.com
    fail-under: 80            # fail the build below this score
    # license: ${{ secrets.A11Y_LICENSE }}   # Pro: higher limits
    # site: true                             # crawl same-origin pages
    # fail-on: wcag-1.1.1,wcag-2.1.2         # rules that always fail

输出 score 和 issues;发现的问题会显示在步骤摘要中,并附带报告链接。独立运行:node scripts/ci-scan.mjs --url <u> --fail-under 80。

  • scripts/ — sync-page.mjs 重新生成嵌入式 UI 包, deploy.mjs 使用完整绑定进行部署(切勿使用 wrangler deploy), ci-scan.mjs 是 CI/独立命令行工具
  • test/ — node --test 测试套件(277 项测试),在 CI 中于每次推送时运行

由 Lazynext agents 自主构建和运维。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。