Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Scan URLs or HTML for WCAG 2.2 violations. 75-rule manifest, weighted score, shareable reports.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://api.lazynext.com/mcp在终端中运行这条命令
claude mcp add --transport http accessibility-checker https://api.lazynext.com/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"accessibility-checker": {
"url": "https://api.lazynext.com/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"accessibility-checker": {
"type": "http",
"url": "https://api.lazynext.com/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://api.lazynext.com/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过域名 lazynext.com 验证(注册中心会核实域名所有权)
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(1.0.0)于35天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Systemdox
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Your architecture in your agents' context: checks, specs, ADRs and docs over MCP, at write time.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Real WCAG 2.1 accessibility audits: paste a URL, we render the page in actual Chromium, press Tab to trace keyboard focus, compute color contrast from computed styles, and return a scored report with rule citations you can file as tickets.
Live: 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": "you@example.com", "email_report": true}'
The score is severity-weighted: confirmed WCAG level-A failures count in full, AA/AAA findings progressively less, warn-class heuristics at half, and repeat occurrences of the same rule at half marginal cost — a page full of minor nits outscores one with a few blocking failures.
Endpoints: POST /scan (html or url; {"url": ..., "site": true} crawls same-origin pages — 3 free / 10 Pro — and returns per-page scores; real-site scans also return benchmark — where the score ranks vs the corpus of sites scanned by this tool, shown once ≥10 sites are in), GET /checkout (trial → paid), POST /cancel (self-service cancellation by purchase email), POST /lead (email capture), GET /report/:id (shareable report — ?level=A|AA|AAA|BP, ?rule= , ?by=page views; CSV/JSON/PDF exports honor them), GET /badge/:id.svg (embeddable score badge for a report), GET /rules (the coverage manifest — 74 WCAG criteria + 1 best-practice check; name, level, WCAG version, and detection path for every check emitted; Accept: text/html returns a browsable catalog, JSON is the default), GET /openapi.json (OpenAPI 3.1 contract for the whole REST surface), POST /monitor / GET /monitor?license= / DELETE /monitor (Pro daily monitoring — platform rescans each registered URL and emails a Brevo alert when a page's score drops ≥ 10 points), GET /health.
POST /mcp, JSON-RPC 2.0 (initialize, tools/list, tools/call; GET is 405, no SSE). Tools: scan_url, scan_html, get_report, list_rules. Add to an MCP client: {"mcpServers": {"a11y": {"url": "https://checker.lazynext.com/mcp"}}}GET /.well-known/agent.json; POST /a2a handles message/send (send a text part containing a URL or HTML), tasks/send (alias), and tasks/get (the task id is the persisted report id). Scans return as completed tasks with the report artifact. mounts a Shadow-DOM scan box anywhere; optional data-license="buyer@x.com" for Pro./scan free quota (3 URL scans/day/IP) and persist the same 30-day reports.import { AccessibilityChecker } from './sdk/js/index.js';
const a11y = new AccessibilityChecker({ license: 'buyer@x.com' }); // 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("buyer@x.com") // 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="buyer@x.com") # 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 # CSV to stdout (--json for the object) lazynext-a11y monitor add --license buyer@x.com
sdk/js — index.js + index.d.ts, zero deps, Node 18+ and browsers; bin: entry lazynext-a11y (node sdk/js/bin/cli.js pre-install)sdk/go — checker package, standard library only (go build clean)sdk/python — lazynext_a11y module, stdlib only (pip install sdk/python)scripts/ci-scan.mjs — CI gate: node scripts/ci-scan.mjs --url --fail-under 80src/rules/additional.js): heading content (2.4.6), label-in-name (2.5.3), viewport max-scale (1.4.4), text spacing overrides (1.4.10), language-of-parts (3.1.2), status messages (4.1.3), focus visibility (2.4.7 — inline + stylesheet outline suppression), timed refresh (2.2.1), autoplay/moving content (1.4.2/2.2.2), autocomplete tokens (1.3.5), onfocus context change (3.2.1), onchange auto-submit (3.2.2), accesskey / single-char shortcuts (2.1.4), images of text (1.4.5), multiple navigation mechanisms (2.4.5), justified text without hyphenation (1.4.8 — warn-class heuristic), accessible-name coverage for icon-only controls (4.1.2), motion actuation (2.5.4), orientation lock (1.3.4), hover/focus content without Escape dismissal (1.4.13 — warn-class), and down-event navigation (2.5.2). Plus static coverage for what previously needed the browser: duplicate ids (4.1.1), dangling label/aria/label-for references + iframe titles + invalid role/aria-attribute names + aria-hidden focusables + nested interactive elements (4.1.2), stray list/dl items + fieldset/optgroup/table structure + deprecated presentational markup (1.3.1), image inputs/areas/canvas/svg without alternatives (1.1.1), media without caption tracks (1.2.1), autofocus (3.2.1), role/tabindex/scrollable keyboard gaps (2.1.1), javascript:/dead/dangling-fragment links (2.4.4), blink content (2.3.1), sensory-only instructions (1.3.3 — warn-class), unassociated labels (3.3.2), missing section headings on long content (2.4.10 — AAA advisory), and unnamed duplicate landmarks (1.3.1) markers, so markup rules cover encapsulated content; the focus census and Tab trace pierce open roots too. Closed roots can't be pierced by design — an honest gap. Element rules ignore bodies, so markup-shaped JS strings can't double-count real elementssrc/rules/crosspage.js, site scans): consistent navigation (3.2.3), consistent identification (3.2.4), consistent help mechanisms (3.2.6)src/rules/wcag22.js adds 2.2-era checks (accessible auth 3.3.8, redundant entry 3.3.7, dragging 2.5.7, …); src/rules/section508.js maps findings to 36 CFR 1194 clausestarget=_blank without noopener, media captions, table headers, skip links/checkout (Dodo Payments)POST /cancel or the site's cancel linksrc/scanner.js — dependency-free WCAG engine (the same module the API runs)src/rules/ — additional (per-page statics), crosspage (site-scan checks), focuscycle, wcag22, section508 — all wired into the scan pipelinesrc/crawl.js + src/monitor.js — same-origin site crawl (3 pages free / 10 Pro) and scheduled rescan-with-alert monitorsworker.js — Cloudflare Worker: scan API, rate limits, license checks, shareable reports, lead capture, trial checkout, self-service cancel, emailed Pro reports, MCP/A2A/widget/PWA surfacessrc/openapi.js — OpenAPI 3.1 contract served at /openapi.json; src/rules_catalog.js — the HTML coverage catalog /rules negotiates toindex.html — the Pages site (scan UI, site scans, monitors, trial CTA, cancel, email-report opt-in, 402 lead funnel, localStorage scan history)action.yml + scripts/ci-scan.mjs — GitHub Action for CI gatingGate a deploy on accessibility score:
- uses: Lazynext-AI/accessibility-checker@main
with: url: https://staging.example.com fail-under: 80 # fail the build below this score
Outputs score and issues; findings land in the step summary with the report link. Standalone: node scripts/ci-scan.mjs --url --fail-under 80.
scripts/ — sync-page.mjs regenerates the embedded UI bundle, deploy.mjs deploys with full bindings (never wrangler deploy), ci-scan.mjs is the CI/standalone CLItest/ — node --test suite (277 tests), runs in CI on every pushBuilt and operated autonomously by Lazynext agents.