Assay
El cortafuegos para llamadas de herramientas MCP. Bloquea llamadas inseguras, audita cada decisión, reproduce cualquier cosa. Aplicación de políticas determinista con paquetes de evidencia reproducibles.
Documentación
Assay
El perfil de evidencia abierto y recomputable para acciones privilegiadas de herramientas MCP.
Assay registra qué decidió una llamada de herramienta privilegiada, qué se observó y qué permanece sin probar, para que un revisor pueda reproducir la afirmación fuera de línea en lugar de confiar en el relato del agente sobre sí mismo. La aplicación es determinista y de cierre ante fallos, y el proxy que la aplica es el productor de referencia, no el contrato en sí. La instrumentación opcional eBPF/LSM en hosts Linux compatibles añade observaciones a nivel de kernel. Nativo para CI, sin backend, acotado por diseño.
Inicio rápido · Cómo funciona · Verlo en acción · Ejemplo MCP · OWASP MCP Top 10 · Discusiones
Los agentes obtuvieron acceso real a herramientas a través de MCP — y con ello llegaron el envenenamiento de herramientas, los tirón de alfombra y el OAuth de diputado confundido. Assay se sitúa en el límite de la llamada a herramientas y hace tres cosas, en orden.
Un camino dorado: el recorrido del agente fijado a una versión registra los nueve pasos CLI/MCP dirigidos y sus contratos de salida/stdout. Su fixture de acción protegida vive en examples/privileged-action-gate/.
Aplicar, probar, mantenerse honesto
- Aplicar. En modo de aplicación, la puerta decide
tools/callsolicitudes enrutadas a través de ella antes de reenviarlas, con la razón precisa de cada permiso o denegación. En Linux añade aplicación real a nivel de kernel — un bloqueo de salida de conexión IPv4/TCP eBPF/LSM y una lista de permitidos de puerto de conexión TCP Landlock, ambos opt-in y de cierre ante fallos. Una política que no puede expresar exactamente es rechazada, nunca aplicada a medias. - Probar. Los productores configurados pueden registrar decisiones y observaciones acotadas para exportarlas en paquetes de evidencia verificables fuera de línea y a prueba de manipulación. El flujo de acción privilegiada lleva el veredicto, el recorrido de establecimiento previo a la llamada y la conformidad declarada vs. observada para revisión en CI sin un backend alojado.
assay mcp wrapbásico no crea automáticamente un paquete; habilite los pasos de registro y exportación requeridos. - Mantenerse honesto. La Base de Confianza clasifica las afirmaciones admitidas como
verified,self_reported,inferredoabsent; sus puertas verifican los límites de afirmación declarados. Una herramienta que devuelve "éxito" es la aserción del proveedor, nunca una prueba. Assay no incluye una puntuación de seguridad única; lea la fuente, la cobertura y las no-afirmaciones de cada artefacto antes de confiar en él.
Inicio rápido
# Fast path: release installer for Linux and macOS.
curl -fsSL https://getassay.dev/install.sh | sh
# Confirm the command resolves; if setup fails, run `assay doctor`.
assay --version
# Source-build alternative (requires Rust):
cargo install assay-cli --version 6.9.0 --locked
python3 examples/mcp-quickstart/run.py
Para v6.9.0, ejecute el último comando desde un checkout de la fuente o un archivo CLI publicado extraído.
El instalador es solo binario y no incluye los activos acotados de inicio rápido. El instalador
en vivo getassay.dev verifica el archivo seleccionado contra su sidecar SHA-256 publicado antes de la
extracción. Establezca ASSAY_REQUIRE_PROVENANCE=1 para requerir adicionalmente procedencia de artefactos de GitHub;
el valor predeterminado informa provenance_not_requested y el éxito estricto informa provenance_verified.
Una suma de verificación prueba la igualdad de bytes con el sidecar publicado, no la identidad del productor. La procedencia
identifica la fuente y la compilación, no la seguridad en tiempo de ejecución ni la corrección semántica.
Salida capturada del runner (el mock local incluido no realiza ninguna acción externa):
assay quickstart: PASS
mcp_requests=initialize,tools/list,tools/call
decision=allow tool=read_file
decision_artifact=.assay/quickstart/decisions.ndjson
non_claim=forwarded_to_local_mock_only
Superficies publicadas:
- Los manifiestos de proyecto estáticos se envían para Claude Code y Cursor; Codex usa la entrada TOML equivalente documentada en la receta MCP para editores. La presencia del manifiesto no es prueba de descubrimiento de host.
assay mcp config-pathadmite solo Claude Desktop y Cursor. - Los archivos CLI publicados de v6.9.0 cubren Linux x86_64/arm64, macOS x86_64/arm64 y Windows x86_64. Las ruedas de Python cubren CPython 3.12, 3.13 y 3.14 en macOS x86_64/arm64 y Linux x86_64; otros intérpretes y plataformas no están reclamados.
- Los archivos
assay-mcp-serverpublicados cubren Linux x86_64/arm64. También se publican descriptores de paquetes MCPB yserver.json; su presencia no es prueba de descubrimiento de host. - CI: Acción de GitHub. Los flujos principales no necesitan backend alojado ni clave API. ¿Nuevo en el modelo de amenazas? El mapeo OWASP MCP Top 10 indica, por riesgo, qué cubre Assay y qué deliberadamente no.
Qué incluye
| Salida | Qué es |
|---|---|
| Puerta de política | assay mcp wrap — permiso/denegación determinista antes de que las herramientas se ejecuten, con la razón. |
| Paquete de evidencia | Archivo verificable fuera de línea y a prueba de manipulación para auditoría y reproducción. |
| Base de Confianza / Tarjeta de Confianza | trust-basis.json canónico (clasificación de afirmaciones acotada) más trustcard.{json,md,html} amigable para revisión. |
| Recibos externos | Resultados de evaluación, decisiones de tiempo de ejecución e inventario de modelos como recibos acotados con contratos JSON Schema. |
| Registros de decisiones de herramientas | Para llamadas de herramientas conocidas manejadas, el servidor stdio assay-mcp-server emite un evento tool_decision a nivel de info cuando su filtro de registro lo habilita; decision contiene una entrada de decisión observada codificada en JSON con campos de destino proyectados. |
| SARIF / CI | Acción de GitHub, integración en la pestaña de Seguridad, puertas de política en PRs. |
| Atestación | Firmar un paquete de evidencia como una Declaración in-toto v1 envuelta en DSSE con el predicado evidence-bundle/v1. |
Agent ──► Assay ──► MCP Server
├─ ✅ ALLOW / ❌ DENY (policy, with reason)
├─► 📋 Evidence bundle (offline-verifiable)
└─► 📊 Trust Basis → Trust Card → SARIF / CI
Versión actual: v6.9.0. CHANGELOG.md y las notas de versión siguen siendo la autoridad para el comportamiento publicado; los cambios fusionados después de la etiqueta son Unreleased, y la publicación en crates.io es separada del estado de fusión.
Definición de lanzamiento y compromiso de soporte: docs/LAUNCH.md.
¿Es esto para mí?
Sí si ya tiene salidas de evaluación, decisiones de tiempo de ejecución, artefactos de inventario o pruebas de llamadas a herramientas MCP, y quiere un artefacto CI pequeño y revisable en lugar de un panel — auditabilidad acotada, no una insignia de confianza escalar.
Aún no si necesita que Assay juzgue la corrección del modelo por usted, quiere un panel alojado como producto, o quiere una afirmación de cumplimiento en lugar de un límite de evidencia acotado. Assay no es un motor de puntuación de confianza, un panel de evaluación genérico ni un producto de observabilidad alojado — vea qué es y qué no es.
Verlo en acción
Un agente intenta una acción privilegiada — github.add_deploy_key — a través del proxy de aplicación, decidida por llamada antes de reenviarla, fuera de línea contra un mock local (sin credenciales reales):
cd examples/privileged-action-gate && ./run.sh

Una denegación es precaución de cierre ante fallos, no un veredicto sobre la intención; un permiso es la decisión de reenviar, nunca prueba de que la acción ocurrió. La conformidad declarada vs. observada se registra junto al veredicto, nunca como puerta. Recorrido completo: privileged-action-gate.
Elija su camino
| Usted tiene | Lo que obtiene | Empiece aquí |
|---|---|---|
| Promptfoo JSONL de evaluaciones CI | Recibos de resultados de evaluación + paquete verificado + diff de Base de Confianza | Promptfoo JSONL |
OpenFeature EvaluationDetails | Recibo de decisión + paquete verificado | OpenFeature |
| Componente de modelo CycloneDX ML-BOM | Recibo de inventario + paquete verificado | CycloneDX ML-BOM |
| Llamadas a herramientas MCP | Rastro de auditoría de permiso/denegación + evidencia de comportamiento observado | Inicio rápido MCP |
| Una puerta de PR de GitHub | Diff de Base de Confianza, estado de puerta, salida lista para SARIF/JUnit | Guía de CI |
| Un archivo Runner / anotación de cobertura | Descriptores de cobertura + celdas de clase de afirmación + verificación reclamada vs. observada | Recorrido de honestidad de cobertura |
El flujo de trabajo sigue siendo pequeño: importe o registre un resultado acotado, empaquete y verifíquelo, compile trust-basis.json, aplique la puerta al diff de Base de Confianza. Assay no convierte la herramienta ascendente en la fuente de verdad; hace inspeccionable el límite de evidencia. Para acciones privilegiadas de herramientas, el proxy MCP registra cada tools/call como una superficie de decisión de herramienta estructurada — manteniendo honesta la línea entre lo afirmado y lo verificado.
La política es simple
version: "2.0"
name: "my-policy"
tools:
allow: ["read_file", "list_dir"]
deny: ["exec", "shell", "write_file"]
schemas:
read_file:
type: object
properties:
path: { type: string, pattern: "^/app/.*" }
required: ["path"]
assay init --from-trace trace.jsonl genera la política de observación en tiempo de ejecución utilizada por el flujo de generación de rastros (files, network y processes); no es una política de autorización MCP. Migre una política MCP constraints: heredada con assay policy migrate. Vea Archivos de política.
Por qué Assay
| Evidencia canónica | El modelo de evidencia de Assay es el contrato estable; OpenTelemetry y los adaptadores de protocolo (perfil de proyección ACP / A2A / UCP) se mapean en él. |
| Determinista | La puerta de política usa reglas explícitas; su decisión depende de la solicitud, la política y el estado de sesión aplicable. Esto no hace deterministas a los evaluadores en vivo ni a los efectos externos. |
| Afirmaciones acotadas | Explícito sobre verificado vs visible vs ausente — sin UX de puntuación primero. |
| Primero fuera de línea | No se requiere backend para la aplicación central y la verificación de paquetes. |
| Procedencia comprobable | Qué pieza del modelo de clase de fuente y cobertura se envió cuándo, como commits que puede git log en lugar de afirmaciones que debe aceptar — procedencia, trabajo previo acreditado primero. |
Aprenda más
- Inicio rápido MCP · Receta MCP para editores — MCP con aplicación de política en Cursor / Claude Code / Codex
- Paridad de era de protocolo MCP 2025/2026 — corpus de compatibilidad fijado
resultTypey de resultados intermedios - Gobernanza de agentes de codificación · OpenTelemetry y Langfuse — ejecuciones observadas → evidencia
- Recibos de evidencia en acción — familias de recibos Promptfoo / OpenFeature / CycloneDX
- Guía de CI · Almacén de evidencia (S3 / B2 / MinIO)
- Mapeo OWASP MCP Top 10 · Experimentos de seguridad
- Posicionamiento: ADR-033 · RFC-005
Epistemología de la evidencia, latencia y el Runner interno
Las afirmaciones de confianza usan epistemología explícita, no una puntuación de seguridad única: verified (evidencia directa o verificación fuera de línea), self_reported (emitida sin corroboración independiente), inferred (reglas acotadas y documentadas), absent (sin evidencia confiable). Assay no incluye una puntuación de confianza agregada ni una insignia safe/unsafe como salida principal — vea ADR-033.
Los resultados de experimentos históricos de IPI fragmentado, fechados el 2026-03-02 y nombrando el commit 289a43ecc144, reportan 0.771ms p50 / 1.913ms p95 para el conjunto determinista. El arnés cronometra rondas completas de tools/call mock local, incluido el transporte JSON-RPC y la respuesta de la herramienta. Estos tiempos reportados no aíslan la sobrecarga de decisión de política ni establecen el rendimiento del modelo de la versión actual o de extremo a extremo.
Assay-Runner es un subsistema interno/experimental de ejecución medida detrás de la ruta de aceptación delegada Linux/eBPF. Sus crates se incluyen en el proceso de publicación del workspace para que los paquetes dependientes puedan resolverlos; la publicación no convierte a Runner en un producto independiente ni da a sus APIs un compromiso de estabilidad separado.
Ecosistema
Proyectos relacionados para generación, verificación y revisabilidad de evidencia; cada uno tiene su propia interfaz y alcance:
- assay-action — Acción de GitHub: verifica paquetes, resúmenes de PR, SARIF (Marketplace).
- Assay-Harness — capa de recetas, compuertas e informes sobre artefactos de evidencia canónicos.
- observed-effect-v0 — ejemplos trabajados del registro de evidencia de efecto observado acotado y sus portadores neutrales (in-toto, SCITT, MCP evidenceRef).
- gateway-evidence-replay — verificador de reproducción offline determinista para paquetes de evidencia de ruta de gateway.
- RGE-Bench — kit de conformidad para la revisabilidad de evidencia, mantenido por separado bajo su propia guarda de neutralidad verificada por máquina. La reproducción allí está limitada por digest y no se transfiere: el digest v1 de 71 vectores
sha256:e769822bc6c9e31085da7b1a17b163b9747fe0d04314fbb8685d4e612087c7cby el digest histórico v2sha256:ba0e3795d75c788fa48313ab462493f22d78759851d1b3275d8117051bb22fd0(95 vectores) cada uno reporta una implementación independiente por un segundo autor en una pila diferente. JM-Lab reportó la reproducción v2 95/95 el 2026-08-24, a partir del texto del contrato y las entradas proporcionadas por el autor sin leerexpected. Ninguna reproducción se transfiere al digest candidato actual v3 de 104 vectoressha256:93f8ae9654eb5a16dee28d882087669cae5183e02e116ba1e8071a30594cfb6a, que el registro lista como no reproducido. Consulte su REPRODUCTIONS.md.
Perfil abierto: privileged-mcp-action/v0
privileged-mcp-action/v0
es un contrato de composición y verificación sobre registros de evidencia que ya existen: lo que una
llamada de herramienta MCP privilegiada decidió, lo que se observó de su efecto y lo que permanece
sin probar. No añade un nuevo sobre ni un veredicto agregado.
Se distribuye con un corpus de conformidad de 14 vectores (5 aceptan, 9 rechazan) cuyo digest es un candidato: no se considera reproducido hasta que una implementación de un no autor derive los resultados esperados únicamente del texto de la especificación.
Esa reproducción está abierta y la invitación es real: #1840. Cualquier lenguaje, cualquier pila. La invitación nombra el commit exacto que describe el digest actual. El protocolo de sala limpia proporciona un paquete de entradas opaco y atestiguado, una acción de puntuación de un comando y una plantilla de informe de implementación sin proporcionar lógica de verificador ni resultados esperados. El README del corpus establece el límite de autoría y el techo de afirmaciones.
Contribuciones
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
Consulte CONTRIBUTING.md y GitHub Discussions.