Skip to main content
Glama

dsh-verify

ci

263311487-ux/dsh-verify MCP server

Los agentes se autoevalúan y pasan. Los navegadores reales dicen la verdad.

dsh-verify es un probador de aceptación pequeño y con pocas dependencias para artefactos web entregados por agentes. Escribes una especificación JSON de lo que un humano comprobaría en un navegador; lanza un Chromium real sin interfaz, hace clic, lee los estilos calculados y produce un informe HTML además de un código de salida 0/1.

Existe porque nos pasó factura — y tenemos las pruebas.


La historia (por qué existe esto)

Montamos un equipo web de 4 agentes (redactor de especificaciones → desarrollador frontend → QA → revisor). El equipo publicó una página de demostración con un contador y un interruptor de modo oscuro. Su propio informe de revisión decía:

✅ "Todos los requisitos cumplidos. No se encontraron problemas."

En un navegador real, el botón de alternancia no hacía nada: el fondo de la página nunca cambiaba. La clase .dark se alternaba con JavaScript, pero la regla CSS para .dark nunca se escribió. Todos los autotests de los agentes pasaron porque no había nada en la página que los agentes pudieran ejecutar. Nadie abrió un navegador real.

Esa es la brecha: los agentes verifican contra lo que creen que han construido, no contra lo que el usuario experimenta realmente. Las pruebas unitarias y las comprobaciones estáticas no pueden detectar una regla CSS que falta.

Este repositorio contiene el error, corregido, lado a lado — y la evidencia basada en el navegador que los separa:

Compilación

Lo que dijeron los agentes

Lo que dice un navegador real

demo/buggy

"No se encontraron problemas"

❌ FALLO — el fondo nunca cambia

demo/fixed

una regla CSS añadida

✅ PASA — el tema cambia

Misma página. Mismo JS. Una regla CSS que falta. Dos veredictos distintos.

Related MCP server: Mochi

El informe

Un informe HTML autocontenido — cada paso con una insignia de aprobado/suspenso, selector y detalle, además de capturas de pantalla:

dsh-verify report


Qué hace

  • Lee una especificación JSON (sin framework, sin lenguaje de configuración)

  • Sirve tu directorio estático (o apunta a cualquier URL)

  • Maneja un Chromium real sin interfaz (Playwright)

  • Comprueba lo que los humanos comprueban: texto, clases, estilos calculados, URLs, píxeles

  • Genera un informe HTML autocontenido con capturas e imágenes de diferencias

  • Sale con 0 si pasa, 1 si falla → introdúcelo en cualquier CI

  • Servidor MCP para Claude Code / Cursor / Copilot · Listas de verificación redactadas por IA · GitHub Action · DSH plugin

Instalación

# from npm (CLI)
npm install -g dsh-verify

# as a DeepSeek Harness (DSH) plugin — available in every session of the profile
dsh plugin --profile web add dsh-verify

# or run without installing
npx dsh-verify --help

Úsalo desde cualquier agente de IA (MCP)

dsh-verify incluye un servidor MCP, así que Claude Code, Cursor, Copilot, o cualquier agente compatible con MCP puede verificar sus propias entregas en un navegador real — sin necesidad de archivos de especificación:

# register once (Claude Code)
claude mcp add dsh-verify -- npx -y -p dsh-verify dsh-verify-mcp

# or (Cursor / generic MCP client)
# add a stdio server with the command:  npx -y -p dsh-verify dsh-verify-mcp

Luego dile a tu agente, en palabras sencillas:

Verifica http://localhost:3000 — haz clic en #dark-toggle y comprueba que el background-color de body ha cambiado. Toma una captura.

El agente llama a verify_url con una lista de comprobaciones de estilo humano (goto / click / fill / expect_text / expect_class / capture_style / expect_style_changed / expect_url_contains / expect_navigation / expect_console_errors / expect_network_errors / screenshot / expect_screenshot), un Chromium real sin interfaz las ejecuta de forma determinista, y el agente recibe un veredicto PASS/FAIL además de un informe HTML autocontenido.

Herramientas que expone el servidor MCP:

Herramienta

Qué hace

verify_spec

Ejecuta un archivo de especificación JSON existente (o patrón global) contra Chromium real

verify_url

Verifica una URL en vivo contra una lista de comprobaciones en línea — sin necesidad de archivos

generate_and_verify

La IA redacta la lista de verificación a partir de la página en vivo + tus requisitos, y luego Chromium real la ejecuta

health

Confirma que el servidor y Chromium están listos

Ningún LLM juzga el resultado — el navegador es el juez. Ese es el punto.

Úsalo en CI (GitHub Action)

Un solo paso en cualquier flujo de trabajo — instala dsh-verify y Chromium de forma aislada (tu proyecto queda intacto), ejecuta las comprobaciones y sube el informe como artefacto:

- uses: 263311487-ux/dsh-verify/.github/actions/dsh-verify@main
  with:
    spec: demo/fixed.json       # spec file or glob
    # url: https://staging.example.com   # optional override
    # out: dsh-verify-out               # report output dir (default)

El repositorio lo usa en producción: el flujo de trabajo dogfood verifica que la compilación corregida pasa y que la compilación con errores falla en cada push.

Regresión visual (líneas base de capturas de pantalla a nivel de píxel)

Cambia la página y deja que los píxeles te lo digan — no tus ojos, no tu memoria:

{
  "title": "my app",
  "serve": "dist",
  "steps": [
    { "action": "goto", "path": "/index.html" },
    { "action": "expect_screenshot", "name": "home", "threshold": 0.01 }
  ]
}
  • La primera ejecución crea la línea base (out/baselines/home.png) y pasa.

  • Las ejecuciones posteriores comparan capturas de pantalla de Chromium real píxel a píxel; las diferencias superiores a threshold (por defecto 1 %) hacen fallar la compilación.

  • Una imagen de diferencias resaltada en rojo va a out/diffs/ y se incrusta en el informe HTML.

  • ¿Un cambio esperado? Actualiza las líneas base en lugar de fallar: dsh-verify --spec spec.json --update-baselines.

  • Acota una región con "selector", ajusta el ruido con "tolerance" (por canal, por defecto 10).

Acciones: capture_baseline (guardar una línea base explícitamente), expect_screenshot (comparar contra la línea base).

Listas de verificación redactadas por IA (las escribe un LLM, un navegador real las impone)

¿No quieres escribir el JSON a mano? dsh-verify gen aprende la página en un navegador real, hace que un LLM redacte la lista de verificación según tus requisitos y luego la ejecuta en Chromium real:

export DEEPSEEK_API_KEY=sk-...   # or pass --api-key / --provider openai

dsh-verify gen --url http://localhost:3000 \
  --prompt "dark-mode toggle must actually change the background color" \
  --run
gen: opening http://localhost:3000 in a real browser to learn the page...
gen: page learned (2 buttons, 0 inputs) — drafting checklist...
gen: checklist drafted by deepseek-v4-flash (10 steps) -> dsh-verify.gen.json
gen: executed in real browser -> PASS (10/10)
report: dsh-verify-out/report.html

La IA solo redacta la lista de verificación — nunca juzga el resultado. El mismo motor Chromium determinista ejecuta los pasos, y el JSON se escribe en disco para que puedas revisarlo o editarlo antes de confiar en él.

Requiere Node >= 18 y una instalación de navegador: npx playwright install chromium.

Inicio rápido

npm install
npx playwright install chromium   # one-time browser download

# Run the two demo specs back to back
npm run demo:buggy                # → FAIL (exit 1) — missing .dark style caught
npm run demo:fixed                # → PASS (exit 0)

# engine self-tests + full CI flow
npm test                          # node:test suite
npm run ci                        # tests + fixed PASS + buggy FAIL (as proof of detection)

El CI del propio repositorio ejecuta exactamente eso: autotests del motor, y luego verifica que la compilación corregida pasa y que la compilación con errores falla — así la herramienta se verifica a sí misma en cada push (.github/workflows/ci.yml).

Salida legible por máquina

node bin/verify.mjs --spec demo/fixed.json --out /tmp/out --json
# {"verdict":"PASS","passed":11,"total":11,"failed":[],"report":"/tmp/out/report.html"}

Ejecutar muchas especificaciones

node bin/verify.mjs --spec 'specs/*.json' --out reports/
# [PASS] specs/home.json (5/5)
# [FAIL] specs/cart.json (4/5)
#   ❌ expect_text #total: got "0" want "99"

Cada especificación recibe su propia carpeta reports/<name>/; la salida es 0 solo si todas pasan.

Formato de la especificación

Campos de nivel superior: title, serve (directorio estático), base (URL de destino), browser (opcional: chromium | firefox | webkit, por defecto chromium), steps.

{
  "title": "my app",
  "serve": "dist",
  "browser": "chromium",
  "steps": []
}

Anula por ejecución con --browser firefox.

{
  "title": "my acceptance check",
  "serve": "demo/fixed",
  "steps": [
    { "action": "goto", "path": "/index.html" },
    { "action": "click", "selector": "#count-btn", "count": 3 },
    { "action": "expect_text", "selector": "#count-btn", "text": "Clicked: 3" },
    { "action": "capture_style", "selector": "#page", "prop": "backgroundColor", "var": "bg_before" },
    { "action": "click", "selector": "#color-btn" },
    { "action": "expect_class", "selector": "#page", "class": "dark", "present": true },
    { "action": "expect_style_changed", "selector": "#page", "prop": "backgroundColor", "var": "bg_before" },
    { "action": "screenshot", "name": "final-state" }
  ]
}

Acciones

Acción

Campos

Qué verifica

goto

path / url

Navegar (usa el directorio servido si serve está establecido)

wait

ms

Esperar (permite que las transiciones CSS se asienten)

click

selector, count?

Hacer clic en un elemento, N veces

fill

selector, text

Rellenar un campo de entrada

expect_text

selector, text, exact?

El texto visible contiene/es igual al objetivo

expect_class

selector, class, present?

La clase está presente (por defecto) o ausente

capture_style

selector, prop, var

Guardar un estilo calculado en una variable

expect_style_changed

selector, prop, var

El estilo calculado difiere de la instantánea — la comprobación que detecta "la clase se alternó pero el CSS nunca se escribió"

expect_url_contains

text

La URL actual contiene el objetivo

expect_navigation

to, timeout?

Esperar hasta que la URL contenga to (p. ej. tras hacer clic en un enlace)

expect_console_errors

present?

Sin errores de consola durante la ejecución (por defecto: no se espera ninguno)

expect_network_errors

present?

Sin respuestas 4xx/5xx ni solicitudes fallidas (por defecto: no se espera ninguna)

screenshot

name, full?

Guardar un PNG en el informe

capture_baseline

name, selector?

Guardar una captura como línea base visual

expect_screenshot

name, threshold?, tolerance?, selector?

Diferencia de píxeles contra la línea base; falla si supera threshold (por defecto 1 %)

El par capture_style → expect_style_changed es el corazón de este proyecto: verifica lo que ve el usuario, no lo que dice la lista de clases del DOM.

Evidencia en vivo

Las dos capturas siguientes son resultados reales de dsh-verify contra las dos compilaciones de la misma demo (Chromium, 1280×800, después de hacer clic en el interruptor):

Compilación con errores — interruptor pulsado, fondo sin cambios: buggy build final state

Compilación corregida — interruptor pulsado, tema cambiado: fixed build final state

Informes completos paso a paso: informe con errores · informe corregido.

Docker (Chromium fijado a una versión)

docker build -t dsh-verify .
docker run --rm -v "$PWD:/app" dsh-verify --spec demo/fixed.json --out /app/reports

Usa mcr.microsoft.com/playwright:v1.62.1-jammy para que la compilación de Chromium coincida con la versión de Playwright — sin descarga del navegador en el momento de construir la imagen. (Construido y documentado; verificado localmente, todavía no en un host Docker).

Por qué nada más hace esto

Investigamos la comunidad de herramientas para agentes antes de construir esto. La "verificación" existente para entregas de agentes es principalmente:

  • Comprobaciones de humo de plugins/instalación — si una habilidad se instala, si existe una CLI (por ejemplo, herramientas de descubrimiento de plugins).

  • Lint estático / pruebas unitarias — validan el código que escribió el agente, no el comportamiento que experimenta el usuario.

  • Agentes solo de capturas de pantalla — miran una imagen, no afirman un comportamiento.

Ninguno de ellos ejecuta un navegador real contra el artefacto y responde: "Cuando hago clic en este botón, ¿ve el usuario el cambio?" Ese es el nicho que llena dsh-verify — deliberadamente pequeño, sin framework, especificación JSON de entrada, veredicto de navegador de salida.

Hoja de ruta

  • expect_console_errors / expect_network_errors — sin errores de consola, sin solicitudes 4xx/fallidas

  • --json salida de veredicto para registros de CI; pasos fallidos impresos en stdout

  • Flujos de varias páginas y expect_navigation (esperar URL después del clic)

  • --spec glob (ejecutar muchas especificaciones, un veredicto agregado)

  • Imagen de Docker con Chromium fijado (mcr.microsoft.com/playwright:v1.62.1-jammy)

  • Manifiesto del plugin DSH (dsh plugin add dsh-verify)

  • Servidor MCP — verificar desde Claude Code / Cursor / Copilot (verify_spec / verify_url / generate_and_verify)

  • Listas de verificación redactadas por IA — dsh-verify gen (la LLM redacta, el navegador determinista aplica)

  • GitHub Action — aceptación de CI en un solo paso con artefacto de informe

  • Regresión visual — líneas base de capturas de pantalla a nivel de píxel (capture_baseline / expect_screenshot)

  • Matriz de múltiples navegadores — --browser / spec.browser: chromium, firefox, webkit (todo verde en CI)

  • Viewports móviles

  • Generación de especificaciones por IA a partir de un requisito en lenguaje natural sin una página en ejecución

Licencia

MIT

Available Tools

4 tools
generate_and_verifyA

AI-drafts an acceptance checklist for a URL (LLM writes it, a real browser executes it), then immediately runs it in real Chromium. Pass requirements as a plain-language description of what a human QA should verify (e.g. "dark-mode toggle changes the background color"). Requires DEEPSEEK_API_KEY or OPENAI_API_KEY in the server environment. Returns the drafted spec path plus the PASS/FAIL verdict, per-step results and report path.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNoOutput dir for spec + report (default: ./dsh-verify-out)
urlYesTarget URL to verify
modelNoLLM model (default: deepseek-v4-flash)
headedNoRun with a visible browser (debug only)
requirementsNoPlain-language QA requirements (optional)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and uses it well: it reveals that an LLM drafts the spec, that it runs in a real browser (implying actual page interaction), and that API keys are required. It also states the output artifacts. It doesn't mention potential side effects on the target URL, but the 'real browser' clause provides transparency.

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?

Four sentences, each with a distinct role: core action, user input guidance, prerequisite, and return values. No redundancy or extraneous details; the most important information is front-loaded.

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 no output schema, the description adequately bridges the gap by enumerating the return values: spec path, PASS/FAIL verdict, per-step results, and report path. It also covers prerequisites and usage context, making it complete for the tool's moderate complexity.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond by providing an example for the 'requirements' parameter ('dark-mode toggle changes the background color') and tying the 'out' parameter to both spec and report paths, which adds meaning not fully spelled out in the schema.

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 opens with 'AI-drafts an acceptance checklist... then immediately runs it in real Chromium', which specifies the verbs (drafts and runs) and resource (acceptance checklist for a URL). This clearly distinguishes it from siblings like verify_spec and verify_url by highlighting the generation step before verification.

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

Usage Guidelines4/5

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

It gives explicit context for use: pass requirements in plain language as QA criteria, and it notes the prerequisite of DEEPSEEK_API_KEY or OPENAI_API_KEY. However, it does not explicitly state when to use this tool instead of verify_spec or verify_url, so it earns a 4 rather than a 5.

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

healthA

Check that the dsh-verify MCP server and its Chromium browser are ready to run verifications.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. While it states the purpose, it does not disclose whether the check is read-only, what the result looks like, or what happens if components are not ready. For a health check, this is a notable gap.

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 that is concise and free of filler. It communicates the essential purpose without wasted words.

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 0-parameter tool, the description covers the main purpose but omits the expected response or how to interpret the check result. Since there is no output schema, adding a brief note about the return value would make it more complete.

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

Parameters4/5

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

There are zero parameters, so schema coverage is complete. No parameter documentation is needed, and the baseline of 4 applies.

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 clearly states the tool checks the readiness of the dsh-verify MCP server and its Chromium browser. The verb 'check' and the specific resource distinguish it from sibling tools that actually run verifications.

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 this is a pre-flight check before running verifications ('ready to run verifications'), but it does not explicitly state when to use this tool versus the verification siblings, nor does it provide exclusions.

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

verify_specA

Run a dsh-verify acceptance spec (JSON file, or glob) against a real headless Chromium. The spec may serve a local static dir (spec.serve) or target any URL (spec.base / step.url). Returns PASS/FAIL with per-step results and a self-contained HTML report path. Exit-code semantics: ok=true means every step passed. This is deterministic — no LLM judges the outcome.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNoOutput dir for report.html + screenshots (default: ./dsh-verify-out)
urlNoOptional target URL override (spec.base / step path ignored)
headedNoRun with a visible browser (debug only)
specPathYesPath to the spec JSON file or glob (e.g. specs/*.json)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It explains that the tool is deterministic ('no LLM judges the outcome'), returns PASS/FAIL with per-step results and an HTML report, and defines exit-code semantics. It does not mention side effects like output directory creation or browser dependency, but these are partially inferable from the schema and tool nature.

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 four concise sentences with no fluff or repetition. It front-loads the core action and packs essential nuance about targets, outputs, and determinism into a compact space.

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

Completeness5/5

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

The tool has no output schema, but the description explicitly covers return values (PASS/FAIL with per-step results and HTML report) and exit-code semantics. All four parameters are documented in the schema, and the description adds behavior context. There are no significant gaps for an agent to invoke the tool correctly.

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 the parameters are well-documented in the schema. The description adds modest context by explaining spec structure (spec.serve, spec.base/step.url) and that specPath can be a glob, but it does not materially enhance parameter semantics beyond what the schema already provides.

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 clearly states the tool's purpose: 'Run a dsh-verify acceptance spec (JSON file, or glob) against a real headless Chromium.' This is a specific verb+resource pairing. It also distinguishes itself from siblings like verify_url by focusing on acceptance specs rather than single URLs, and from generate_and_verify by not mentioning any generation step.

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

Usage Guidelines4/5

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

The description gives useful context on when to use the tool, such as the ability to serve a local static dir or target any URL, implying it is for spec-driven verification. However, it does not explicitly state when to use an alternative like verify_url for simple URL checks, so it lacks direct when-not guidance.

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

verify_urlA

Verify a live URL against a list of human-style checks, driven by a real headless Chromium. Checks are dsh-verify steps: goto/click/fill/wait/expect_text/expect_class/capture_style/expect_style_changed/expect_url_contains/expect_navigation/expect_console_errors/expect_network_errors/screenshot. If no goto step is given, a goto to the url is prepended. Returns PASS/FAIL with per-step results and a self-contained HTML report path. Deterministic — no LLM judges the outcome.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNoOutput dir for report.html + screenshots (default: ./dsh-verify-out)
urlYesTarget URL to open
checksYesHuman-style checks, e.g. [{action:"click",selector:"#dark-toggle"}, {action:"capture_style",selector:"body",prop:"backgroundColor",var:"bg"}, {action:"expect_style_changed",selector:"body",prop:"backgroundColor",var:"bg"}]
headedNoRun with a visible browser (debug only)

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses key behaviors: it uses a real headless Chromium, lists all supported check steps, automatically prepends goto if missing, returns PASS/FAIL with per-step results and an HTML report, and emphasizes deterministic execution (no LLM judging). This goes far beyond a simple 'verify' statement.

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 three sentences long and extremely information-dense. It front-loads the core purpose and packs the check action list and output semantics into a compact, readable format with no irrelevant details.

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?

Despite having no output schema, the description clearly explains what the tool returns (PASS/FAIL, per-step results, HTML report path) and how it operates. It could mention potential side effects of click/fill actions or network dependencies, but the given detail is strong for a verification tool.

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 describes all four parameters with 100% coverage, so the baseline is 3. The description adds operational context for the checks parameter (list of actions, prepending goto) and clarifies output behavior, but does not significantly augment the schema beyond that.

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 uses a specific verb ('Verify') and resource ('a live URL') and elaborates on the method with a detailed list of check actions. It clearly distinguishes itself from siblings (health, verify_spec, generate_and_verify) by focusing on human-style browser-based verification of a live URL.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: when you need to run human-style browser checks against a live URL. It does not explicitly mention alternatives or exclusions, but the context is unambiguous and sufficient for tool selection.

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. 4 tool updatesv0.1.0
    • First observedgenerate_and_verify
    • First observedhealth
    • First observedverify_spec
    • First observedverify_url

TDQS

A4/5.0

Scored across 4 tools

Disambiguation4/5

The tools are mostly distinct: health checks readiness, verify_spec runs a spec file/glob, verify_url runs ad-hoc checks on a URL, and generate_and_verify combines AI drafting with execution. There is slight overlap between verify_spec and verify_url, but input types clearly differentiate them.

Naming Consistency3/5

Naming is mostly snake_case but inconsistent in style: health is a noun, verify_spec and verify_url follow verb_noun, while generate_and_verify is a compound verb phrase. The pattern is still readable but not uniform.

Tool Count5/5

With 4 tools, the server is well-scoped. Each tool serves a distinct purpose in the verification workflow: readiness check, spec execution, live URL verification, and AI-assisted generation, with no redundancy.

Completeness4/5

The domain of running headless Chromium verifications is well covered: health, spec-based execution, ad-hoc checks, and AI-drafted specs. Minor gaps include no standalone spec generation without execution and no spec management, but these are not critical for the core workflow.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers