Assay 是面向 MCP(Model Context Protocol)工具调用的开源证据与策略执行代理,官方定位为“特权 MCP 工具动作的开放式、可重算证据档案”。它位于工具调用边界,按顺序完成三件事:强制执行、证明、保持诚实。
一、用途与背景 根据官方资料,智能体通过 MCP 获得了真实的工具访问能力,随之而来的是工具投毒、rug pulls 以及混淆代理 OAuth 等风险。Assay 旨在让审查者可以离线重放某次受特权工具调用“决定了什么、观测到了什么、哪些仍未被证明”,而不是仅信任智能体对自身的陈述。
二、主要能力
- 强制执行(Enforce):在强制模式下,经过代理的 MCP tools/call 请求会在转发前被判定放行或拒绝,并给出每次允许或拒绝的精确原因。该代理门是确定性的、故障关闭的;执行代理是参考生产者,而非契约本身。在受支持的 Linux 主机上,可选的控制包括:cgroup eBPF IPv4/TCP connect 过滤(其 hook 错误路径会允许连接)、Landlock TCP 连接端口白名单。assay sandbox --enforce 会在后端不可用或文件系统策略冲突时拒绝执行,除非显式使用 --allow-audit-fallback。--enforce-net 需要与 --enforce 搭配;活动的 Landlock 网络强制会拒绝无法表达为 TCP 端口白名单的策略,即使启用了审计回退也是如此。
- 证明(Prove):可配置的生产者能够记录决策和有界观测,并导出为离线可验证、防篡改的证据包。特权动作流程会携带判定结果、调用前建立旅程以及声明与观测的一致性,供 CI 审查使用,无需托管后端。注意:基本的 assay mcp wrap 不会自动创建证据包,需要启用所需的记录和导出步骤。
- 保持诚实(Stay honest):Trust Basis 把受支持的主张分类为已验证(verified)、自报告(self_reported)、推断(inferred)或缺失(absent),其门检查声明的边界。工具返回“success”只是提供方的断言,永远不等于证明。Assay 不提供单一安全评分;在依赖任何产物前,应阅读其来源、覆盖范围和未声明事项。
三、使用方式与流程 工作流保持精简:导入或记录一个有界结果,打包并验证它,编译 trust-basis.json,对 Trust Basis 差异设门。Assay 不让上游工具成为事实来源,而是让证据边界可检查。对于特权工具动作,MCP 代理会把每次 tools/call 记录为结构化的工具决策面,保持“断言与验证”的界线清晰。
版本与安装要点:对于 v6.12.0,最后一条命令需从源代码检出或解压已发布的 CLI 归档后运行;安装器为仅二进制,不包含有界快速入门资产。线上 getassay.dev 安装器会在解压前对照已发布的 SHA-256 sidecar 验证所选归档。设置 ASSAY_REQUIRE_PROVENANCE=1 可额外要求 GitHub artifact provenance;默认报告 provenance_not_requested,严格成功报告 provenance_verified。校验和证明与已发布 sidecar 的字节一致,而非生产者身份;provenance 标识来源与构建,而非运行时安全或语义正确性。
策略方面:assay init --from-trace trace.jsonl 会生成轨迹生成流程使用的运行时观测策略(files、network、processes),它不是 MCP 授权策略。旧版 MCP constraints 策略可用 assay policy migrate 迁移。
已发布形态:为 Claude Code 和 Cursor 提供静态项目清单;Codex 使用编辑者 MCP 配方中记录的等价 TOML 条目。清单存在不等于主机发现证明。assay mcp config-path 仅支持 Claude Desktop 和 Cursor。v6.12.0 CLI 归档覆盖 Linux x86_64/arm64、macOS x86_64/arm64、Windows x86_64;Python wheels 覆盖 CPython 3.12、3.13、3.14 的 macOS x86_64/arm64 与 Linux x86_64,其他解释器和平台未作声明。assay-mcp-server 归档覆盖 Linux x86_64/arm64。MCPB 和 server.json 包描述符也已发布,其存在不等于主机发现证明。CI 提供 GitHub Action,核心流程无需托管后端或 API 密钥。
四、适用场景 适合:已有评估输出、运行时决策、清单产物或 MCP 工具调用测试,并希望得到小型可审查的 CI 产物而非仪表盘,追求有界可审计性而非单一信任徽章的用户。 不适合:需要 Assay 替你判断模型正确性、把托管仪表盘作为产品、或想要合规声明而非有界证据边界的用户。Assay 不是信任评分引擎、通用评估仪表盘或托管可观测性产品。
五、限制与边界 拒绝是故障关闭的谨慎行为,不是对意图的判定;允许是决定转发,永不是动作已发生的证明。声明与观测的一致性记录在判定结果旁边,绝不作为门。Assay 使用明确的认识论而非单一安全评分:已验证(直接证据或离线验证)、自报告(无独立佐证)、推断(有界、有文档的规则)、缺失(无可信证据),不输出聚合信任分数或安全/不安全徽章作为主要输出。历史碎片化 IPI 实验结果为 2026-03-02、提交 289a43ecc144,报告确定性集合的 p50 为 0.771ms、p95 为 1.913ms,测量的是完整本地模拟 tools/call 往返(含 JSON-RPC 传输和工具响应),不代表策略决策开销或当前版本、端到端模型性能。Assay-Runner 是内部/实验性的实测运行子系统,位于委托 Linux/eBPF 验收路径之后;其 crate 被纳入工作区发布流程以便依赖解析,但发布不使 Runner 成为独立产品,也不为其 API 提供单独的稳定性承诺。