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.

Crates.io CI License

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/call solicitaçõ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 wrap bá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, inferred ou absent; 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

Assay decides each MCP tool call before it runs, fail-closed, with the reason

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-path suporta 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-server publicados cobrem Linux x86_64/arm64. Descritores de pacote MCPB e server.json també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ídaO que é
Portão de políticaassay mcp wrap — permitir/negar determinístico antes de as ferramentas rodarem, com o motivo.
Pacote de evidênciaArquivo verificável offline e à prova de adulteração para auditoria e reprodução.
Trust Basis / Trust Cardtrust-basis.json canônico (classificação de alegação limitada) mais trustcard.{json,md,html} amigável para revisão.
Recibos externosResultados de avaliação, decisões de runtime e inventário de modelos como recibos limitados com contratos JSON Schema.
Logs de decisão de ferramentaPara 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 / CIGitHub Action, integração com a aba de Segurança, portões de política em PRs.
AtestaçãoAssine 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

privileged-action PR-gate demo

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ê temO que você obtémComece aqui
Promptfoo JSONL de evals de CIRecibos de resultado de avaliação + pacote verificado + diff Trust BasisPromptfoo JSONL
OpenFeature EvaluationDetailsRecibo de decisão + pacote verificadoOpenFeature
Componente de modelo CycloneDX ML-BOMRecibo de inventário + pacote verificadoCycloneDX ML-BOM
Chamadas de ferramenta MCPTrilha de auditoria permitir/negar + evidência de comportamento observadoInício Rápido MCP
Um portão de PR GitHubDiff Trust Basis, status do portão, saída pronta para SARIF/JUnitGuia de CI
Um arquivo Runner / anotação de coberturaDescritores de cobertura + células de classe de alegação + verificação reivindicada-vs-observadaCaminhada 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ônicaO 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ísticoO 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 limitadasExplícito sobre verificado vs visível vs ausente — sem UX de pontuação primeiro.
Offline-firstNenhum backend necessário para aplicação central e verificação de pacote.
Proveniência verificávelQual 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

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:e769822bc6c9e31085da7b1a17b163b9747fe0d04314fbb8685d4e612087c7cb e o digest v2 histórico sha256: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 ler expected. Nenhuma reprodução transfere para o digest candidato v3 atual de 104 vetores sha256: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.

Licença

MIT