mcpField
M

mcp-gateway

本地服务
github.com/authzx安全011 周前更新

关于 mcp-gateway

mcp-gateway 是位于 AI Agent 与下游 MCP 服务之间的授权代理,面向需要在工具调用执行前检查策略的团队。它支持云端或本地策略评估,并记录结构化调用审计日志。

主要功能

  1. 01转发前检查每次工具调用
  2. 02支持云端和本地授权模式
  3. 03使用 .rego 文件定义本地策略
  4. 04记录结构化审计日志
  5. 05通过 stdio 或 HTTP 提供服务

适用场景

  1. 01限制 Agent 对数据库工具的访问
  2. 02阻止未授权的文件或 SQL 操作
  3. 03为多个远程 Agent 共用受控网关
  4. 04追踪工具调用者、参数与授权结果

MCP 相关

该 MCP 服务代理客户端与下游 MCP 服务之间的请求,在转发工具调用前执行授权检查。它可通过 stdio 或 Streamable HTTP 向 MCP 客户端提供受策略约束的工具。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"authzx-mcp-gateway": {
"command": "npx",
"args": [
"-y",
"@authzx/mcp-gateway"
],
"env": {
"YOUR_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
启动命令npx -y @authzx/mcp-gateway
需要配置的环境变量
YOUR_API_KEY密钥Your API key for the service

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

安装包
npm@authzx/mcp-gateway1.0.1

工具

还没有获取到工具列表

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

详细介绍

Vengtoo MCP 网关

License Node npm

面向 AI Agent 和 MCP 工具调用的授权网关。

开源。即插即用。适用于任何 MCP 客户端。

为什么要用

连接到 MCP 服务的 AI Agent 可以调用其有权访问的任何工具:读取数据库、删除文件、执行任意 SQL。Vengtoo MCP Gateway 在 Agent 与这些工具之间设立策略执行点,确保每次调用都经过授权后才执行。

功能

  • 位于 MCP 客户端(Claude Code、Cursor、VS Code、GitHub Copilot)与任意 MCP 服务之间
  • 拦截每次工具调用,并在转发前检查授权
  • 两种模式:云端(Vengtoo Cloud API)和本地(Vengtoo Agent + .rego 策略文件)
  • 完整记录每次工具调用的审计日志:主体、工具名称、参数和决策均以结构化 JSON 格式记录:
{"ts":"2026-05-25T10:03:11.482Z","level":"info","msg":"mcp_tool_call","subject":"agent:ai-assistant","tool":"database__query","allowed":true,"latency_ms":0.8}

快速开始

  1. 安装并启动 Vengtoo Agent。该 Agent 在本地运行并评估授权策略;无需云账户。
go install github.com/vengtoo/agent/cmd/agent@latest
vengtoo-agent --policy ./policy.rego

创建 policy.rego,定义 Agent 可以执行的操作:

package vengtoo.mcp

default allow := false

# Allow read-only tools
allow if { input.resource.name == "database__query" }
allow if { input.resource.name == "database__list_tables" }

# Allow writes, but block destructive SQL
allow if {
    input.resource.name == "database__execute"
    not contains(lower(input.resource.attributes.sql), "drop")
    not contains(lower(input.resource.attributes.sql), "delete from")
}

更多示例(包括 Kubernetes 命名空间保护),请参见 demo/policies/。

  1. 创建 gateway.config.json:
{
  "vengtoo": {
    "agentUrl": "http://127.0.0.1:8181"
  },
  "subject": "agent:ai-assistant",
  "servers": {
    "database": {
      "command": "node",
      "args": ["./my-database-mcp-server.js"]
    }
  }
}
  1. 添加到 MCP 客户端(例如 Claude Code):
claude mcp add --transport stdio vengtoo-gateway -- \
  npx vengtoo-mcp-gateway --config /path/to/gateway.config.json

配置

配置架构
字段类型必填描述
vengtoo.agentUrlstring*本地 Vengtoo Agent 的 URL(本地模式)
vengtoo.cloudUrlstring*Vengtoo Cloud API 的 URL(云端模式)
vengtoo.apiKeystring来自 Vengtoo Cloud 的 API 密钥(或设置 VENGTOO_API_KEY 环境变量)
vengtoo.timeoutMsnumber授权请求超时时间(默认值:5000)
subjectstringyes发起工具调用的 Agent 身份
subjectTypestring主体类型(默认值:"agent")
resourceTypestring授权检查的资源类型(默认值:"mcp_tool")
serversobjectyes要代理的下游 MCP 服务映射
transportstring调用方传输方式:"stdio"(默认)或 "http",参见传输方式
httpobjectHTTP 传输设置(当 transport 为 "http" 时使用)

* 提供 agentUrl(本地模式)或 cloudUrl(云端模式)之一。

servers 中的每个条目包含:

字段类型必填描述
commandstringyes用于启动 MCP 服务的命令
argsstring[]命令参数
envobject附加环境变量

模式

云端模式

连接到 Vengtoo Cloud,使用托管策略:

{
  "vengtoo": {
    "cloudUrl": "https://api.vengtoo.com/access/v1/evaluation",
    "apiKey": "vgt_..."
  },
  "subject": "agent:prod-assistant",
  "servers": {
    "database": {
      "command": "node",
      "args": ["./db-server.js"]
    }
  }
}
本地模式

在本地运行 Vengtoo Agent,并使用 .rego 策略文件进行离线、自包含的授权:

# Start the agent with your policy
vengtoo-agent --policy ./policy.rego
{
  "vengtoo": {
    "agentUrl": "http://127.0.0.1:8181"
  },
  "subject": "agent:dev-assistant",
  "servers": {
    "database": {
      "command": "node",
      "args": ["./db-server.js"]
    }
  }
}

传输方式

网关通过以下两种传输方式之一,向调用方提供其(受策略保护的)工具。

stdio(默认)

作为本地子进程运行,通过 stdin/stdout 使用 MCP 通信:适用于单个桌面 Agent(Claude Desktop、Cursor、Claude Code)。不会暴露网络接口。

HTTP(远程)

在某个 URL 上运行 Streamable HTTP MCP 服务,这样远程 Agent(或多个并发 Agent)就可以共享一个受管控的网关。使用 --http(或在配置中设置 "transport": "http")启用:

vengtoo-mcp-gateway --config gateway.config.json --http --port 8808
{
  "vengtoo": { "cloudUrl": "https://api.vengtoo.com/access/v1/evaluation", "apiKey": "vgt_..." },
  "subject": "agent:prod-assistant",
  "transport": "http",
  "http": {
    "port": 8808,
    "host": "0.0.0.0",
    "path": "/mcp",
    "authTokens": ["<caller-token>"],
    "allowedHosts": ["gateway.example.com"]
  },
  "servers": { "database": { "command": "node", "args": ["./db-server.js"] } }
}

HTTP 配置(http.*):

字段类型默认值描述
portnumber8808要监听的 TCP 端口
hoststring127.0.0.1要绑定的接口;0.0.0.0 接受远程连接
pathstring/mcpMCP 端点的 URL 路径
callersobject[]-每个调用方的身份:{ "token": "...", "subject": "agent:claude" };每个 bearer token 都授权为其自身的 subject
authTokensstring[]-匿名 bearer token;授予访问权限,并以全局 subject 身份运行
allowedHostsstring[]-启用 DNS 重绑定保护;拒绝 Host 不在列表中的请求
allowedOriginsstring[]-启用 DNS 重绑定保护;拒绝 Origin 不在列表中的请求

每个调用方的身份。 为每个 Agent 分配独立的 token 和 subject,这样你的策略(和审计记录)就能通过一个共享网关识别每个调用方的真实身份:

"http": {
  "port": 8808,
  "callers": [
    { "token": "<claude-token>", "subject": "agent:claude" },
    { "token": "<cursor-token>", "subject": "agent:cursor" }
  ]
}

也可以通过 VENGTOO_GATEWAY_HTTP_CALLERS="<token>=agent:claude,<token>=agent:cursor" 设置。 会话会绑定到创建会话的 token:其他调用方若提供了他人的会话 ID,会收到 401,因此不同身份无法跨会话访问。authTokens 中列出的 token(或完全未配置调用方时)会以配置中的全局 subject 身份运行。

安全性: 如果未配置调用方身份验证(callers 或 authTokens),网关拒绝绑定到非回环接口。请配置 token,或设置 VENGTOO_GATEWAY_ALLOW_UNAUTHENTICATED=true,以明确允许开放端点。始终会提供无需身份验证的 GET /healthz 存活探测。

⚠️ 安全:Vengtoo 信任此网关声明的 subject。 上述 callers token→subject 映射(由此网关自身的配置管理)是正确的做法;这与信任客户端提供的标头不同。切勿改为从调用客户端发送的标头或字段中推导 subject;否则任何调用方都能冒充任意 subject,并在你的租户内继承其权限。如果在此网关前部署了另一个反向代理,请确保无法诱使该代理转发调用方任意选择的 bearer token 或 subject。

CLI 标志

标志描述
--config <path>网关配置文件的路径(默认值:./gateway.config.json)
--http使用 HTTP 而非 stdio 提供服务
--port <n>HTTP 监听端口(默认值:8808;要求配置兼容 --http)
--host <h>HTTP 绑定接口(默认值:127.0.0.1)
--path <p>HTTP 端点路径(默认值:/mcp)
--list-tools列出已配置的下游服务中的所有工具,然后退出
--generate-policy [path]为已配置的工具生成初始 .rego 策略文件(默认值:policy.rego)

环境变量覆盖项:VENGTOO_API_KEY、VENGTOO_AGENT_URL、VENGTOO_SUBJECT、 VENGTOO_GATEWAY_TRANSPORT(http)、VENGTOO_GATEWAY_PORT / PORT、VENGTOO_GATEWAY_HOST、 VENGTOO_GATEWAY_PATH、VENGTOO_GATEWAY_HTTP_TOKENS(逗号分隔)、VENGTOO_GATEWAY_ALLOW_UNAUTHENTICATED。

MCP 客户端设置

网关以 stdio MCP 服务的形式运行。将 MCP 客户端指向该网关,而不是直接指向下游服务。

Claude Code
claude mcp add --transport stdio vengtoo-gateway -- \
  npx vengtoo-mcp-gateway --config /path/to/gateway.config.json
Cursor

添加到 .cursor/mcp.json:

{
  "mcpServers": {
    "vengtoo-gateway": {
      "command": "npx",
      "args": ["vengtoo-mcp-gateway", "--config", "/path/to/gateway.config.json"]
    }
  }
}
Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "vengtoo-gateway": {
      "command": "npx",
      "args": ["vengtoo-mcp-gateway", "--config", "/path/to/gateway.config.json"]
    }
  }
}
VS Code / GitHub Copilot

添加到 .vscode/mcp.json:

{
  "servers": {
    "vengtoo-gateway": {
      "type": "stdio",
      "command": "npx",
      "args": ["vengtoo-mcp-gateway", "--config", "/path/to/gateway.config.json"]
    }
  }
}

请参阅 demo/,了解包含示例策略的完整端到端示例。

路线图

请参阅 ROADMAP.md,了解计划中的功能:针对每位调用者的 OAuth、下游服务弹性、动态工具列表、指标、远程下游服务等。

反馈

许可证

Apache-2.0,详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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