布到MCP-Registry)
【MCP 全棧教程】第 23 篇將你的 Server 發(fā)布到 MCP Registry本系列定位從協(xié)議原理到 Server 開發(fā)、Client 開發(fā)、再到各大平臺實戰(zhàn)集成系統(tǒng)化掌握 MCPModel Context Protocol全棧技術(shù)體系。本篇你將學(xué)到server.json清單文件的完整格式與字段含義namespace 命名規(guī)范reverse DNS 格式GitHub Actions 自動發(fā)布流程語義化版本管理策略Package Typesnpm / PyPI / Docker配置Registry 審核流程與最佳實踐學(xué)完本篇你將能將自己的 MCP Server 發(fā)布到 Registry讓全球開發(fā)者搜索、安裝和使用。一、MCP Registry 是什么MCP Registry 是 MCP Server 的集中式注冊中心類似于 npm registry 或 PyPI。開發(fā)者將自己的 Server 發(fā)布到 Registry 后其他用戶可以通過統(tǒng)一的命令搜索和安裝。Registry 的價值角色價值Server 作者讓作品被發(fā)現(xiàn)、被使用、建立聲譽Server 用戶一鍵搜索安裝無需手動配置Host 應(yīng)用自動發(fā)現(xiàn)可用 Server簡化集成生態(tài)標(biāo)準(zhǔn)化分發(fā)渠道促進(jìn)生態(tài)繁榮Registry 核心功能功能說明注冊Server 作者提交 Server 元信息搜索按名稱、描述、標(biāo)簽搜索 Server安裝自動安裝到 Host 應(yīng)用的配置中版本管理追蹤版本歷史支持升級回滾評分反饋用戶評價和反饋二、server.json 格式詳解每個發(fā)布的 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:查詢?nèi)虺鞘刑鞖夂臀磥?7 天預(yù)報支持中文城市名。,version:1.2.0,author:{name:TravelAssistant Team,email:devtravelassistant.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,天氣,天氣預(yù)報],capabilities:{tools:{listChanged:true},resources:{},prompts:{}},tools:[{name:get_weather,description:查詢指定城市的當(dāng)前天氣},{name:get_forecast,description:獲取未來 7 天天氣預(yù)報}],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是唯一標(biāo)識reverse DNS 格式namestring是Server 名稱展示用descriptionstring是簡短描述建議 100 字以內(nèi)versionstring是語義化版本號authorobject否作者信息homepagestring否項目主頁repositoryobject否代碼倉庫licensestring是開源許可證categoriesarray否分類標(biāo)簽keywordsarray否搜索關(guān)鍵詞capabilitiesobject是能力聲明同 discover 響應(yīng)toolsarray否工具列表預(yù)覽packagesarray是分發(fā)包信息runtimeobject是運行時配置requirementsobject否運行環(huán)境要求三、namespace 命名規(guī)范Reverse DNS 格式Server 的id字段使用 reverse DNS反向域名格式確保全局唯一性io.github.{用戶名}/{server名}格式示例說明GitHub 托管io.github.alice/weather-server最常見組織域名com.company.team/server-name企業(yè)項目個人域名io.personal/my-tool個人項目命名規(guī)則規(guī)則說明示例全小寫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數(shù)組定義 Server 的分發(fā)方式。一個 Server 可以同時發(fā)布到多個包管理器。支持的 Registry 類型registryType平臺適用語言安裝命令pypiPyPIPythonpip install weather-mcp-servernpmnpmTypeScript/JavaScriptnpm install weather-mcp-serverdockerDocker Hub通用docker pull weather-serverPythonPyPI包配置{registryType:pypi,identifier:weather-mcp-server,version:1.2.0,runtime:{command:weather-server,args:[],env:{API_KEY:${WEATHER_API_KEY}}}}對應(yīng)pyproject.toml[project] name weather-mcp-server version 1.2.0 description 查詢?nèi)虺鞘刑鞖獾?MCP Server [project.scripts] weather-server weather_mcp.server:main [build-system] requires [hatchling] build-backend hatchling.build[project.scripts]定義了命令行入口——安裝后用戶可以直接運行weather-server命令。TypeScriptnpm包配置{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}}}}對應(yīng)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字段定義了可執(zhí)行命令files指定發(fā)布時包含的文件。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}}}}多包分發(fā)對比維度PyPInpmDocker目標(biāo)用戶Python 開發(fā)者JS/TS 開發(fā)者所有用戶安裝速度快快首次較慢環(huán)境隔離依賴虛擬環(huán)境依賴 node_modules完全隔離推薦場景Python 生態(tài)項目前端/全棧項目生產(chǎn)部署建議至少發(fā)布一個包管理器版本PyPI 或 npm。如果 Server 依賴復(fù)雜系統(tǒng)庫、數(shù)據(jù)庫額外提供 Docker 版本。五、版本管理策略語義化版本SemVer版本號格式MAJOR.MINOR.PATCH版本變更觸發(fā)條件示例MAJOR (x.0.0)不兼容的 API 變更工具名改變、參數(shù)結(jié)構(gòu)變化MINOR (1.x.0)向后兼容的新功能新增工具、新增可選參數(shù)PATCH (1.0.x)向后兼容的修復(fù)Bug 修復(fù)、性能優(yōu)化版本變更決策變更類型版本升級理由新增工具M(jìn)INOR新功能不影響現(xiàn)有調(diào)用刪除工具M(jìn)AJOR已有調(diào)用會失敗工具改名MAJOR破壞性變更新增可選參數(shù)MINOR兼容老調(diào)用仍有效新增必填參數(shù)MAJOR老調(diào)用會缺少參數(shù)修改返回格式MAJORClient 可能依賴返回結(jié)構(gòu)修復(fù) BugPATCH行為更正確接口不變性能優(yōu)化PATCH無接口變化預(yù)發(fā)布版本格式含義示例1.0.0-alpha.1早期內(nèi)測功能不完整1.0.0-beta.1公測功能完整可能有 Bug1.0.0-rc.1發(fā)布候選基本確定最后驗證六、GitHub Actions 自動發(fā)布Python Server 發(fā)布流程在倉庫.github/workflows/publish.yml中配置name:Publish MCP Serveron:push:tags:-v*jobs:publish-pypi:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-name:Setup Pythonuses:actions/setup-pythonv5with: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/checkoutv4-name:Publish to MCP Registryuses:modelcontextprotocol/publish-actionv1with:server-json:./server.jsonregistry-token:${{secrets.MCP_REGISTRY_TOKEN}}TypeScript Server 發(fā)布流程name:Publish MCP Serveron:push:tags:-v*jobs:publish-npm:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-name:Setup Node.jsuses:actions/setup-nodev4with:node-version:20registry-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/checkoutv4-name:Publish to MCP Registryuses:modelcontextprotocol/publish-actionv1with:server-json:./server.jsonregistry-token:${{secrets.MCP_REGISTRY_TOKEN}}Docker 發(fā)布流程publish-docker:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-name:Setup Docker Buildxuses:docker/setup-buildx-actionv3-name:Login to Docker Hubuses:docker/login-actionv3with: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-actionv5with:context:.push:truetags:|travelassistant/weather-server:latest travelassistant/weather-server:${{ steps.version.outputs.VERSION }}發(fā)布流程總結(jié)1. 更新代碼和 server.json 中的版本號 2. 提交代碼 3. 創(chuàng)建 Git 標(biāo)簽git tag v1.2.0 4. 推送標(biāo)簽git push origin v1.2.0 5. GitHub Actions 自動觸發(fā) a. 構(gòu)建包 b. 發(fā)布到 PyPI / npm / Docker Hub c. 提交 server.json 到 MCP Registry 6. Registry 審核自動化 人工 7. 審核通過后上線密鑰用途配置位置PYPI_TOKENPyPI 發(fā)布令牌GitHub SecretsNPM_TOKENnpm 發(fā)布令牌GitHub SecretsDOCKER_TOKENDocker Hub 令牌GitHub SecretsMCP_REGISTRY_TOKENMCP Registry 發(fā)布令牌GitHub Secrets七、Registry 審核流程審核階段階段檢查內(nèi)容自動/人工格式校驗server.json 格式正確自動命名檢查namespace 合規(guī)、無沖突自動安全掃描依賴漏洞掃描、代碼靜態(tài)分析自動包驗證發(fā)布的包可正常安裝和運行自動內(nèi)容審核描述準(zhǔn)確、無惡意行為人工重復(fù)檢查與現(xiàn)有 Server 不高度重復(fù)人工審核結(jié)果結(jié)果說明后續(xù)操作通過滿足所有要求自動上線需修改有小問題通知作者修改后重新提交拒絕嚴(yán)重問題或違規(guī)通知原因修復(fù)后重新申請?zhí)嵘龑徍送ㄟ^率的建議建議說明描述清晰準(zhǔn)確description 真實反映功能命名規(guī)范遵守 reverse DNS 格式版本合理不跳版本號遵循 SemVer測試充分發(fā)布前完整測試文檔完善README 包含使用說明無安全風(fēng)險通過依賴掃描不重復(fù)發(fā)布搜索確認(rèn)沒有同類 Server八、維護(hù)與迭代發(fā)布后的維護(hù)清單維護(hù)項頻率說明修復(fù) Bug及時用戶反饋的問題更新依賴定期安全補丁版本升級按需新功能迭代回復(fù)反饋及時Registry 上的用戶評價監(jiān)控運行持續(xù)錯誤率、使用統(tǒng)計廢棄處理如果 Server 不再維護(hù)應(yīng)正式標(biāo)記廢棄{id:io.github.alice/old-server,version:1.5.0,deprecated:true,deprecationMessage:此 Server 已停止維護(hù)請使用 io.github.alice/new-server 替代。,successor:io.github.alice/new-server}九、完整發(fā)布檢查清單檢查項說明server.json 格式正確通過 schema 校驗id 符合 reverse DNSio.github.{用戶名}/{server名}版本號語義化遵循 MAJOR.MINOR.PATCHpackages 配置完整至少一個包管理器runtime 配置可運行command args 正確capabilities 聲明準(zhǔn)確與實際實現(xiàn)一致描述和關(guān)鍵詞完善便于搜索發(fā)現(xiàn)已通過本地測試MCP Inspector 自動化測試CI/CD 配置就緒GitHub Actions 可自動發(fā)布密鑰已配置PyPI/npm/Docker/Registry 令牌README 完整安裝和使用說明本篇小結(jié)知識點核心內(nèi)容MCP RegistryServer 的集中注冊中心類似 npm/PyPIserver.jsonServer 清單文件描述身份、功能、安裝方式namespaceReverse DNS 格式io.github.{用戶名}/{server名}Package TypesPyPIPython、npmTS、Docker通用版本管理SemVerMAJOR破壞性/ MINOR新功能/ PATCH修復(fù)自動發(fā)布Git tag 觸發(fā) GitHub Actions自動構(gòu)建發(fā)布注冊審核流程格式校驗 → 安全掃描 → 包驗證 → 內(nèi)容審核維護(hù)及時修復(fù)、更新依賴、處理廢棄下篇預(yù)告第 24 篇MCP Client 架構(gòu)——Host 應(yīng)用如何管理多個 Server 連接進(jìn)入模塊四Client 開發(fā)實戰(zhàn)。深入 Host 應(yīng)用的架構(gòu)設(shè)計——多 Client 管理、連接池、健康檢查、工具命名空間隔離。如果本篇內(nèi)容對你有幫助歡迎點贊收藏有任何疑問歡迎在評論區(qū)交流。