mcpField
G
governed-mcp-gateway

governed-mcp-gateway

本地服务
github.com/icohangar-ops安全07 周前更新

关于 governed-mcp-gateway

governed-mcp-gateway 是面向 MCP 客户端的 HTTP 网关,将 Bearer 凭据解析为主体,并附加到工具调用和 SSE 帧。它还提供工具白名单、按需工具列表、凭据轮换,以及同一工作区内的支出和审计服务。

主要功能

  1. 01在工具调用和 SSE 帧中注入主体
  2. 02通过 Bearer 凭据识别调用方
  3. 03按需管理会话工具列表
  4. 04轮换凭据库中的命名密钥
  5. 05提供支出提案与人工会签流程
  6. 06以锁定状态和文档哈希封存声明

适用场景

  1. 01为 MCP 工具调用传递调用者身份
  2. 02按会话需要开放白名单工具
  3. 03由人工轮换网关凭据
  4. 04为支出提案设置超额人工会签
  5. 05将带来源文档的声明封存为审计证据

MCP 相关

网关通过 Streamable HTTP MCP 端点接收客户端请求,并在每次工具调用及 SSE 帧中注入主体信息。它支持工具列表和调用,并可按需将允许的工具加入会话工具包。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"icohangar-ops-governed-mcp-gateway": {
"command": "npx",
"args": [
"-y",
"@cubiczan/governed-mcp-gateway"
]
}
}
}
启动命令npx -y @cubiczan/governed-mcp-gateway

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@cubiczan/governed-mcp-gateway0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Cubiczan Agent Platform

Cubiczan/governed-mcp-gateway MCP server — quality and maintenance score on Glama

为真正投入使用的 Agent 提供身份、资金和证据。

三个 SKU,一个工作区。MCP 客户端在 tools/call 和 SSE 中保留 Bearer 主体。没有授权书,支出就无法结算;超过上限时,还需要人工第二把密钥。没有 Agent、CHP 锁和哈希文档,董事会声明就无法封存。

三个 SKU:受治理的 MCP 网关、支出授权平面、CFO Agent 网格

SKU端口源码职责
Governed MCP Gateway:7474Cubiczan/governed-mcp-gateway每次工具调用和每个 SSE 帧都包含主体。托管凭据轮换。工具允许列表。模式 Token 成本账本,以及按包 / 按需允许的 tools/list。
Agent Spend & Mandate Plane:7475此工作区提议 → 授权 → 会签 → 结算。默认使用 Stripe;x402 是一种支付通道。
Auditable CFO Agent Mesh:7476此工作区声明 → Agent → 锁 → 文档。ASC 842 / 606 / 718 引擎。HMAC 链式证据包。

共享基础组件(packages/shared):CHP 门控、HMAC 账本、HTTP/SSE 辅助工具。运行时不依赖 npm。Stripe 和 x402 是支付通道——测试不会调用实际网络。

快速开始

npm install
npm test
npm run gateway   # :7474
npm run spend     # :7475
npm run cfo       # :7476

演示用 Bearer 密钥(也见 .env.example):

角色密钥
网关 Agentmcp_agt_payops_demo
网关人工用户mcp_human_controller_demo
网关研究 Agent(无 stripe.charge)mcp_agt_research_demo
支出 Agentspend_agt_payops_demo
支出人工用户spend_human_controller_demo
CFO Agentcfo_agt_lease_demo
CFO 人工用户cfo_human_controller_demo

从本地运行的 API 重新生成 README 卡片:

npm run shots

1. Governed MCP Gateway

生产环境中的 MCP 会丢失身份信息。listTools 在请求线程上运行;tools/call 和 SSE 则在其他位置运行。此网关会将 Bearer 凭据解析为一个 Principal,在每次 JSON-RPC 调用中注入该主体,并在每个 SSE 帧中重复携带该主体。已命名的保险库输入会原地轮换——github_token 仍是 github_token。

在 tools/call 中注入主体

SSE 在每个帧中重复携带主体

轮换 github_token,无需新的输入 ID

curl -sS -H "Authorization: Bearer mcp_agt_payops_demo" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"echo.ping","arguments":{"hello":"world"}}}' \
  http://127.0.0.1:7474/mcp
方法路径说明
GET/health /healthz存活状态({ ok, service, transport, mode })。无需身份验证。
POST/mcpStreamable HTTP JSON-RPC initialize、tools/list(默认:会话包)、tools/call
GET/mcp/sse?once=1本地 SSE 通知,包含 _meta.cubiczan.principal(不是 Vercel 路径)
GET/v1/context/tax模式 Token 成本统计和会话报告
POST/v1/context/need将允许列表中的工具加入会话包
POST/v1/credentials/:name/rotate仅限人工用户的保险库轮换;旧哈希失效
POST/v1/credentials/verify根据当前哈希检查密钥
Glama 远程连接器

Glama 可以使用 Bearer 身份验证,对 https://$VERCEL_URL/mcp 上的无状态 Streamable HTTP 远程服务进行健康检查。这是托管的 HTTPS 接入路径。Stdio(npm run mcp / Dockerfile CMD)仍是 Glama Docker 构建路径。

Vercel 项目设置(导入此 GitHub 仓库;不要自行编造主机名):

设置值
Root Directory.(仓库根目录 — vercel.json + api/)
Framework PresetOther(vercel.json 设置 "framework": null)
Fluid ComputeOn("fluid": true)
Node.js20 或更高版本
Install Commandnpm ci && npm run build(vercel.json 已设置此项)
Build Commandnpm run build(esbuild → dist/web.mjs;不要运行 tsc)
Output Directorypublic(Other 预设所需的空静态目录;Fluid 仍会提供 /api)

npm run build 会运行 scripts/build-vercel.mjs(esbuild),并生成 dist/web.mjs。api/index.mjs 会导入该编译文件——它不会通过运行时 tsx 加载 TypeScript。演示允许列表和超大模式的种子数据会内联到该 bundle 中,因此 Fluid 不会打开 test/fixtures/(函数只包含 dist/**)。使用自定义 buildCommand 时,Other 预设仍要求有一个静态输出文件夹;该文件夹就是 public/(outputDirectory: "public")。如果 Vercel 控制台中的 Build Command 仍设为 tsc,请清除该设置或将其设为 npm run build,以免再次出现 TS5097。只要 vercel.json 生效,就不需要在控制台中覆盖设置。

环境变量(Vercel Project → Settings → Environment Variables)。在公开 URL 上线前,请轮换演示值:

名称本地演示值用途
GATEWAY_AGENT_KEYmcp_agt_payops_demoGlama 连接器 Bearer(PayOps 允许列表)
GATEWAY_HUMAN_KEYmcp_human_controller_demo保管库 / 锁
GATEWAY_RESEARCH_KEYmcp_agt_research_demo研究允许列表(不含 stripe.charge)
SPEND_PLANE_URL未设置:7475 的可选钩子

部署后配置 Glama 连接器字段(将 $VERCEL_URL 替换为 Vercel 显示的部署主机名):

  • URL:https://$VERCEL_URL/mcp
  • 传输方式:Streamable HTTP
  • 身份验证:Bearer $GATEWAY_AGENT_KEY

本地冒烟测试(无需公开主机名):

npm run mcp:http:smoke
# or:
npm run gateway
curl -sS http://127.0.0.1:7474/health
curl -sS -H "Authorization: Bearer mcp_agt_payops_demo" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' \
  http://127.0.0.1:7474/mcp

initialize 不会生成 Mcp-Session-Id。如果需要会话包以外的内容,请在同一次 tools/list 调用中传入 params.pack / params.need。GET /mcp 返回 405(远程服务不支持粘性 SSE)。


2. Agent 支出与授权平面

Agent 提议,授权指令负责授权。金额超过自动上限时,需要人工联签。提议的 Agent 不能为自己的提议联签。结算通过支付通道进行:默认使用 Stripe meter event;如有需要,也可使用 x402 payment-required。此 MVP 不会进行链上调用。

低于上限的提议会自动锁定

超过上限时需要人工使用第二把密钥

Stripe meter 与 x402 payment-required

curl -sS -H "Authorization: Bearer spend_agt_payops_demo" \
  -H "Content-Type: application/json" \
  -d '{"agent":"agt_payops","merchant":{"name":"Stripe","url":"https://stripe.com","country":"US"},"total":"12.00","rationale":"tool meter"}' \
  http://127.0.0.1:7475/v1/proposals
方法路径说明
POST/v1/mandates操作者创建剩余金额(分)额度
POST/v1/proposalsAgent 提议;通道为 auto | approval | blocked
POST/v1/countersign人工使用第二把密钥联签;拒绝 Agent
POST/v1/settle{ "rail": "stripe" } 或 "x402"

3. 可审计的 CFO Agent 网格

董事会声明只有在具备一个 Agent、处于 LOCKED 的 CHP 状态,并且至少有一个源文档哈希后,才算完成。引擎负责计量(ASC 842 租赁滚存、ASC 606 受限 POC、ASC 718 SBC),不会裁定法律事实。Token 支出作为来源,附加到同一条 HMAC 链式账本上。

未附文档的未密封声明

已密封的证据包

ASC 842 融资租赁期末余额为 0.00

curl -sS -H "Authorization: Bearer cfo_agt_lease_demo" \
  -H "Content-Type: application/json" \
  -d '{"title":"AI spend is $12.00 this period","narrative":"Token ledger supports the board claim.","agentId":"agt_lease"}' \
  http://127.0.0.1:7476/v1/claims
方法路径说明
POST/v1/claims新建声明
POST/v1/claims/:id/documents附加具名来源;存储 SHA-256
POST/v1/claims/:id/lock人工锁定 → LOCKED
POST/v1/engines/leaseASC 842 分类与滚存
GET/v1/evidence/:id密封;没有文档或未锁定时返回 400

规范

OpenSpec 变更:ship-three-sku-platform、tools-list-token-tax、glama-streamable-http-remote、vercel-compiled-fluid-entry、vercel-public-output-directory。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。