Prototipo · Versión preliminar: todos los servidores del registro oficial, sincronizados cada 30 minutos. Las reseñas y las cuentas llegarán en una etapa posterior.
PopNx MCPServidores MCP para quienes usan IA · explicados con palabras sencillas

Tactual

de tactual-devversión 0.2.1i★ –iSe ejecuta en tu computadora
Nombre en el registroio.github.tactual-dev/tactual

Instalar

Resumen

Descripción del creador (original en inglés)

Screen-reader navigation cost analyzer. Scores AT user effort to find, reach, and operate content.

Los tres pilares de PopNx MCP

Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.

Qué puedes hacer con él

Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.

  • Conexión: Se ejecuta en tu computadora
  • Transporte: stdio
  • Categoría: Otros

Instalación

Elige la app de IA que usas y copia la configuración.

Antes de instalar

Necesitas

  • npmNode.js instalado (para el comando npx)

¿Qué app usas?

Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.

Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json

{
  "mcpServers": {
    "tactual": {
      "command": "npx",
      "args": [
        "-y",
        "tactual"
      ]
    }
  }
}

Ejecuta esto en tu terminal

claude mcp add tactual -- npx -y tactual

Abrir en Cursor

O copia la configuración tú

Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json

{
  "mcpServers": {
    "tactual": {
      "command": "npx",
      "args": [
        "-y",
        "tactual"
      ]
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Abrir en VS Code

O copia la configuración tú

Pégalo en .vscode/mcp.json de tu proyecto

{
  "servers": {
    "tactual": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "tactual"
      ]
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.

Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.

Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.

Qué puede hacer

Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.

Revisiones básicasi

Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub tactual-dev, dueña del repo

  • … Aún sin revisar

    Sigue en mantenimiento

    Todavía no hemos leído este repo en GitHub

  • … Aún sin revisar

    Tiene licencia

    Todavía no hemos leído este repo en GitHub

  • – No aplica

    El endpoint responde

    Este se ejecuta en tu computadora; no hay endpoint en internet

  • – No aplica

    Inicio de sesión con OAuth

    Se ejecuta en tu computadora y usa ajustes locales en su lugar

  • … Aún sin revisar

    Sin instrucciones ocultas en las descripciones de herramientas

    Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet

Comparado con otros en Otrosi

  • Más estrellas que el 0% de los otros 32568 servidores de esta categoría
  • Publicado en el registro más recientemente que el 6% de los otros 32568 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 32568 servidores de esta categoría

Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.

Preguntas frecuentes

¿Es seguro Tactual?

Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.

¿Qué claves o códigos necesita?

El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.

¿Se ejecuta en mi computadora o en la nube?

Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).

¿Sigue en mantenimiento?

El repo de GitHub cambió por última vez –, y la última versión (0.2.1) llegó al registro hace 7 meses.

¿Qué apps pueden usarlo?

Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Node.js en tu computadora.

¿Qué puedo usar en su lugar?

En la misma categoría: Spec Driven Development, Remote Desktop Commander, FlyDocs

Alternativas

Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.

Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi

Spec Driven Development

de formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Se ejecuta en tu computadora★ 440MITActualizado hace 14 meses
Instalar

Remote Desktop Commander

de desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Se ejecuta en la nube★ 211Actualizado ayer
Instalar

FlyDocs

de flydocs.ai

Spec-driven development workflow: your agent works issues, sessions and the status lifecycle.

Se ejecuta en tu computadoraActualizado hoy
Instalar

README del creador

Abrir el README

Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.

Tactual

Screen-reader navigation cost analyzer. Measures how many keystrokes a screen-reader user needs to discover, reach, and operate every interactive target on your page — under a specific AT profile (NVDA, JAWS, VoiceOver).

What it does

Existing accessibility tools check conformance — is the ARIA correct? Is the contrast ratio sufficient?

Tactual measures navigation cost — how many actions does it take a screen-reader user to reach the checkout button? What happens if they overshoot? Can they even discover it exists? Does the menu actually open on Enter, or only on click? Does focus land on the first menuitem or stay stuck on the trigger?

How it works:

  • Captures Playwright accessibility snapshots + screen-reader announcement simulation
  • Optionally explores hidden branches (menus, dialogs, tabs, disclosures) and probes them with real keyboard events, including APG-style widget contracts and form-error flows
  • Builds a navigation graph with entry points (landmarks, headings, linear Tab) and scores every target
  • Optionally validates predicted paths against @guidepup/virtual-screen-reader for calibration

Tactual is a developer tool for analyzing your own sites and staging environments. Run it locally, in CI, or via the MCP server in your editor. It is not a public scanning service.

How it fits

Tactual complements conformance scanners such as axe-core, Lighthouse, and Pa11y. Those tools are still the right first pass for broad WCAG and ARIA rule coverage. Tactual is aimed at the next question: after a page has valid markup, how expensive is it for an AT user to discover, reach, and operate the important targets?

Use Tactual for screen-reader navigation-cost triage, path tracing, measured keyboard/widget evidence, before/after diffs, CI prioritization, and MCP workflows where an agent needs compact findings with source selectors and remediation candidates. Use real screen readers and manual testing for final validation of critical journeys, timing-sensitive flows, browser/AT settings, and implementation patterns that intentionally differ from a common APG example.

Agent quick path: this README is a product overview plus reference. Agents should start with docs/AGENT-RECIPES.md for task patterns and docs/MCP-TOOLS.md for full MCP schemas, then come back here only for product context, install notes, and release-surface examples.

Install

Requires Node.js 20 or later.

npm install tactual

Tactual installs Playwright as a runtime dependency so one-off npx tactual@latest ... commands work without separately installing Playwright into the npx cache. The MCP SDK also ships as a runtime dependency, so tactual-mcp works from an installed tactual package without a separate SDK install.

Quick start

CLI
# Analyze a URL (default profile: generic-mobile-web-sr-v0)

npx tactual analyze-url https://example.com

Analyze with a specific AT profile

npx tactual analyze-url https://example.com --profile voiceover-ios-v0

Explore hidden UI (menus, tabs, dialogs, disclosures)

npx tactual analyze-url https://example.com --explore

Use a scoring preset for your use case

npx tactual analyze-url https://shop.com --preset ecommerce-checkout npx tactual analyze-url https://docs.example.com --preset docs-site

Output as JSON, Markdown, or SARIF

npx tactual analyze-url https://example.com --format json --output report.json npx tactual analyze-url https://example.com --format sarif --output report.sarif

Compare two analysis runs

npx tactual diff-results baseline.json candidate.json npx tactual diff-results baseline.json candidate.json --format json

Print what NVDA would say as you Tab through the page

npx tactual transcript https://example.com npx tactual transcript https://example.com --at voiceover

List available AT profiles and scoring presets

npx tactual profiles npx tactual presets

Run benchmark suites

npx tactual benchmark npx tactual benchmark --suite all

Benchmark fixtures ship with the npm package, so the benchmark command works from a fresh install and does not require cloning the repository fixtures into your current directory.

Validate predicted paths against a virtual screen reader (reachability + step count)

Requires optional deps, installed by default with tactual

npx tactual validate-url https://example.com --max-targets 10 --strategy semantic

Initialize a tactual.json config file

npx tactual init

Analyze a bot-protected site with stealth + real Chrome

npx tactual analyze-url https://www.npmjs.com/ --stealth --channel chrome

Deep keyboard probing including revealed widgets and form-error flows

npx tactual analyze-url https://docs.example.com --probe --explore --probe-mode deep

Focus probing on one opened branch, such as a dialog trigger

npx tactual analyze-url https://app.example.com/settings \ --probe \ --entry-selector "[aria-controls='profile-dialog']" \ --probe-strategy modal-return-focus

Analyze + inline virtual-SR validation in one command (predicted vs validated steps)

npx tactual analyze-url https://example.com --validate --validate-max-targets 10

Console output includes a compacted path line for each finding showing how a screen-reader user reaches it:

  ██████░░ 70  link:reference structural

D:47 R:71 O:100 Rec:100 getByRole('link', { name: 'Reference' }) ↪ Tab ×2 "v19.2" → K "Learn" → Tab "Reference" → Target is not efficiently reachable via heading or landmark navigation

Where Tab = nextItem, H = nextHeading, ; = nextLandmark, K = nextLink, B = nextButton, Enter = activate. Consecutive same-action steps collapse (Tab ×2).

From Audit to Fix

For accessibility work in a local app or preview environment, Tactual supplies evidence for small, reviewable changes:

  • selector, penalties, suggestedFixes, and evidence summaries on each finding
  • grouped issueGroups and remediation candidates in summarized output
  • analyze_pages.site.repeatedNavigation for repeated navigation cost across routes
  • diff-results / diff_results for before-and-after verification

Start with broad triage, then deepen one route before changing code:

# Site-level triage. Redirect JSON for tool consumption.

npx tactual analyze-pages \ https://app.example.com/ \ https://app.example.com/docs \ https://app.example.com/settings \ --profile nvda-desktop-v0 \ --format json > tactual-site.json

Deepen one route and produce a reviewable markdown report.

npx tactual analyze-url https://app.example.com/docs \ --profile nvda-desktop-v0 \ --explore --probe --probe-mode standard \ --format markdown --output tactual-report.md

When one branch is the target, open it first and spend probe budget there.

npx tactual analyze-url https://app.example.com/docs \ --profile nvda-desktop-v0 \ --probe \ --entry-selector "[aria-controls='search-panel']" \ --probe-selector "#search-panel" \ --probe-strategy composite-widget \ --format markdown --output tactual-search-panel.md

Save a baseline before editing, then verify the patch.

npx tactual analyze-url https://app.example.com/docs --explore --probe --format json --output baseline.json

Edit one root cause in the local repo, rebuild/restart the preview, then re-run:

npx tactual analyze-url https://app.example.com/docs --explore --probe --format json --output candidate.json npx tactual diff-results baseline.json candidate.json

Use the candidate section as a starting point for repeated root causes such as a shared component, navigation pattern, or widget contract. Confirm the source component and include the route, command, finding evidence, user impact, code change, and verification in whatever issue or PR format the project expects. Score movement is useful supporting evidence, but the change should lead with the accessibility behavior that changed.

MCP clients can consume the same compact output and keep the review loop grounded in routes, selectors, evidence, source changes, and before/after verification.

Library API
import { analyze, getProfile } from "tactual";

import { captureState } from "tactual/playwright"; import { chromium } from "playwright";

const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto("https://example.com");

const state = await captureState(page); await browser.close();

const profile = getProfile("generic-mobile-web-sr-v0"); const result = analyze([state], profile);

for (const finding of result.findings) { console.log(finding.targetId, finding.scores.overall, finding.severity); }

Screen-reader announcement simulator — predict what NVDA, JAWS, or VoiceOver would announce for every target, with state info (checked, expanded, selected, modal, value, required, invalid, etc.):

import {

simulateScreenReader, buildAnnouncement, buildMultiATAnnouncement, buildTranscript, } from "tactual/playwright";

const report = await simulateScreenReader(page, state.targets);

for (const a of report.formFields) { console.log(a.announcement); // → "Subscribe, check box, checked" // → "Country, combo box, collapsed" // → "Email, edit, invalid entry, required, you must use a work address" }

// Compare across screen readers const tx = state.targets[5]; buildAnnouncement(tx, "nvda"); // → "Country, combo box, collapsed" buildAnnouncement(tx, "voiceover"); // → "Country, popup button"

// All three at once buildMultiATAnnouncement(tx); // → { nvda: "...", jaws: "...", voiceover: "..." }

// Linear navigation transcript — what an SR user hears Tabbing through const transcript = buildTranscript(state.targets, "nvda"); // → [{ step: 1, kind: "landmark", announcement: "Main, main landmark" }, ...]

// Multi-target navigation modes (linear, by-heading, by-landmark, by-form-control) import { buildNavigationTranscript } from "tactual/playwright";

// Heading-only navigation (NVDA: H key) const headings = buildNavigationTranscript(state.targets, { mode: "by-heading" });

// Navigate from one element to another const path = buildNavigationTranscript(state.targets, { from: "link:before-main", to: "heading:welcome", mode: "linear", });

// Demoted landmarks (in DOM but stripped by HTML rules, e.g. in ) for (const d of report.demotedLandmarks) { console.warn(d.demotionReason); }

Validation and calibration APIs — compare model output against virtual-SR validation runs or human-observation datasets:

import { validateFindingsInJsdom } from "tactual/validation";

import { runCalibration, formatCalibrationReport } from "tactual/calibration";

// Given a JSDOM instance, PageState, AnalysisResult, and calibration dataset: const validation = await validateFindingsInJsdom(dom, state, result.findings, { maxTargets: 10, strategy: "semantic", });

const calibration = runCalibration(dataset, new Map([[state.url, result]])); console.log(validation, formatCalibrationReport(calibration));

Or from the CLI:

npx tactual transcript https://example.com --at voiceover

npx tactual calibration-report my-calibration.json --analysis example-nvda.json

The simulator is heuristic prediction, not real screen-reader output. The simulator itself is fast (pure JavaScript over captured targets — sub-second once targets are in memory), but a full analyze-url run includes browser launch + page capture + scoring and takes seconds on small pages, longer with --probe (~30s+) and --explore (~1–5 min on complex SPAs). Analysis runs in a headless browser by default, so nothing pops up while you work. (Use --no-headless or --channel chrome --stealth for visible/bot-protected sites.)

Data quality. Calibrated against token-l

Solo se muestra el principio; lee el resto en el repo

Pregunta a PopNx