Assay
O firewall para chamadas de ferramentas MCP. Bloqueie chamadas inseguras, audite cada decisão, reproduza qualquer coisa. Aplicação determinística de políticas com pacotes de evidências reproduzíveis.
Documentação
Assay
O perfil de evidência aberto e recomputável para ações privilegiadas de ferramentas MCP.
O Assay registra o que uma chamada de ferramenta privilegiada decidiu, o que foi observado e o que permanece não comprovado, para que um revisor possa reproduzir a alegação offline em vez de confiar no relato do agente sobre si mesmo. A aplicação é determinística e falha-fechada, e o proxy de aplicação é o produtor de referência, não o contrato em si. Instrumentação opcional eBPF/LSM em hosts Linux suportados adiciona observações em nível de kernel. Nativo para CI, sem backend, limitado por design.
Início rápido · Como funciona · Veja funcionando · Exemplo MCP · OWASP MCP Top 10 · Discussões
Os agentes obtiveram acesso real a ferramentas por meio do MCP — e o envenenamento de ferramentas, puxadas de tapete e OAuth de deputado confuso vieram junto. O Assay fica no limite da chamada de ferramenta e faz três coisas, em ordem.
Um caminho dourado: a jornada do agente com versão fixada registra os nove passos de CLI/MCP dirigidos e seus contratos de saída/stdout. Sua fixture de ação protegida vive em examples/privileged-action-gate/.
Aplicar, provar, permanecer honesto
- Aplicar. No modo de aplicação, o portão decide
tools/callsolicitações roteadas através dele antes de encaminhar, com o motivo preciso para cada permitir ou negar. No Linux, adiciona aplicação real em nível de kernel — um bloqueio de egresso de conexão IPv4/TCP eBPF/LSM e uma lista de permissão de porta de conexão TCP Landlock, ambos opt-in e falha-fechada. Uma política que não pode expressar exatamente é recusada, nunca aplicada pela metade. - Provar. Produtores configurados podem registrar decisões e observações limitadas para exportação em pacotes de evidência verificáveis offline e à prova de adulteração. O fluxo de ação privilegiada carrega o veredito, a jornada de estabelecimento pré-chamada e a conformidade declarada-vs-observada para revisão de CI sem um backend hospedado.
assay mcp wrapbásico não cria automaticamente um pacote; habilite as etapas de registro e exportação necessárias. - Permanecer honesto. A classe Trust Basis classifica alegações suportadas como
verified,self_reported,inferredouabsent; seus portões verificam os limites de alegação declarados. Uma ferramenta retornando "sucesso" é a afirmação do provedor, nunca prova. O Assay não fornece uma pontuação única de segurança; leia a fonte, a cobertura e as não-alegações de cada artefato antes de confiar nele.
Início 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, execute o último comando a partir de um checkout de fonte ou de um arquivo CLI publicado extraído.
O instalador é somente binário e não carrega os ativos de início rápido limitados. O instalador
getassay.dev ao vivo verifica o arquivo selecionado contra seu sidecar SHA-256 publicado antes da
extração. Defina ASSAY_REQUIRE_PROVENANCE=1 para exigir adicionalmente proveniência de artefato GitHub;
o padrão relata provenance_not_requested e sucesso estrito relata provenance_verified.
Uma soma de verificação prova igualdade de bytes com o sidecar publicado, não identidade do produtor. Proveniência
identifica a fonte e a construção, não segurança em tempo de execução ou correção semântica.
Saída capturada do runner (o mock local incluído não realiza nenhuma ação 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
Superfícies lançadas:
- Manifestos de projeto estáticos são enviados para Claude Code e Cursor; Codex usa a entrada TOML equivalente documentada na receita MCP do editor. A presença do manifesto não é prova de descoberta de host.
assay mcp config-pathsuporta apenas Claude Desktop e Cursor. - Arquivos CLI v6.9.0 publicados cobrem Linux x86_64/arm64, macOS x86_64/arm64 e Windows x86_64. As wheels Python cobrem CPython 3.12, 3.13 e 3.14 em macOS x86_64/arm64 e Linux x86_64; outros interpretadores e plataformas não são reivindicados.
- Arquivos
assay-mcp-serverpublicados cobrem Linux x86_64/arm64. Descritores de pacote MCPB eserver.jsontambém são publicados; sua presença não é prova de descoberta de host. - CI: GitHub Action. Fluxos principais não precisam de backend hospedado ou chave de API. Novo no modelo de ameaça? O mapeamento OWASP MCP Top 10 declara, por risco, o que o Assay cobre e deliberadamente não cobre.
O que é entregue
| Saída | O que é |
|---|---|
| Portão de política | assay mcp wrap — permitir/negar determinístico antes de as ferramentas rodarem, com o motivo. |
| Pacote de evidência | Arquivo verificável offline e à prova de adulteração para auditoria e reprodução. |
| Trust Basis / Trust Card | trust-basis.json canônico (classificação de alegação limitada) mais trustcard.{json,md,html} amigável para revisão. |
| Recibos externos | Resultados de avaliação, decisões de runtime e inventário de modelos como recibos limitados com contratos JSON Schema. |
| Logs de decisão de ferramenta | Para chamadas de ferramentas conhecidas tratadas, o servidor stdio assay-mcp-server emite um evento tool_decision em nível de info quando habilitado por seu filtro de log; decision contém uma entrada de decisão observada codificada em JSON com campos de destino projetados. |
| SARIF / CI | GitHub Action, integração com a aba de Segurança, portões de política em PRs. |
| Atestação | Assine um pacote de evidência como uma Declaração in-toto v1 embrulhada em DSSE com o predicado evidence-bundle/v1. |
Agent ──► Assay ──► MCP Server
├─ ✅ ALLOW / ❌ DENY (policy, with reason)
├─► 📋 Evidence bundle (offline-verifiable)
└─► 📊 Trust Basis → Trust Card → SARIF / CI
Lançamento atual: v6.9.0. CHANGELOG.md e notas de lançamento permanecem como autoridade para o comportamento lançado; mudanças mescladas após a tag são Unreleased, e a publicação no crates.io é separada do estado de mesclagem.
Definição de lançamento e compromisso de suporte: docs/LAUNCH.md.
Isso é para mim?
Sim se você já tem saída de avaliação, decisões de runtime, artefatos de inventário ou testes de chamada de ferramenta MCP, e quer um pequeno artefato de CI revisável em vez de um dashboard — auditabilidade limitada, não um selo de confiança escalar.
Ainda não se você precisa que o Assay julgue a correção do modelo por você, quer um dashboard hospedado como produto, ou quer uma alegação de conformidade em vez de um limite de evidência limitado. O Assay não é um motor de pontuação de confiança, um dashboard de avaliação genérico ou um produto de observabilidade hospedado — veja o que é e o que não é.
Veja funcionando
Um agente tenta uma ação privilegiada — github.add_deploy_key — através do proxy de aplicação, decidida por chamada antes de encaminhar, offline contra um mock local (sem credenciais reais):
cd examples/privileged-action-gate && ./run.sh

Uma negação é cautela falha-fechada, não um veredito sobre intenção; uma permissão é a decisão de encaminhar, nunca prova de que a ação aconteceu. A conformidade declarada-vs-observada é registrada ao lado do veredito, nunca como um portão. Caminhada completa: privileged-action-gate.
Escolha seu caminho
| Você tem | O que você obtém | Comece aqui |
|---|---|---|
| Promptfoo JSONL de evals de CI | Recibos de resultado de avaliação + pacote verificado + diff Trust Basis | Promptfoo JSONL |
OpenFeature EvaluationDetails | Recibo de decisão + pacote verificado | OpenFeature |
| Componente de modelo CycloneDX ML-BOM | Recibo de inventário + pacote verificado | CycloneDX ML-BOM |
| Chamadas de ferramenta MCP | Trilha de auditoria permitir/negar + evidência de comportamento observado | Início Rápido MCP |
| Um portão de PR GitHub | Diff Trust Basis, status do portão, saída pronta para SARIF/JUnit | Guia de CI |
| Um arquivo Runner / anotação de cobertura | Descritores de cobertura + células de classe de alegação + verificação reivindicada-vs-observada | Caminhada de honestidade de cobertura |
O fluxo de trabalho permanece pequeno: importe ou registre um resultado limitado, empacote e verifique, compile trust-basis.json, aplique o portão no diff Trust Basis. O Assay não torna a ferramenta upstream a fonte da verdade; torna o limite de evidência inspecionável. Para ações privilegiadas de ferramenta, o proxy MCP registra cada tools/call como uma superfície de decisão de ferramenta estruturada — mantendo a linha afirmado-versus-verificado honesta.
Política é simples
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 gera a política de observação de runtime usada pelo fluxo de geração de rastreamento (files, network e processes); não é uma política de autorização MCP. Migre uma política constraints: MCP legada com assay policy migrate. Veja Arquivos de Política.
Por que Assay
| Evidência canônica | O modelo de evidência do Assay é o contrato estável; OpenTelemetry e adaptadores de protocolo (perfil de projeção ACP / A2A / UCP) mapeiam para ele. |
| Determinístico | O portão de política usa regras explícitas; sua decisão depende da solicitação, política e estado de sessão aplicável. Isso não torna avaliadores ao vivo ou efeitos externos determinísticos. |
| Alegações limitadas | Explícito sobre verificado vs visível vs ausente — sem UX de pontuação primeiro. |
| Offline-first | Nenhum backend necessário para aplicação central e verificação de pacote. |
| Proveniência verificável | Qual peça do modelo de classe de fonte e cobertura foi enviada quando, como commits que você pode git log em vez de alegações que você precisa aceitar — proveniência, trabalho anterior creditado primeiro. |
Saiba mais
- Início Rápido MCP · Receita MCP do editor — MCP com aplicação de política em Cursor / Claude Code / Codex
- Paridade da era do protocolo MCP 2025/2026 — corpus de compatibilidade
resultTypefixado e de resultados intermediários - Governança de agente de codificação · OpenTelemetry & Langfuse — execuções observadas → evidência
- Recibos de Evidência em Ação — famílias de recibos Promptfoo / OpenFeature / CycloneDX
- Guia de CI · Armazenamento de Evidência (S3 / B2 / MinIO)
- Mapeamento OWASP MCP Top 10 · Experimentos de segurança
- Posicionamento: ADR-033 · RFC-005
Epistemologia de evidência, latência e o Runner interno
Alegações de confiança usam epistemologia explícita, não uma pontuação única de segurança: verified (evidência direta ou verificação offline), self_reported (emitida sem corroboração independente), inferred (regras limitadas e documentadas), absent (nenhuma evidência confiável). O Assay não fornece uma pontuação de confiança agregada ou selo safe/unsafe como saída principal — veja ADR-033.
Os resultados de experimento históricos de IPI fragmentado, datados de 2026-03-02 e nomeando o commit 289a43ecc144, relatam 0.771ms p50 / 1.913ms p95 para o conjunto determinístico. O harness cronometra viagens de ida e volta completas de tools/call mock local, incluindo transporte JSON-RPC e a resposta da ferramenta. Esses tempos relatados não isolam a sobrecarga de decisão de política nem estabelecem desempenho de modelo de lançamento atual ou ponta a ponta.
Assay-Runner é um subsistema de execução medida interno/experimental por trás do caminho de aceitação delegado Linux/eBPF. Seus crates são incluídos no processo de publicação do workspace para que pacotes dependentes possam resolvê-los; a publicação não torna o Runner um produto independente nem dá às suas APIs um compromisso de estabilidade separado.
Ecossistema
Projetos relacionados para geração, verificação e revisabilidade de evidência; cada um tem sua própria interface e escopo:
- assay-action — GitHub Action: verifica bundles, resumos de PR, SARIF (Marketplace).
- Assay-Harness — camada de receita, gate e relatório sobre artefatos de evidência canônicos.
- observed-effect-v0 — exemplos práticos do registro de evidência de efeito observado limitado e seus transportadores neutros (in-toto, SCITT, MCP evidenceRef).
- gateway-evidence-replay — verificador determinístico de replay offline para bundles de evidência de caminho de gateway.
- RGE-Bench — um kit de conformidade para revisabilidade de evidências, mantido separadamente sob sua própria guarda de neutralidade verificada por máquina. A reprodução lá é escopada por digest e não é transferível: o digest v1 de 71 vetores
sha256:e769822bc6c9e31085da7b1a17b163b9747fe0d04314fbb8685d4e612087c7cbe o digest v2 históricosha256:ba0e3795d75c788fa48313ab462493f22d78759851d1b3275d8117051bb22fd0(95 vetores) cada um carrega uma implementação independente relatada por um segundo autor em uma stack diferente. JM-Lab relatou a reprodução v2 95/95 em 2026-08-24, a partir do texto do contrato e entradas fornecidas pelo autor, sem lerexpected. Nenhuma reprodução transfere para o digest candidato v3 atual de 104 vetoressha256:93f8ae9654eb5a16dee28d882087669cae5183e02e116ba1e8071a30594cfb6a, que o registro lista como não reproduzido. Veja seu REPRODUCTIONS.md.
Perfil aberto: privileged-mcp-action/v0
privileged-mcp-action/v0
é um contrato de composição e verificação sobre registros de evidência que já existem: o que uma
chamada de ferramenta MCP privilegiada decidiu, o que foi observado de seu efeito e o que permanece
não comprovado. Ele não adiciona novo envelope nem veredito agregado.
Ele acompanha um corpus de conformidade de 14 vetores (5 aceitos, 9 rejeitados) cujo digest é um candidato: não é chamado de reproduzido até que uma implementação não-autora derive os resultados esperados apenas a partir do texto da especificação.
Essa reprodução está aberta, e o convite é real: #1840. Qualquer linguagem, qualquer stack. O convite nomeia o commit exato que o digest atual descreve. O protocolo clean-room fornece um pacote de entradas opaco e atestado, uma ação de pontuação com um comando e um modelo de relatório de implementação, sem fornecer lógica de verificador ou resultados esperados. O README do corpus declara o limite de autoria e o teto de reivindicação.
Contribuindo
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
Veja CONTRIBUTING.md e GitHub Discussions.