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-nameio.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.31.x1.*)被拒绝;请发布特定版本。详细指导请参阅 版本控制指南

发布时可以添加自定义元数据吗?

可以,发布到注册中心时,_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 中的讨论)
  • 理想情况下,客户端应该使用具有更高可用性保证的子注册中心,以避免直接的最终用户影响(因为子注册中心可以缓存数据)。

如果我需要举报垃圾邮件或恶意服务器怎么办?

  1. 将其作为滥用报告给底层包注册中心(例如 NPM、PyPI、DockerHub 等);以及
  2. 在注册中心仓库上提出以 Abuse report: 开头标题的 GitHub 问题

如果我需要报告注册中心本身的安全漏洞怎么办?

遵循 MCP 社区 SECURITY.md

技术问题

Registry 支持哪些身份验证方法?

  • GitHub OAuth:通过浏览器进行交互式身份验证
  • GitHub OIDC:用于 GitHub Actions 工作流的自动化身份验证
  • DNS 验证:通过在您的域上设置 TXT 记录
  • HTTP 验证:通过在您的域上托管验证文件

如何处理版本冲突?

每个服务器名称的版本必须唯一。如果您尝试发布已存在的版本,发布将失败。使用新版本号或预发布标签。

支持批量操作吗?

目前不支持。每次发布操作都处理单个 server.json 文件。但是,您可以通过脚本化您的发布流程来自动化多个发布。

有速率限制吗?

是的,注册中心实施速率限制以防止滥用。具体限制可能会随时间变化,但设计为允许合理的发布模式。

如何处理大型 server.json 文件?

server.json 文件有大小限制以确保合理的性能。如果您的文件太大,请考虑:

  • 删除不必要的元数据
  • 使用外部引用而不是内联大型数据
  • 分割复杂的服务器为多个较小的服务器

下一步

了解如何发布您的第一个服务器 查看完整的 API 规范 参与社区讨论 报告问题或请求功能
还有问题? 如果您的问题在这里没有得到解答,请在 GitHub 讨论 中开始新的讨论。