关于 ACTIVE DEVELOPMENT - WORK IN PROGRESS
这是面向组织的开源 AI 资产注册表与 MCP 网关,为开发、平台和安全团队提供统一的发现、访问控制与审计。它将 MCP 服务、Agent、技能及自定义实体纳入同一治理平面。
主要功能
- 01统一注册 MCP 服务、Agent 与技能
- 02语义和词法搜索资产
- 03统一网关及细粒度访问控制
- 04OAuth 凭据代理与审计记录
- 05安全扫描和外部注册表联邦
适用场景
- 01集中管理组织中的 MCP 服务
- 02让 Agent 按自然语言查找工具
- 03接入需要 OAuth 的 SaaS MCP 服务
- 04审核资产并追踪访问事件
MCP 相关
该项目提供 MCP 原生接口,并通过单一认证网关注册、发现和治理 MCP 服务。客户端可通过网关访问聚合后的虚拟 MCP 服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Gateway & Registry 是一个统一的治理控制平面,管理组织中的所有 AI 资产,从 MCP 服务和 AI Agent,到技能以及团队构建的任何自定义资产。它采用 Apache 2.0 许可证开源,可运行于 Kubernetes(Amazon EKS)、全托管无服务器环境(Amazon ECS)或 Docker Compose(Amazon EC2)。
它最初是一个面向 Model Context Protocol (MCP) 的网关和注册表:通过一个安全入口访问多个 MCP 服务,并提供集中式发现与治理。随着团队开始将 Agent、技能和其他资产与服务一同注册,它逐渐发展为通用的 AI 资产注册表,并沿用最初的网关、访问控制和审计模型。
为什么要构建它
没有控制平面时,每个团队都要手动连接自己的 MCP 服务和 Agent:每个点文件中都有各自的凭据,没有共享的资产清单,没有审计记录,也无法发现或治理现有资产。Agent 无法找到其他 Agent;服务和 Agent 分别存放在无法共享策略的注册表中。
这个平台通过 为每种 AI 资产提供一个统一且受治理的入口 来解决这些问题。只需注册一次服务、Agent、技能或自定义实体,即可通过自然语言搜索发现它,并通过一个经过身份验证的网关访问它;该网关会强制执行访问控制并记录每次调用。所有资产类型共用一个控制平面、一套访问模型和一条审计记录。
以企业方式接入第三方 OAuth MCP 服务。 网关提供按用户进行的出站身份验证,因此你可以连接受 OAuth 保护的 SaaS MCP 服务,例如 Slack、Atlassian 和 GitHub,而无需每位用户分别配置这些服务的网络访问权限,或在笔记本电脑上存储凭据。每位用户只需连接一次自己的账户;网关会运行 OAuth(3LO)流程,将每位用户的令牌存入密钥管理器,并在出站时注入令牌。这样,接入流程就简化为一个可审计的统一控制点,团队无需为每台笔记本电脑单独配置网络连接,也无需分散存储长期有效的令牌,就能在整个企业中采用新的 SaaS MCP 服务。
工作原理
网关是数据平面(通用 nginx 反向代理:TLS、身份验证、路由到后端),注册中心是控制平面(负责管理资源清单、访问模型和审计跟踪的 FastAPI 服务,并决定网关可以路由到哪些目标)。身份验证服务器集成你的身份提供方(Keycloak、Entra ID、Okta、Auth0、Cognito、PingFederate),用于 OAuth2/OIDC;MongoDB / DocumentDB 用于存储配置、嵌入向量、会话和审计记录。
默认情况下,注册中心负责 A2A 发现、身份验证和访问控制,随后 Agent 直接(点对点)通信,而不是将每次调用都路由到网关。有关完整设计及其不变量,请阅读系统理论;分层示意图请参阅架构图。
查看实际演示
观看 MCP 服务、A2A Agent 和外部注册中心如何协同工作,实现动态工具发现:
https://github.com/user-attachments/assets/97c640db-f78b-4a6c-9662-894f975f66e2
更多演示请参阅演示视频。
根据你的身份,从这里开始……
| 你的身份…… | 从这里开始 |
|---|---|
| 开发者 | 从完整设置指南开始;也可以试试 macOS 设置技能,在 MacBook 上运行它。然后参阅 AI 编码助手集成指南,连接你的 AI 编码助手。有关编程方式的访问,请参阅 OpenAPI 规范、Python 注册客户端(registry_client.py)和 CLI([registry_management.py](api/registry_management.py))。 |
| 平台 / 安全 / 运维团队 | 请参阅 Amazon EKS(Helm)、Amazon ECS(Terraform)和 Docker Compose部署指南;身份验证指南;配置参考;以及访问控制与作用域。 |
| 正在评估是否采用的决策者 | 阅读执行摘要,观看演示视频,并试试 AWS Workshop。 |
快速开始
最快的方法是使用预构建的 Docker 镜像。克隆仓库、设置几个密钥,然后运行:
git clone https://github.com/agentic-community/mcp-gateway-registry.git
cd mcp-gateway-registry
cp .env.example .env
# Edit .env and set the required secrets (e.g. KEYCLOAK_ADMIN_PASSWORD, SECRET_KEY).
# See docs/configuration.md for the full list.
nano .env
# Deploy with pre-built images (pulled from Amazon ECR Public by default)
./build_and_run.sh --prebuilt
# Open the Registry UI (served by nginx on port 80)
open http://localhost # macOS (Linux: xdg-open http://localhost)
完整安装指南提供了 Amazon EC2 的完整操作流程(前置条件、MongoDB 和 Keycloak 初始化、创建首个用户和服务账号、注册服务,以及测试网关)。
要部署到其他环境?
- Amazon ECS:请参阅 Terraform 堆栈 README,或者更推荐使用 Terraform 设置技能,让你的 AI 编码助手为你执行部署。
- Amazon EKS:请参阅 Helm charts。
- 只想在 macOS 上试试?:使用 macOS 设置技能,在 MacBook 上完成端到端运行。
包含内容
该注册表包含四种内置资产类型,以及由管理员定义的自定义资产类型,所有内容都由同一控制平面管理:
- MCP 服务:注册、发现并管理对 MCP 服务的访问,这些服务由一个经过身份验证的网关统一接入。
- Agent(A2A):注册 Agent,并让它们根据能力相互发现;默认情况下,Agent 之间的通信采用点对点方式。
- 技能:注册、管理版本并发现可复用的
SKILL.md技能,注册时还会进行安全扫描。 - 自定义实体:管理员可定义由架构驱动的自定义实体类型(n8n 工作流、策略、提示词模板、模型卡等);请参阅自定义实体类型。
所有类型均支持语义 + 词法搜索、UI、REST 和 MCP 原生接口,并采用统一的治理方式。以下是值得关注的主要功能:
- 将其用作适用于任何 HTTP 服务的 AI 网关:在模型推理(OpenAI、Amazon Bedrock,以及任何兼容 OpenAI 的端点)、MCP 服务、A2A Agent 和任何通用 REST 端点前提供一个经过身份验证的统一入口。调用方持有网关令牌;后端 URL 及其凭证保存在注册表中,静态加密,并在出口时注入;每个实体均支持流式传输,并与其他所有内容一样适用相同的范围、审计和速率限制。默认关闭。设计 · 常见问题:OpenAI 和 Bedrock
- 单一身份验证网关:一个统一入口;通过你现有的 IdP(Keycloak、Entra ID、Okta、Auth0、Cognito、PingFederate)进行 OAuth 身份验证,并支持细粒度范围。
- 动态工具发现:Agent 和编码助手可在运行时通过自然语言语义搜索查找工具,无需硬编码配置。
- 虚拟 MCP 服务:将多个后端的工具聚合到一个端点后,并提供按工具设置的访问控制。
- 按用户进行出口身份验证(3LO / OBO / PAT):网关代理第三方 SaaS 凭证,因此令牌不会保存在用户的笔记本电脑上。
- 安全扫描 + 默认拒绝准入门:每个注册的服务、Agent 和技能都会经过扫描;不安全的项目将暂扣以供审核。
- 外部注册表联邦:接入 Anthropic 的 MCP Registry、AWS Agent Registry 和对等注册表,构建统一界面。
- 审计日志:完整且可追溯的访问和管理事件审计记录,并对凭证进行遮蔽,以满足合规要求并用于事件审查。
- 可观测性:OpenTelemetry 指标和内置的运行状况监控。
最新动态
- 无需 LiteLLM 的嵌入、额外请求标头,以及会被编入索引的长条目 - 远程嵌入不再通过 LiteLLM:注册表用自有的约 500 行代码调用 OpenAI 和任何 OpenAI 兼容端点、Azure OpenAI,以及 Amazon Bedrock 上的 Amazon Titan 和 Cohere,并发送相同的请求,以确保已存储的向量仍然有效;若启动时发现无法提供服务的模型名称,就会立即拒绝启动,而不是等到首次调用时才报错。运维人员最多可为每个嵌入请求添加五个标头,以访问位于 API 网关之后的端点,并可设置请求超时时间和重试次数。条目文本超出模型可接受的长度时(通常是拥有众多工具的服务),过去会被排除在语义搜索之外;现在注册表会在嵌入失败后重试一次,缩短最长的工具描述,同时保留所有名称。若 Entra 部署中的令牌未包含组成员资格信息,现在会从 Microsoft Graph 恢复这些信息。我们构建的每个镜像也都会移除两份于 2026-10-20 被判定为不可信的根 CA。请参阅嵌入和 1.34.0 发行说明,其中列出了现在会导致启动失败的三种模型名称形式。
- 虚拟服务的凭据代理与根端点路由 - 虚拟 MCP 服务现在可以代理需要按用户提供凭据的后端服务:后端请求会经过与直接调用相同的凭据签发和注入步骤,并以解析后的后端路径为键,因此,一个虚拟服务可以代理凭据模式不同的两个后端服务,并分别为它们签发凭据。调用方必须同时拥有虚拟服务和后端服务的授权,且授权会针对重写后的确切请求进行检查;调用方自己的网关令牌绝不会转发给由注册者控制的后端。此项改动还让虚拟服务可以代理无状态的 Streamable HTTP 后端。此外,使用
append_mcp_path: false注册的服务现在可以通过其公布的裸路径访问,而不再只能通过尾部带斜杠的路径访问;MCP 客户端不会跟随重定向到这种路径。1.33.0 发行说明 - 无直接互联网访问的网络支持通过转发代理出站 - 如果注册表唯一的出站路径是企业转发代理,它就无法访问任何外部 MCP 服务;在 1.31.0 中,甚至无法完成浏览器登录。这两个问题源自同一原因:httpx 只会在自己的默认传输中启用环境代理支持,而受 SSRF 防护的客户端和池化登录客户端各自提供了自定义传输,因此
HTTP_PROXY和HTTPS_PROXY会被静默忽略。现在,EGRESS_FORWARD_PROXY_ENABLED=true会通过已配置的代理路由这两类请求,具体是否使用代理由 DNS 分类决定,而不是由运维人员维护的列表决定:只有当目标解析出的所有地址都是公网地址时,才会通过代理;因此,集群内服务无需配置就能保留 IP 固定。解析和分类仍会在任何CONNECT之前完整执行,因此针对云凭据、元数据、链路本地、保留地址和组播地址的拒绝规则仍会生效;携带密钥的请求只接受https,确保凭据在隧道内传输。我们明确说明了代价,而非加以掩饰:对于通过代理的公网目标,会放弃 IP 重新绑定固定,因为CONNECT隧道会从请求 URL 获取 TLS 主机名。若代理会拦截 TLS,EGRESS_FORWARD_PROXY_CA_BUNDLE可加载 CA 包;它会在默认根证书之上追加,而不是替换默认根证书。启用此标志时,如果NO_PROXY未排除云凭据端点,服务将拒绝启动,因为HTTP_PROXY也会重新指定 AWS SDK 的代理。默认关闭。1.32.0 发行说明 · 常见问题:配置转发代理 · 运维指南 - 后端身份、工具级安全,以及更快的热路径 - 接入一个在响应
initialize之前就要求 OAuth 的 MCP 服务,不再意味着要在记录中存放静态 bearer 令牌,让它同时用于健康检查、工具发现和安全扫描,且无法限定其仅用于发现。这些都是没有用户参与的无头调用,因此注册表此前没有其他凭据可用。一个解析器会从三个层级中最多选取一种凭据:机器的client_credentials授权、由所有者一次性同意且由注册表从保险库中借用的按用户 OAuth 2.1 身份,或适用于obo_exchange服务的网关仅应用令牌。个人自己的凭据和借用的身份共享同一主体、提供方和服务,因此purpose会成为保险库地址的一部分,编码器也会将其绑定到 AEAD 中,即使攻击者拥有写入权限,也能将两者区分开来。借用的身份只会列出工具,不会调用工具:tools/call永远不会到达注册表的 Python 代码,因为 nginx 会使用调用方自己的标头代理该请求。现在,被扫描器标记的工具会单独携带封禁状态,因此一次误报不再会影响该服务上的其他工具。封禁优先于管理员授权和通配符授权;重新扫描时会进行同步,因此过时的封禁可以清除,并且该工具会从所有读取视图中隐藏。搜索现在会对相关性评分,而不再一律返回1.0;应用内延迟从 641ms 降至 86ms。出站调用会复用以通过 SSRF 验证的 IP 为键的池化 HTTP 客户端,确保连接池不会削弱重新绑定防护。1.31.0 发行说明 · 身份验证 · OBO 令牌交换 - 适用于任何资源的网关 — 一个 AI 网关,支持推理、MCP、A2A 和 REST - 网关现在可以代理任何 HTTP 后端,而不仅限于 MCP 服务,因此,一个经过身份验证的入口即可覆盖四类流量:模型推理(OpenAI、Amazon Bedrock 或任何 OpenAI 兼容端点)、MCP 服务、A2A Agent,以及注册为自定义实体的任意通用 REST 端点。调用方持有一个网关令牌,即可通过注册表 URL 访问所有资源;后端 URL 及其凭据保留在注册表中,并在静态存储时加密、出站时注入,因此提供方密钥不会落到笔记本电脑上。对于每条记录,各调用方都使用自己的密钥(调用方透传);这是默认设置,也是请求背后有真人用户时的正确选择:提供方会将每位用户视为独立客户端,因此配额和账单都能归属到对应用户。也可以选择共享的运维人员密钥,适用于没有终端用户可供归属的服务到服务流量。每个实体的响应流式传输会逐步传递 SSE 和 AWS event-stream 响应体,并设有并发数、字节数和持续时间上限;每次调用都经过与注册表其余部分相同的权限范围、审计跟踪和速率限制——旧式
methods: ["all"]授权不会允许任何 HTTP 动词,因此不会意外扩大访问权限。默认关闭(GATEWAY_GENERIC_PROXY_ENABLED=false),需按实体选择启用,且无需迁移架构。设计文档 · 运维指南 · 常见问题:通过网关调用 OpenAI 或 Bedrock · 常见问题:升级会带来哪些变化 更早的亮点 → 功能与发行亮点 · 各版本的完整详情请参阅发行说明和 GitHub Releases 页面。
路线图
路线图最好通过 GitHub 里程碑页面跟踪。面向用户的出站身份验证(3LO 和 OBO)以及 A2A 流量路由已在 1.27.0 中发布,适用于任何 HTTP 资源的网关已在 1.30.0 中发布,后端 OAuth 身份以及按工具阻止访问已在 1.31.0 中发布。总体而言,我们接下来正在开发的主要功能包括:
- 适用于 OBO 的 Keycloak RFC 8693 令牌交换(1.32.0):为 Keycloak 部署提供基于标准的代表用户交换。由于 Keycloak 通过服务器端映射器而非请求作用域绑定令牌受众,目前无法使用 OBO 出站路径或后端发现功能。
- 面向编码助手的客户端 ID 元数据文档:截至 1.31.0,注册表已发布自己的 CIMD,目前默认禁用。下一步是支持身份提供商侧,让助手无需预先注册客户端 ID,即可尽可能轻松地连接不同提供商。
- 注册表 Copilot:内嵌聊天和 Agent 构建体验,方便用户在注册表中发现资源并组合 Agent。进度见 #744;尚未安排到具体版本。
有功能请求?请提交 GitHub 问题,我们以开源方式开发。
文档
完整文档请访问文档网站,所有指南也都位于 docs/ 文件夹中。遇到问题或有疑问?请先查看 FAQ / 故障排除指南:其中涵盖最常见的设置、身份验证、部署和注册问题。
各类受众常用页面:
快速入门
- 快速入门 · 安装指南 · 配置参考 · FAQ / 故障排除
平台与安全
- 身份验证指南 · 访问控制与作用域 · 网关代理指南 · AWS ECS 部署 · Amazon EKS(Helm) · 可观测性 · 联邦 · 正向代理出站流量
架构与开发
- 架构图 · API 参考 · AI 编码助手集成 · MCP 注册表 CLI
设计决策
遥测
注册表会收集匿名、非敏感的使用遥测数据(版本、操作系统、云提供商、资源总数),以了解使用情况。遥测默认启用,可选择退出;不会发送任何个人身份信息、凭据、端点或模型名称。设置 MCP_TELEMETRY_DISABLED=1 即可禁用所有遥测。完整的架构和隐私保障说明请参阅:遥测文档。
社区
- GitHub 讨论区,功能请求和一般讨论
- GitHub 问题,错误报告和功能请求
- 路线图(GitHub 里程碑),即将发布的版本及相关问题
- 贡献指南 · 行为准则 · 安全政策
Star 历史
在 star-history.com 查看完整的交互式 Star 增长图表。
许可证
本项目采用 Apache-2.0 许可证。详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。