TomCruiseTorpedo/gatewarden

GitHub: TomCruiseTorpedo/gatewarden

一个 MCP/A2A 内联网关,在单一进程中评估下游服务器的 agent 可用性并通过签名租约管控每一次工具调用。

Stars: 0 | Forks: 0

# gatewarden 一个内联的**网关**,针对下游的 MCP server —— 或远程的 **A2A agent** —— 既**评估**其暴露的内容,又通过能力租约(capability leases)**管控**每一次调用 —— 只需一个进程,一份配置。它在单一接口之后融合了两个先前的工具: - **score** —— agent 可用性评估器(内省 → lint → `Scorecard`;A2A Agent Card lint,签名验证 + 签名)。 - **govern** —— 能力租约代理 + 内联执行代理(签名、限定范围、限时租约;默认拒绝;哈希链审计;A2A 租约扩展)。 将其指向下游的 server,你将在一个流程中获得可用性记分卡**以及**最小权限、经过审计的执行。将其指向远程的 A2A agent,你将在上一层协议获得同样的安全态势 —— 并且它可以将其自身受管控的工具接口*作为* A2A agent 提供服务。 ## 工作区布局 | package | role | |---|---| | `@gatewarden/score` | 内省 + lint + 评估下游 MCP server | | `@gatewarden/govern` | 租约、签名 (PASETO v4.public)、策略、审计、每次调用的执行器 | | `@gatewarden/gateway` | 融合体:附加时的评估快照 + 内联租约执行 | 这两个核心是从其独立代码库中原样引入的 —— [mcp-fit](https://github.com/TomCruiseTorpedo/mcp-fit) (score) 和 [leasebroker](https://github.com/TomCruiseTorpedo/leasebroker) (govern);网关是在它们之上的轻量级组合。 ## 快速演示(无需密钥) - `bun install` - `bun run demo` 该演示前置了参考文件系统 MCP server,打印其 agent 可用性记分卡(确定性的 —— 不需要 API 密钥),然后在同一流程中证明执行效果:对 `private/secret.txt` 的超范围读取被租约范围拒绝,而对 `allowed.txt` 的范围内读取则成功。 ## CLI - `bun run build` - `bun packages/gateway/dist/cli/index.js --help` 网关命令(`score`、`serve`、`rescore`)以及完整的租约生命周期(`request`、`approve`、`deny`、`pending`、`revoke`、`policy`、`audit`)。 `@gatewarden/govern` 还提供了一个独立的 CLI(`packages/govern/dist/cli/index.js`),用于在没有网关层的情况下管理租约生命周期。 完整的评分(行为评估轴)需要 `ANTHROPIC_API_KEY`;无需密钥的演示和确定性 lint 轴则不需要。 ## A2A:评估 + 管控远程 agent 同样的态势,向上一层协议([A2A](https://a2a-protocol.org/) v1.0; ADR-H/ADR-I): - `a2a-attach ` —— 以只读方式附加到远程 agent:获取其 RAW Agent Card,对其进行评分(7 个确定性 card 轴 + 签名报告),并写入 `card-compat.json`。`--verify-keys ` / `--verify-jku` 添加 加密验证层。 - `a2a-card --interface-url ` —— 从其受管控的 MCP 工具接口生成本网关自己的 Agent Card(skills 与 tools 为 1:1 对应;租约扩展声明为 `required: true`)。内部验证机制:绝不会发布其自身内置评分器发现错误的 card。`--signing-key` 发布带有签名的 card。 - `a2a-serve --interface-url ` —— 将受管控的接口作为 **活跃的 A2A agent** 提供服务:已知的 card + JSON-RPC endpoint。每一个入站 消息在执行任何下游工具调用之前,都会运行租约入站阶梯流程(声明扩展 → 验证租约 → 否决 → 允许);拒绝路径永远不会触及下游。`--signing-key` 提供一个 SIGNED card 并挂载 `/.well-known/jwks.json`。 - `a2a-keygen --out ` —— 生成 card 签名密钥对(私有 JWK 以 0600 模式写入 + 可发布的 `jwks.json`)。 出站委托也受到管控:`GovernedA2aDownstream` 对在远程 agent 的 endpoint 上的每一次 `http.call` 发送进行拦截(租约会限定范围*允许委托给哪些 agent*),根据 [leasebroker A2A extension profile](https://github.com/TomCruiseTorpedo/leasebroker/blob/main/docs/a2a-lease-extension-v1.md) 携带租约, 并可选择强制执行从 DataParts 提取的 `spend`。 ## 开发 - `bun install` - `bun run test` —— 运行所有包套件 (vitest) - `bun run typecheck` —— 工作区范围内的 `tsc --noEmit` - `bun run build` —— 编译所有包 - `bun run --filter '@gatewarden/score' check:score-sync` —— 验证内置的 score 引擎是否偏离了其 mcp-fit 上游(CI 会强制执行此操作) ## 设计 - 规范:`specs/gatewarden/spec.md` - 决策:`docs/adrs.md` - 计划 + 分解:`plan.md`,`BEADS.md` ## 状态 **在 `main` 分支上:** 完整的 MCP 网关以及 A2A 通道 —— 整个工作区共有 622 个 测试(score 237,govern 240,gateway 145),所有三个包的 typecheck 和 build 均通过,无需密钥的演示通过,CI 通过。 **在 npm 上:** `@gatewarden/score` / `@gatewarden/govern` / `@gatewarden/gateway` 版本为 **0.1.0**,该版本早于 A2A 通道(附加、card 生成/签名、 A2A server 接口以及 a2a-* 命令在下次发布之前仅限于 `main` 分支)。私有根工作区版本保持为 `0.0.0`。 ## 许可证 Apache-2.0。
标签:A2A, AI网关, Bun, MCP, Streamlit, 审计日志, 自动化攻击, 访问控制, 零信任架构