news 2026/9/24 17:01:53

第23篇-将你的Server发布到MCP-Registry

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第23篇-将你的Server发布到MCP-Registry

【MCP 全栈教程】第 23 篇:将你的 Server 发布到 MCP Registry

本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。


本篇你将学到

  • server.json清单文件的完整格式与字段含义
  • namespace 命名规范(reverse DNS 格式)
  • GitHub Actions 自动发布流程
  • 语义化版本管理策略
  • Package Types(npm / PyPI / Docker)配置
  • Registry 审核流程与最佳实践

学完本篇,你将能将自己的 MCP Server 发布到 Registry,让全球开发者搜索、安装和使用。


一、MCP Registry 是什么

MCP Registry 是 MCP Server 的集中式注册中心,类似于 npm registry 或 PyPI。开发者将自己的 Server 发布到 Registry 后,其他用户可以通过统一的命令搜索和安装。

Registry 的价值

角色价值
Server 作者让作品被发现、被使用、建立声誉
Server 用户一键搜索安装,无需手动配置
Host 应用自动发现可用 Server,简化集成
生态标准化分发渠道,促进生态繁荣

Registry 核心功能

功能说明
注册Server 作者提交 Server 元信息
搜索按名称、描述、标签搜索 Server
安装自动安装到 Host 应用的配置中
版本管理追踪版本历史,支持升级回滚
评分反馈用户评价和反馈

二、server.json 格式详解

每个发布的 MCP Server 必须包含一个server.json清单文件,描述 Server 的身份、功能和安装方式。

完整示例

{"$schema":"https://cdn.jsdelivr.net/npm/@modelcontextprotocol/sdk/schema/server.json","id":"io.github.travelassistant/weather-server","name":"weather-server","description":"查询全球城市天气和未来 7 天预报,支持中文城市名。","version":"1.2.0","author":{"name":"TravelAssistant Team","email":"dev@travelassistant.io"},"homepage":"https://weather-server.travelassistant.io","repository":{"type":"git","url":"https://example.com/weather-server"},"license":"MIT","categories":["weather","travel","utilities"],"keywords":["weather","forecast","temperature","天气","天气预报"],"capabilities":{"tools":{"listChanged":true},"resources":{},"prompts":{}},"tools":[{"name":"get_weather","description":"查询指定城市的当前天气"},{"name":"get_forecast","description":"获取未来 7 天天气预报"}],"packages":[{"registryType":"pypi","identifier":"weather-mcp-server","version":"1.2.0"},{"registryType":"npm","identifier":"@travelassistant/weather-mcp-server","version":"1.2.0"},{"registryType":"docker","identifier":"travelassistant/weather-server","version":"1.2.0"}],"runtime":{"command":"weather-server","args":[],"env":{"API_KEY":"${WEATHER_API_KEY}"}},"requirements":{"python":">=3.10","node":">=18"}}

字段详解

字段类型必填说明
idstring唯一标识,reverse DNS 格式
namestringServer 名称(展示用)
descriptionstring简短描述(建议 100 字以内)
versionstring语义化版本号
authorobject作者信息
homepagestring项目主页
repositoryobject代码仓库
licensestring开源许可证
categoriesarray分类标签
keywordsarray搜索关键词
capabilitiesobject能力声明(同 discover 响应)
toolsarray工具列表预览
packagesarray分发包信息
runtimeobject运行时配置
requirementsobject运行环境要求

三、namespace 命名规范

Reverse DNS 格式

Server 的id字段使用 reverse DNS(反向域名)格式,确保全局唯一性:

io.github.{用户名}/{server名}
格式示例说明
GitHub 托管io.github.alice/weather-server最常见
组织域名com.company.team/server-name企业项目
个人域名io.personal/my-tool个人项目

命名规则

规则说明示例
全小写ID 全部小写io.github.alice/weather-server
短横线分词多词用短横线weather-server
唯一用户名使用你的实际用户名不要冒用他人
语义化名称名称反映功能db-query✓,tool1

常见错误

// ❌ 错误:没有 namespace 前缀"id":"weather-server"// ❌ 错误:用驼峰命名"id":"io.github.Alice/WeatherServer"// ❌ 错误:用下划线"id":"io.github.alice/weather_server"// ✅ 正确"id":"io.github.alice/weather-server"

四、Package Types 配置

packages数组定义 Server 的分发方式。一个 Server 可以同时发布到多个包管理器。

支持的 Registry 类型

registryType平台适用语言安装命令
pypiPyPIPythonpip install weather-mcp-server
npmnpmTypeScript/JavaScriptnpm install weather-mcp-server
dockerDocker Hub通用docker pull weather-server

Python(PyPI)包配置

{"registryType":"pypi","identifier":"weather-mcp-server","version":"1.2.0","runtime":{"command":"weather-server","args":[],"env":{"API_KEY":"${WEATHER_API_KEY}"}}}

对应pyproject.toml

[project] name = "weather-mcp-server" version = "1.2.0" description = "查询全球城市天气的 MCP Server" [project.scripts] weather-server = "weather_mcp.server:main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build"

[project.scripts]定义了命令行入口——安装后用户可以直接运行weather-server命令。

TypeScript(npm)包配置

{"registryType":"npm","identifier":"@travelassistant/weather-mcp-server","version":"1.2.0","runtime":{"command":"npx","args":["-y","@travelassistant/weather-mcp-server"],"env":{"API_KEY":"${WEATHER_API_KEY}"}}}

对应package.json

{"name":"@travelassistant/weather-mcp-server","version":"1.2.0","type":"module","bin":{"weather-mcp-server":"dist/index.js"},"files":["dist"],"scripts":{"build":"tsc","prepublishOnly":"npm run build"}}

bin字段定义了可执行命令,files指定发布时包含的文件。

Docker 包配置

{"registryType":"docker","identifier":"travelassistant/weather-server","version":"1.2.0","runtime":{"command":"docker","args":["run","--rm","-i","-e","API_KEY","travelassistant/weather-server:1.2.0"],"env":{"API_KEY":"${WEATHER_API_KEY}"}}}

多包分发对比

维度PyPInpmDocker
目标用户Python 开发者JS/TS 开发者所有用户
安装速度首次较慢
环境隔离依赖虚拟环境依赖 node_modules完全隔离
推荐场景Python 生态项目前端/全栈项目生产部署

建议:至少发布一个包管理器版本(PyPI 或 npm)。如果 Server 依赖复杂(系统库、数据库),额外提供 Docker 版本。


五、版本管理策略

语义化版本(SemVer)

版本号格式:MAJOR.MINOR.PATCH

版本变更触发条件示例
MAJOR (x.0.0)不兼容的 API 变更工具名改变、参数结构变化
MINOR (1.x.0)向后兼容的新功能新增工具、新增可选参数
PATCH (1.0.x)向后兼容的修复Bug 修复、性能优化

版本变更决策

变更类型版本升级理由
新增工具MINOR新功能,不影响现有调用
删除工具MAJOR已有调用会失败
工具改名MAJOR破坏性变更
新增可选参数MINOR兼容,老调用仍有效
新增必填参数MAJOR老调用会缺少参数
修改返回格式MAJORClient 可能依赖返回结构
修复 BugPATCH行为更正确,接口不变
性能优化PATCH无接口变化

预发布版本

格式含义示例
1.0.0-alpha.1早期内测功能不完整
1.0.0-beta.1公测功能完整,可能有 Bug
1.0.0-rc.1发布候选基本确定,最后验证

六、GitHub Actions 自动发布

Python Server 发布流程

在仓库.github/workflows/publish.yml中配置:

name:Publish MCP Serveron:push:tags:-"v*"jobs:publish-pypi:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:Setup Pythonuses:actions/setup-python@v5with:python-version:"3.12"-name:Install uvrun:pip install uv-name:Build packagerun:uv build-name:Publish to PyPIrun:uv publishenv:UV_PUBLISH_TOKEN:${{secrets.PYPI_TOKEN}}publish-registry:needs:publish-pypiruns-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:Publish to MCP Registryuses:modelcontextprotocol/publish-action@v1with:server-json:./server.jsonregistry-token:${{secrets.MCP_REGISTRY_TOKEN}}

TypeScript Server 发布流程

name:Publish MCP Serveron:push:tags:-"v*"jobs:publish-npm:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:Setup Node.jsuses:actions/setup-node@v4with:node-version:"20"registry-url:"https://registry.npmjs.org"-name:Install dependenciesrun:npm ci-name:Buildrun:npm run build-name:Publish to npmrun:npm publish--access publicenv:NODE_AUTH_TOKEN:${{secrets.NPM_TOKEN}}publish-registry:needs:publish-npmruns-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:Publish to MCP Registryuses:modelcontextprotocol/publish-action@v1with:server-json:./server.jsonregistry-token:${{secrets.MCP_REGISTRY_TOKEN}}

Docker 发布流程

publish-docker:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:Setup Docker Buildxuses:docker/setup-buildx-action@v3-name:Login to Docker Hubuses:docker/login-action@v3with:username:${{secrets.DOCKER_USERNAME}}password:${{secrets.DOCKER_TOKEN}}-name:Extract versionid:versionrun:echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT-name:Build and pushuses:docker/build-push-action@v5with:context:.push:truetags:|travelassistant/weather-server:latest travelassistant/weather-server:${{ steps.version.outputs.VERSION }}

发布流程总结

1. 更新代码和 server.json 中的版本号 2. 提交代码 3. 创建 Git 标签:git tag v1.2.0 4. 推送标签:git push origin v1.2.0 5. GitHub Actions 自动触发: a. 构建包 b. 发布到 PyPI / npm / Docker Hub c. 提交 server.json 到 MCP Registry 6. Registry 审核(自动化 + 人工) 7. 审核通过后上线
密钥用途配置位置
PYPI_TOKENPyPI 发布令牌GitHub Secrets
NPM_TOKENnpm 发布令牌GitHub Secrets
DOCKER_TOKENDocker Hub 令牌GitHub Secrets
MCP_REGISTRY_TOKENMCP Registry 发布令牌GitHub Secrets

七、Registry 审核流程

审核阶段

阶段检查内容自动/人工
格式校验server.json 格式正确自动
命名检查namespace 合规、无冲突自动
安全扫描依赖漏洞扫描、代码静态分析自动
包验证发布的包可正常安装和运行自动
内容审核描述准确、无恶意行为人工
重复检查与现有 Server 不高度重复人工

审核结果

结果说明后续操作
通过满足所有要求自动上线
需修改有小问题通知作者修改后重新提交
拒绝严重问题或违规通知原因,修复后重新申请

提升审核通过率的建议

建议说明
描述清晰准确description 真实反映功能
命名规范遵守 reverse DNS 格式
版本合理不跳版本号,遵循 SemVer
测试充分发布前完整测试
文档完善README 包含使用说明
无安全风险通过依赖扫描
不重复发布搜索确认没有同类 Server

八、维护与迭代

发布后的维护清单

维护项频率说明
修复 Bug及时用户反馈的问题
更新依赖定期安全补丁
版本升级按需新功能迭代
回复反馈及时Registry 上的用户评价
监控运行持续错误率、使用统计

废弃处理

如果 Server 不再维护,应正式标记废弃:

{"id":"io.github.alice/old-server","version":"1.5.0","deprecated":true,"deprecationMessage":"此 Server 已停止维护,请使用 io.github.alice/new-server 替代。","successor":"io.github.alice/new-server"}

九、完整发布检查清单

检查项说明
server.json 格式正确通过 schema 校验
id 符合 reverse DNSio.github.{用户名}/{server名}
版本号语义化遵循 MAJOR.MINOR.PATCH
packages 配置完整至少一个包管理器
runtime 配置可运行command + args 正确
capabilities 声明准确与实际实现一致
描述和关键词完善便于搜索发现
已通过本地测试MCP Inspector + 自动化测试
CI/CD 配置就绪GitHub Actions 可自动发布
密钥已配置PyPI/npm/Docker/Registry 令牌
README 完整安装和使用说明

本篇小结

知识点核心内容
MCP RegistryServer 的集中注册中心,类似 npm/PyPI
server.jsonServer 清单文件,描述身份、功能、安装方式
namespaceReverse DNS 格式:io.github.{用户名}/{server名}
Package TypesPyPI(Python)、npm(TS)、Docker(通用)
版本管理SemVer:MAJOR(破坏性)/ MINOR(新功能)/ PATCH(修复)
自动发布Git tag 触发 GitHub Actions,自动构建+发布+注册
审核流程格式校验 → 安全扫描 → 包验证 → 内容审核
维护及时修复、更新依赖、处理废弃

下篇预告

第 24 篇:MCP Client 架构——Host 应用如何管理多个 Server 连接
进入模块四"Client 开发实战"。深入 Host 应用的架构设计——多 Client 管理、连接池、健康检查、工具命名空间隔离。


如果本篇内容对你有帮助,欢迎点赞收藏!有任何疑问,欢迎在评论区交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 16:58:33

多区域部署防雪崩:ribbon4cj区域感知负载均衡器实战解析

多区域部署防雪崩:ribbon4cj区域感知负载均衡器实战解析 【免费下载链接】ribbon4cj 仓颉原生微服务客户端负载均衡器。支持随机/轮询/基于响应时间为权重的轮询算法;支持动态负载均衡列表,支持Apollo/Eureka注册中心;内置区域感知…

作者头像 李华
网站建设 2026/9/24 16:57:35

基于 Java Spring Boot 的中学课外兴趣小组管理系统设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 项目背景与意义 随着素质教育的深入推进,中学课外兴趣小组活动日益丰富,涵盖科技、艺术、体育、文学等多个方向。然而,传统的人工…

作者头像 李华
网站建设 2026/9/24 16:56:33

go-errors/errors:为 Go 错误注入完整调用栈追踪的实战指南

人工智能AI AgentAgent 沙箱云原生容器运行时零信任 【免费下载链接】substrate Agent Substrate: the core system 项目地址: https://gitcode.com/GitHub_Trending/substrate7/substrate 点击查看 免费下载 导读 在 Go 服务中,error 是传递失败信息的…

作者头像 李华
网站建设 2026/9/24 16:56:30

WebBatchRequest 安装、使用教程

小记: ****进行子域名信息收集 发现了1k域名 这么多我可不会一个一个去请求吧 这太浪费时间了 所以就去找了这个工具**** 介绍: WebBatchRequest(Web批量请求器)是一款**轻量级的批量 HTTP 请求工具**,主要用于安全…

作者头像 李华