Registry 常见问题
MCP Registry 常见问题
这些问题在关于 MCP Registry 的讨论中经常出现。如果您有这里没有解答的问题,请在 MCP Registry 讨论页面 上开始讨论。
一般问题
什么是 MCP Registry?
MCP Registry 是公开可访问的 MCP 服务器的官方集中式元数据存储库。它提供:
- 服务器创建者发布其服务器元数据的单一场所
- MCP 客户端和聚合器发现可用服务器的 REST API
- 标准化的安装和配置信息
- 通过 DNS 验证的命名空间管理
“官方 MCP Registry”、“MCP Registry”、“MCP 注册中心"等有什么区别?
有四个基本概念:
- “MCP 服务器注册中心 API”(或"MCP Registry API”):在 openapi.yaml 中定义的 OpenAPI 规范。这是一个可重用的 API 规范,任何构建"MCP 服务器注册中心"的人都应该考虑采用/对齐。
- “官方 MCP Registry”(或"MCP Registry"):位于
https://registry.modelcontextprotocol.io
的应用程序。该注册中心目前仅编目 MCP 服务器,但将来可能扩展到也编目 MCP 客户端/主机应用程序和框架。 - “官方 MCP Registry API”:在
https://registry.modelcontextprotocol.io
提供的 REST API,它是 MCP Registry API 的超集。 - “MCP 服务器注册中心”(或"MCP 注册中心"):第三方(可能是商业)实现的 MCP 服务器注册中心 API 或衍生规范。
MCP Registry 是包注册中心吗?
不是。MCP Registry 存储有关 MCP 服务器的元数据以及它们托管位置的引用(npm、PyPI、NuGet、Docker Hub 等),但不托管实际的源代码或包。
谁应该直接使用 MCP Registry?
该注册中心主要设计用于子注册中心(Smithery、PulseMCP、Docker Hub、Anthropic、GitHub 等)的程序化消费。它目前不面向个人客户端或最终用户(他们应该使用子注册中心)。
会有功能 X 吗?
请参阅 路线图。
发布服务器
如何发布我的 MCP 服务器?
请参阅 发布指南。
有哪些可用的命名空间?
- GitHub 验证:
io.github.yourusername/server-name
、io.github.yourorg/server-name
- DNS 验证:
com.yourcompany.*
、com.yourcompany.*/*
- HTTP 验证:
com.yourcompany/*
需要开源吗?
不需要。虽然鼓励开源代码,但对于本地或远程运行的服务器都不是必需的。
支持哪些包注册中心?
- npm(Node.js 包)
- PyPI(Python 包)
- NuGet.org(.NET 包)
- GitHub Container Registry(GHCR)
- Docker Hub
- MCPB(MCP Bundle 格式)
社区可以根据需要添加更多;如果您有兴趣为另一个注册中心构建支持,请随时提出问题。
可以发布多个版本吗?
可以,支持版本控制:
- 每个版本都有自己不可变的元数据
- 每个服务器的版本字符串必须唯一
- 旧版本保持可访问以保持兼容性
- 注册中心在可能的情况下基于语义版本排序跟踪哪个版本是"最新的"
如何更新我的服务器元数据?
提交一个带有唯一版本字符串的新 server.json
。一旦发布,版本元数据就是不可变的(类似于 npm)。
应该使用什么版本格式?
注册中心接受长度最多 255 个字符的任何版本字符串,但我们建议:
- 应该使用语义版本控制(例如,“1.0.2”、“2.1.0-alpha”)以获得可预测的排序
- 应该与包版本对齐以减少混乱
- 可以使用预发布标签(例如,“1.0.0-1”)用于注册中心特定版本
注册中心尝试将版本解析为语义版本以进行适当的排序。允许非语义版本,但将按发布时间戳排序。版本范围(例如,^1.2.3
、~1.2.3
、>=1.2.3
、1.x
、1.*
)被拒绝;请发布特定版本。详细指导请参阅 版本控制指南。
发布时可以添加自定义元数据吗?
可以,发布到注册中心时,_meta
属性下的扩展会被保留。这允许您包含特定于发布过程的自定义元数据。
可以删除/取消发布我的服务器吗?
在最后更新时,这在 #104 中正在讨论。
可以发布私有服务器吗?
私有服务器是那些只能被一小部分用户访问的服务器。例如,在私有网络上发布的服务器(如 mcp.acme-corp.internal
)或在私有包注册中心上发布的服务器(例如 npx -y @acme/mcp --registry https://artifactory.acme-corp.internal/npm
)。
官方 MCP 注册中心通常不支持这些,它是为公开可访问的 MCP 服务器设计的。
如果您想发布私有服务器,我们建议您托管自己的 MCP 子注册中心,并将它们添加到那里。
安全性和信任
如何知道服务器来自声称的组织?
DNS 验证确保命名空间所有权。例如:
com.microsoft/server
需要 microsoft.com 的 DNS 验证io.github.name/server
与 GitHub 账户或 GitHub 组织name
绑定
有安全扫描吗?
MVP 将安全扫描委托给:
- 底层包注册中心;以及
- 子注册中心
如何防止垃圾邮件?
- 命名空间身份验证要求
- 对自由格式字段的字符限制和正则表达式验证
- 手动删除垃圾邮件或恶意服务器
将来我们可能会探索:
- 更严格的速率限制(例如,每个用户每天 10 个新服务器)
- 潜在的基于 AI 的垃圾邮件检测
- 社区报告和管理员黑名单功能
API 和集成
应该多长时间轮询一次注册中心?
推荐的轮询频率:
/servers
端点:每小时一次/servers/:id
端点:每个版本一次(结果是不可变的)- 设计假设在注册中心和消费者之间有 CDN 缓存
另请参阅 #291,这可能意味着上述可以更加定期。
会有 webhooks 吗?
在初始 MVP 中没有,但架构支持在将来添加 webhooks 用于更新通知。
可以运行自己的注册中心实例吗?
可以!API 形状和数据格式有意设计为供子注册中心重用。需要私有注册中心的组织应该:
- 实现相同的 API 形状
- 使用相同的
server.json
格式 - 可能镜像/过滤官方注册中心数据
可以扩展注册中心 API 吗?
可以,我们在许多地方支持 x-com.example
样式扩展 - 请参阅官方 MCP 注册中心 API 规范。这可以用于向许多对象添加注释,例如添加安全扫描详细信息、丰富包元数据等。
如果您有无法在此处解决的用例,请提出 GitHub 问题!
可以使用这里的代码运行自己的注册中心实例吗?
这里的注册中心实现不是为自托管而设计的,但欢迎您尝试使用它/根据需要分叉它。请注意,这不是预期用途,注册中心维护者目前无法为此提供任何支持。
运营和维护
预期可靠性如何?
- 这是一个社区维护的项目,没有全职人员。因此,您应该预期最多 1 个工作日的停机时间。不提供严格保证。(另请参阅 #150 中的讨论)
- 理想情况下,客户端应该使用具有更高可用性保证的子注册中心,以避免直接的最终用户影响(因为子注册中心可以缓存数据)。
如果我需要举报垃圾邮件或恶意服务器怎么办?
- 将其作为滥用报告给底层包注册中心(例如 NPM、PyPI、DockerHub 等);以及
- 在注册中心仓库上提出以
Abuse report:
开头标题的 GitHub 问题
如果我需要报告注册中心本身的安全漏洞怎么办?
技术问题
Registry 支持哪些身份验证方法?
- GitHub OAuth:通过浏览器进行交互式身份验证
- GitHub OIDC:用于 GitHub Actions 工作流的自动化身份验证
- DNS 验证:通过在您的域上设置 TXT 记录
- HTTP 验证:通过在您的域上托管验证文件
如何处理版本冲突?
每个服务器名称的版本必须唯一。如果您尝试发布已存在的版本,发布将失败。使用新版本号或预发布标签。
支持批量操作吗?
目前不支持。每次发布操作都处理单个 server.json
文件。但是,您可以通过脚本化您的发布流程来自动化多个发布。
有速率限制吗?
是的,注册中心实施速率限制以防止滥用。具体限制可能会随时间变化,但设计为允许合理的发布模式。
如何处理大型 server.json 文件?
server.json
文件有大小限制以确保合理的性能。如果您的文件太大,请考虑:
- 删除不必要的元数据
- 使用外部引用而不是内联大型数据
- 分割复杂的服务器为多个较小的服务器