Kilotest

io.github.jrpool由 GitHub 账号 jrpool 发布v64.0.0更新于 Nov 8, 2026

Ensemble testing of web pages for accessibility, usability, and web standards

已验证Streamable HTTP可网页运行网页搜索与抓取开发者工具

概览

AI 生成的概览

Kilotest 用多规则引擎组合测试网页的无障碍性、可用性与 Web 标准,并让助手浏览和下单获取测试报告。

可以做什么
  • 发现已测试页面及其最新报告标识
  • 查看报告中的问题、违反问题的元素以及各引擎给出的诊断
  • 一次调用获取完整报告的 JSON
  • 申请或立即下单新测试与重测,并等待结果
  • 提交功能请求和对诊断的异议,交由管理员审核
  • 读取服务概览、工作流程与结果结构说明
适用场景
适合让助手检查网页的无障碍性、可用性或 HTML、CSS、ARIA、WCAG 合规情况,查看已有测试结论,或触发一次新测试并读取生成的报告。
运行要求
通过 streamable HTTP 连接 kilotest.com 的远程 MCP 端点;README 说明该 MCP 服务器无需身份验证。未声明任何软件包、环境变量或请求头。实际测试由 Testaro 工作节点执行,单页测试通常需要 2 到 4 分钟。
安装前请注意
多个工具会提交请求或订单并改变服务端状态:新测试、重测、功能请求和诊断异议。订单会被自动批准或拒绝并真正排入测试任务,占用工作节点资源。报告可能包含被测页面的细节,除非部署本就面向内部页面,否则不要提交内部或敏感网址。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Kilotest,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.jrpool%2Fkilotest/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "kilotest": {
      "type": "http",
      "url": "https://kilotest.com/mcp"
    }
  }
}

README

Kilotest

[npm version] [license] [MCP Registry] [GitHub stars] [Indexed on TensorBlock MCP Index] [mcptry] [SealKeeper Service SEAL]

An ensemble testing and reporting service for front-end web quality

Features

This application uses an ensemble of 12 rule engines to test web pages for front-end quality (i.e. accessibility, usability, and web standards, including HTML, CSS, ARIA, and WCAG).

The testing paradigm employed by Kilotest is discussed in these papers:

Kilotest acts as a web server for human users, an MCP server (streamable HTTP, no authentication) for AI platforms, and an API for programmatic access.

Testing for Kilotest is performed by one or more workers (testing agents) that obtain jobs from Kilotest, perform them, and send reports of the results back to Kilotest. Those agents are instances of the Testaro package. Thus, the pages that Kilotest tests need not be on the public Internet. They need only be reachable by the Testaro workers that do the testing for Kilotest. So, one or more Testaro workers running inside a private intranet can test internal pages, as well as any external ones reachable from inside the intranet.

An active production instance of Kilotest may require multiple Testaro workers to handle the load, because testing one web page typically takes 2 to 4 minutes and workers test only one page at a time.

Getting started locally with 1 worker

Installation

In the steps below, hosts T and K may be the same host or two different hosts. Host T can be a Debian stable, Ubuntu LTS, Windows, or macOS host. Host K can be any server host that can run the latest LTS version of Node.js. If hosts T and K differ, then they must be open to https traffic and host K must permit https requests from host T.

  1. Clone the Testaro project into a new directory on host T.
  2. In that directory, install the Testaro dependencies: npm install.
  3. Update the Testaro dependencies and rebuild: npm run deps.
  4. Clone the Kilotest repository into a new directory on host K.
  5. In that directory, install the Kilotest dependencies: npm install.
  6. Copy the env.testaro file from the kilotest directory to .env in the testaro directory and replace the __placeholder__ values in .env with actual values.
  7. Copy the env.example file in the kilotest directory to a new .env file in the same directory and replace the __placeholder__ values in .env with actual values. TESTARO_WORKERS is a JSON object mapping each Testaro worker's ID to an object with its secret and its name; the ID and secret for a worker must match the NETWATCH_URL_WORKER_ID and NETWATCH_URL_AUTH values in that worker's .env. A worker authenticates each request with an HTTP Basic Authorization header (id:secret, base64-encoded); as of this writing that header is not yet sent by the published Testaro package, so this scheme requires a matching update to Testaro's netWatch.js request code (only to send the header; no change to Testaro's handling of jobs or reports is needed). The ID is a credential and is never published; the name is written by Kilotest into a job's and report's sources.worker property, which Testaro does not read or alter, so it is a distinct property from sources.agent (Testaro's own, untrusted, self-reported label, which Kilotest ignores). Choose a name that is safe to appear in every report Kilotest serves. ALLOW_INTERNAL_TARGETS controls whether this deployment can be induced to test pages at private, loopback, or link-local addresses; see SERVICE.md before changing it from its default.

Usage

  1. In the testaro directory, make Testaro start listening for jobs: node call netWatch true nn true, where nn is the number of seconds to wait between checks for new jobs. Note that Kilotest promises nearly immediate review and, on approval, immediate execution of “orders” for tests and retests, with typical total elapsed time 2 to 4 minutes. That promise implies a promise to keep nn small. A reasonable value is between 10 and 20.
  2. In the kilotest directory, start the Kilotest service: node index.

Contributing

Contributions are welcome! You can use GitHub issues to initiate discussions and propose changes. If you want to contribute code, please fork the repository and create a pull request.

Making Kilotest a service

See the SERVICE.md file for instructions on how to make Kilotest a service.

Using Kilotest as an AI tool

Kilotest is not only a web application but also an API and an MCP server. AI platforms and models can use Kilotest via those interfaces.

The public URL for models using the MCP server at kilotest.com is https://kilotest.com/mcp. The MCP server is registered at several registries. See AI-TOOLS.md for details.

There is additional documentation at:

Maintenance

These are the routine steps for maintaining Kilotest as currently deployed.

No API changes

When you make a change in a feature branch without any API or tool contract change:

  1. Stage, commit, and optionally push all changes.
  2. Execute npm run prePR -- <level> (major, minor, or patch).
  3. Submit a pull request.
  4. When all checks succeed, squash-merge to main and delete the feature branch on GitHub.
  5. Execute npm run postPR (with interactive browser authentication).
  6. Wait until npmjs.com has processed the publication.
  7. Use git pull, npm ci, and pm2 restart kilotest (but not npm audit fix) to deploy the revised main branch on the public server.

API changes

When you make an API or tool contract change in a feature branch:

  1. llms.txt, llms-full.txt: Update narrative descriptions of the changed tools or parameters.
  2. capability.md and README.md: Update their prose to describe the changed behavior.
  3. Stage, commit, and optionally push all changes.
  4. Execute npm run prePR -- <level> (major, minor, or patch).
  5. Submit a pull request.
  6. When all checks succeed, squash-merge to main.
  7. Execute npm run postPR (with interactive browser authentication).
  8. Wait until npmjs.com has processed the publication.
  9. Use git pull, npm ci, and pm2 restart kilotest (but not npm audit fix) to deploy the revised main branch on the public server.
  10. Visit the RapidAPI Studio and update the API definition at Hub Listing → Definitions → CI/CD → Import OpenAPI by uploading the regenerated openapi-3.0.yaml.
  11. Visit the Claude directory, edit any changed entries, and submit the changes.

If any step fails, see the details in docs/AI-TOOLS.md for troubleshooting instructions.

来源:README.md,提交 2a56386

工具

11

getOverview

Explain Kilotest and its tools

Explains what Kilotest is, what its tools do, and how its results are structured. Use this before any other tool when the available tools or workflow are unclear; it is unnecessary once you know which tool you need. Returns a prose overview of the Kilotest domain, the tool workflow, and links to further documentation. Kilotest tests web pages for front-end quality with an ensemble of rule engines.

无需输入参数。

listPages

List tested pages

Lists all pages Kilotest has tested. Use this first to discover whether a page already has any reports before requesting a test. Returns, for each tested page, its description, URL, and the identifier of its latest available report. Entries are sorted by page description and are not paginated.

无需输入参数。

listIssues

List issues in a report

Lists the issues reported in one report, along with the history of all reports about the same page. Use this after listPages to switch to an earlier or later report or to begin examining this report. The reportID is the latest report’s identifier from listPages or an earlier identifier from the history this tool returns. Returns the history and the basics about this report’s issues, sorted by summary and not paginated; an unknown or malformed reportID produces an error. The returned issue identifiers are inputs to the listViolators tool. Use getReport instead when the entire report is needed in one call.

输入参数reportID必填

listViolators

List elements exhibiting an issue

Lists the elements of a tested page that were reported as exhibiting one issue in one report. Use this after listIssues to drill down from an issue to the elements violating rules belonging to that issue; the issueID must be one of the issue identifiers listIssues returned for the same reportID; call listIssues first if you do not have an issueID. Returns basics about each violating element, sorted by catalog index and not paginated; an unknown issueID or reportID produces an error.

输入参数issueID必填reportID必填

listDiagnoses

List diagnoses of a violation

Lists the diagnoses that rule engines gave for how one element exhibited one issue in one report. Use this after listViolators to get details about the element as a violator of the issue; the catalogIndex is the element’s identifier in the listViolators output for that issue and report. Use getReport instead when all diagnoses in the report are needed at once. Returns, for each rule engine that reported a violation by the element of a rule belonging to the issue, the diagnosis given by the rule engine; an unknown report, issue, or element produces an error.

输入参数issueID必填reportID必填catalogIndex必填

questionDiagnosis

Question a diagnosis

Questions or contests a diagnosis shown by the listDiagnoses tool; queued for review by management. Use this after listDiagnoses when you believe a rule violation was incorrectly diagnosed or classified into an issue, providing the issueID, reportID, catalogIndex, engineID, and ruleID shown in the diagnosis and your reason. No authorization is required; a nonexistent report, element, or diagnosis produces an error. Returns a confirmation with disposition details.

输入参数reason必填ruleID必填issueID必填engineID必填reportID必填catalogIndex必填

getReport

Get a full report

Retrieves one entire report as JSON, with all of its issues, violators, and diagnoses. Use this instead of drilling down through listIssues, listViolators, and listDiagnoses when the full report is needed in one call; for only part of a report, drill down with those tools instead. The reportID comes from listPages or from the report history that listIssues returns, and an unknown or malformed one produces an error. The report can exceed 1 MB; its exact size is disclosed by the listIssues tool.

输入参数reportID必填

requestNewTest

Request testing of a new page

Submits a request to test a page that has no report yet. Set reviewImmediately to true for immediate review with immediate approval or rejection and immediate enqueueing if approved (testing then typically takes 2 to 4 minutes); set it to false to queue the request for review by management, which typically takes 1 hour to 1 day. The description uniquely names the page in later listPages output and the reason is what the reviewer evaluates. A refusal, such as an existing report, a duplicate request, or a full queue, is reported in the disposition. Returns a confirmation with disposition details, including, on immediate approval, a report identifier and a question about whether to wait for completion with the awaitTest tool.

输入参数URL必填reason必填description必填reviewImmediately

requestRetest

Request a retest

Submits a request to retest a page whose existing report is considered obsolete. Set reviewImmediately to true for immediate review with immediate approval or rejection and immediate enqueueing if approved (testing then typically takes 2 to 4 minutes); set it to false to queue the request for review by management, which typically takes 1 hour to 1 day. The reportID must belong to the page’s latest report and the reason is what the reviewer evaluates. A refusal, such as a superseded report, a duplicate request, or a full queue, is reported in the disposition. Returns a confirmation with disposition details, including, on immediate approval, a report identifier and a question about whether to wait for completion with the awaitTest tool.

输入参数reason必填reportID必填reviewImmediately

requestFeature

Request a feature

Submits a request to add a new feature or improve an existing one; queued for review by management. Use questionDiagnosis instead to question a specific diagnosis shown by listDiagnoses. The feature text describes the proposed feature or improvement. A request identical to one awaiting review is refused, and otherwise the disposition confirms the request was logged and the manager notified. Returns a request confirmation with disposition details.

输入参数feature必填

awaitTest

Wait for an ordered job to finish

Waits for a job that a requestNewTest or requestRetest call with reviewImmediately set to true ordered, using the report identifier that call returned. Use this instead of polling listIssues when an immediate answer is preferred. The reportID identifies a pending or in-progress job and remains the finished report’s identifier for listIssues and getReport. Blocks until the report is ready, the job fails, or a maximum wait time elapses (5 minutes by default), sending no interim notices; returns the finished job’s status and, if ready, its report identifier.

输入参数reportID必填

版本历史

30
  1. v63.2.2Nov 7, 2026
  2. v63.2.0Nov 6, 2026
  3. v63.1.8Nov 5, 2026
  4. v63.1.7Nov 4, 2026
  5. v63.1.6Nov 4, 2026
  6. v63.1.5Nov 4, 2026
  7. v63.1.2Nov 3, 2026
  8. v63.0.0Oct 31, 2026
  9. v62.0.0Oct 30, 2026
  10. v61.0.0Oct 30, 2026
  11. v60.9.1Oct 29, 2026
  12. v60.9.0Oct 26, 2026
  13. v60.8.0Oct 26, 2026
  14. v60.7.1Oct 25, 2026
  15. v60.4.1Oct 23, 2026
  16. v60.3.0Oct 22, 2026
  17. v60.2.0Oct 21, 2026
  18. v60.1.10Oct 21, 2026
  19. v60.1.8Oct 21, 2026
  20. v60.1.7Oct 20, 2026
  21. v60.1.4Oct 19, 2026
  22. v60.1.1Oct 19, 2026
  23. v60.0.9Oct 18, 2026
  24. v60.0.4Oct 18, 2026
  25. v60.0.2Oct 18, 2026
  26. v59.1.3Oct 17, 2026
  27. v59.1.0Oct 16, 2026
  28. v59.0.0Oct 10, 2026
  29. v57.0.0Sep 29, 2026
  30. v2.1.0Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分