第 01 步 / 生成
生成规则
每个 operation 成为一个工具,名字取自 operationId,描述取自
summary。参数按「它要去哪里」加命名空间前缀,因此一个扁平对象
不可能悄悄和另一种绑定冲突:
id),随后按百分号编码填入路径模板limit 的查询参数写作 query_limitbody 对象,保留 schema 自身的属性与 required 列表输入语义含糊或无法解析的 spec 会被整体拒绝,而不是「尽力猜一猜」。一个 半懂不懂的桥,正是模型调到运维根本没打算暴露的东西的方式。
第 02 步 / 配置
配置上游
上游由运维方声明,绝不接受来自请求输入的声明。注册表是一个 JSON 数组,最多 16 条:
export MCP_UPSTREAM_SERVERS_JSON='[{"id":"orders","transport":"openapi","baseUrl":"https://orders.example.test","specUrl":"https://orders.example.test/openapi.json","allowedTools":["listOrders","get*"],"readOnlyTools":["listOrders"]}]'
把 specUrl 换成内联的 spec 对象即可完全离线运行。
任何非空注册表都会自动启用外部副作用闸门。
第 03 步 / 策略
允许清单决定模型能看见什么
匹配规则是精确名、前缀 prefix*,或单个 *。默认并不宽松:
get* 放行 getOrder,而 createOrder 仍被围栏readOnlyTools 里的名字才被标注无副作用;其余一律走外部副作用路径第 04 步 / 边界
会被拒绝什么(下面是网关的原话,不是转述)
MCP upstream 'x' requires an https url.MCP upstream registry exceeds the maximum of 16 servers.MCP_UPSTREAM_SERVERS_JSON is not valid JSON.OpenAPI operation has unsupported, ambiguous, or unresolvable input semantics.Outbound request blocked by the gateway network policy.OpenAPI bridge response exceeds the size limit.目标校验发生在任何传输层之前,因此即使调用方只能控制参数取值,也无法把 生成的工具指向内网地址。
第 05 步 / 接口面
工具出现在哪里
{"status":"disabled","upstreamCount":0}toolCount、tools 与 servers,按已认证身份收窄
启动方式沿用快速上手文档给出的命令,再加上面这个环境变量:
快速上手
里写的是把已发布镜像
ghcr.io/happy520ai/unified-ai-system/ai-gateway-service:0.8.0
以 --publish 127.0.0.1:3100:3100 方式运行。
证据边界
本页如何核对
上面的工具名、参数命名空间、缺省全拒行为、匹配规则以及每一条被引用的错误
字符串,都是在 v0.8.0 标签上直接执行已发布模块得到的:
apps/ai-gateway-service/src/mcpGateway/openApiRestBridge.ts
与 mcpGatewayConfig.ts,对一个三 operation 的示例 spec 运行,
并注入传输层。全程没有网络出站,也没有使用任何真实 Provider 凭据。上一节
那条容器命令是文档既有写法,本页编写时未在本机执行。
这是自托管软件的 Public Preview。以上不构成生产就绪、L5 自主或 AGI 声明, 真实 Provider 默认关闭。