MCPB包
  ](https://github.com/NimbleBrainInc/mcpb-pack/releases)
GitHub Action将MCP服务器打包成可分发的捆绑包并发布到 mpak注册表.
这是什么?
主控程序 (模型上下文协议)是人工智能助手与外部工具和服务交互的标准。MCP服务器公开了AI助手可以调用的工具(如“搜索文件”或“查询数据库”)。
2甲4氯丁酸 是捆绑格式(.mcpb 文件),将MCP服务器及其所有依赖项打包到单个可移植文件中。这使得MCP服务器易于分发和安装。
篮子 是一个公共注册表,您可以在其中发布和发现MCP捆绑包。把它想象成npm,但适用于MCP服务器。
此操作 自动化整个工作流程:将MCP服务器构建成一个捆绑包,将其附加到GitHub版本中,并在mpak中注册,以便其他人可以找到并安装它。
快速开始
先决条件
您的存储库需要:
- A.
manifest.json描述您的MCP服务器:
{
"manifest_version": "0.4",
"name": "@your-github-org/your-server",
"version": "1.0.0",
"description": "What your server does",
"server": {
"type": "python",
"entry_point": "your_package.server",
"mcp_config": {
"command": "python",
"args": ["-m", "your_package.server"]
}
}
}注: 这 @scope 必须与您的GitHub组织或用户名匹配。注册表通过OIDC进行验证。- 您的MCP服务器代码 使用stdio入口点:
# At end of server.py
if __name__ == "__main__":
mcp.run() # Required for mpak run / Claude Desktop最小工作流程
将此添加到 .github/workflows/release.yml:
name: Release
on:
release:
types: [published]
permissions:
contents: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: NimbleBrainInc/mcpb-pack@v3当你发布GitHub版本时,这将:
- 将所有依赖项提供到捆绑包中
- 建立一个
.mcpb文件 - 将其上传到您的发布中
- 在mpak.dev上注册
您的服务器现在可以通过以下方式被发现 mpak search 可通过以下方式安装 mpak bundle pull.
用法
单一平台
对于没有本机依赖关系的纯Python/Node服务器:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: NimbleBrainInc/mcpb-pack@v3多平台
对于具有本机依赖关系(C扩展、Rust绑定等)的服务器,您需要在每个目标平台上构建:
jobs:
build:
strategy:
matrix:
include:
- os: linux
arch: x64
runner: ubuntu-latest
- os: linux
arch: arm64
runner: ubuntu-24.04-arm
- os: darwin
arch: arm64
runner: macos-latest
- os: darwin
arch: x64
runner: macos-15-intel
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- uses: NimbleBrainInc/mcpb-pack@v3
with:
output: "{name}-{version}-${{ matrix.os }}-${{ matrix.arch }}.mcpb"每个作业都构建并注册自己的特定于平台的捆绑包。注册表会自动合并它们。
跑步者参考
| 平台 | 运行器标签 | 架构 | 注释 |
|---|---|---|---|
| Linux x64 | ubuntu-latest | x64 | 免费 |
| Linux ARM | ubuntu-24.04-arm | arm64 | 免费 |
| macOS ARM | macos-latest / macos-15 | arm64(M1) | 免费,3 vCPU,7 GB |
| macOS英特尔 | macos-15-intel | x64 | 免费,4 vCPU,14 GB |
付费大型跑步者 (团队/企业计划):
| 平台 | 运行器标签 | 架构 | 注释 |
|---|---|---|---|
| macOS英特尔 | macos-15-large | x64 | 12 vCPU,30 GB |
| macOS ARM | macos-15-xlarge | arm64(M2) | 5个vCPU+8个GPU,14 GB |
注:macos-13是 2025年12月退休.使用macos-15-intel适用于英特尔macOS版本。
仅构建(不发布)
对于CI验证或专用服务器:
- uses: NimbleBrainInc/mcpb-pack@v3
with:
upload: false
announce: false使用现有捆绑包
如果你已经建立了你的 .mcpb 单独捆绑(例如,提交到仓库或在前面的步骤中构建),您可以跳过构建,只需上传/宣布:
- uses: NimbleBrainInc/mcpb-pack@v3
with:
directory: packages/mcp/mcpb
bundle-path: context7.mcpb
build: false这在以下情况下很有用:
- 您的捆绑包已预先构建并提交到存储库
- 您有一个自定义构建过程
- 您想向mpak.dev宣布一个现有的捆绑包
该操作将从提供的包中计算SHA256哈希值和大小,将其上传到发布版本,并将其通知给注册表。
跨平台捆绑
对于没有本机依赖关系的纯Node.js或Python服务器,您可以使用以下命令将单个捆绑包声明为跨平台 any:
- uses: NimbleBrainInc/mcpb-pack@v3
with:
platform-os: any
platform-arch: any这将该捆绑包注册为通用,因此任何平台上的用户都可以安装它。当没有特定于平台的构建可用时,注册表将为该捆绑包提供服务。
手动重新公告
要重新宣布现有版本(例如,如果注册表已关闭或您要向其他注册表宣布),请添加 workflow_dispatch 到您的工作流程:
on:
release:
types: [published]
workflow_dispatch:
inputs:
build:
description: 'Build bundle'
type: boolean
default: true
announce:
description: 'Announce to registry'
type: boolean
default: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: NimbleBrainInc/mcpb-pack@v3
with:
build: ${{ inputs.build }}
announce: ${{ inputs.announce }}然后从Actions选项卡手动触发,检查发布标签。该行动使用 github.ref_name 当未被释放事件触发时,作为释放标签。
注: 这upload输入仅适用于发布事件。对于手动触发器,请手动将捆绑包上传到版本或使用gh release upload.
输入
| 输入 | 默认值 | 描述 |
|---|---|---|
directory | . | 包含manifest.json和服务器代码的目录 |
bundle-path | 现有.mcpb捆绑包的路径(与一起使用 build: false) | |
output | {name}-{version}.mcpb | 输出文件名({name} 和 {version} 被替换) |
python-version | 3.13 | 用于销售的Python版本(如果是Python服务器) |
build | true | 是否构建捆绑包 |
upload | true | 是否上传到GitHub发布 |
announce | true | 是否向mpak.dev注册 |
announce-required | false | 宣布失败是否应使工作流失败 |
announce-url | https://registry.mpak.dev/v1/bundles/announce | 注册表端点(更改自托管注册表) |
platform-os | 覆盖检测到的操作系统(达尔文、linux、win32、任何) | |
platform-arch | 覆盖检测到的拱形结构(x64、arm64、任意) |
输出
| 输出 | 描述 |
|---|---|
bundle-path | 生成的.mcpb文件的路径 |
bundle-size | 捆绑包的大小(字节) |
bundle-sha256 | SHA256哈希用于完整性检查 |
announced | 注册是否成功 |
权限
permissions:
contents: write # Required to upload to releases
id-token: write # Required for OIDC authentication with registry运作原理
建筑
行动:
- 确认
manifest.json(mcpb v0.4必填字段,可选反向DNS名称覆盖) - 从以下位置检测您的服务器类型
manifest.json(Python或Node.js) - 将所有依赖项提供给bundle(Python:
deps/,节点:node_modules/) - 将所有内容打包成
.mcpb文件使用 mcpb命令行界面
宣布
当你向mpak.dev宣布:
- 该操作上传
.mcpb捆绑到GitHub版本 - 该行动要求 OIDC代币 来自GitHub
- 此令牌以加密方式证明该捆绑包来自您的存储库
- 注册表验证令牌并注册您的捆绑包;注册表组成MCP
ServerDetail从你的发现形状manifest.json - 不需要API密钥或机密
每个平台构建都会宣布自己的工件。注册表跟踪一个版本的所有工件,因此用户可以为他们的系统安装正确的捆绑包。
选择退出公告
要构建而不发布到公共注册表,请执行以下操作:
- uses: NimbleBrainInc/mcpb-pack@v3
with:
announce: false如果发生以下情况,您可能会想要这个:
- 您的服务器是私有的或内部的
- 您正在使用自托管注册表
- 您想在发布之前进行测试
- 您通过其他渠道分销
MCP注册表发现
mpak自动组成MCP注册表 ServerDetail 从您的包中发现形状 manifest.json --没有单独的 server.json 要维护的文件。每个已公布的捆绑包都可以通过以下方式访问:
GET /v1/servers/--最新ServerDetailGET /v1/servers//versions/--版本特定GET /v1/servers/search?q=...--分页搜索
命名
默认情况下,注册表会从npm风格的包名中机械地分配一个反向DNS名称:
@your-org/your-server→dev.mpak.your-org/your-server
如果你想要一个品牌反向DNS名称(例如。 com.example/your-server),将其设置在您的清单中 _meta:
{
"manifest_version": "0.4",
"name": "@your-org/your-server",
"version": "1.0.0",
"description": "What your server does",
"_meta": {
"dev.mpak/registry": {
"name": "com.example/your-server"
}
}
}超控必须与上游模式相匹配 ^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$ (一个斜线将反向DNS命名空间与服务器名称分隔开)。
迁移自 server.json (v2 → v3)
如果您之前已发货 server.json 将文件放在捆绑包旁边,您可以将其删除。此操作之前的版本 v3 已验证并上传 server.json GitHub发布; v3 不再读取或上传它。注册表组成 ServerDetail 发现形状从 manifest.json 相反。
git rm server.json
# Optional: add a reverse-DNS name override to manifest.json (see "Naming" above).
git add manifest.json
git commit -m "drop server.json (mcpb-pack@v3 composes registry metadata from manifest)"支持的运行库
| 运行时 | 通过 | 依赖关系检测 |
|---|---|---|
python server.type: "python" | uv pip install --target | |
| Node.js | server.type: "node" | npm install --omit=dev |
| 二进制 | server.type: "binary" | 无(您构建二进制文件) |
二进制服务器(Go、Rust等)
对于编译语言,在运行mcpb包之前构建二进制文件:
jobs:
build:
strategy:
matrix:
include:
- os: linux
arch: x64
runner: ubuntu-latest
- os: linux
arch: arm64
runner: ubuntu-24.04-arm
- os: darwin
arch: arm64
runner: macos-latest
- os: darwin
arch: x64
runner: macos-15-intel
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.22"
- name: Build binary
run: |
mkdir -p bin
go build -o bin/server ./cmd/server
- uses: NimbleBrainInc/mcpb-pack@v3
with:
output: "{name}-{version}-${{ matrix.os }}-${{ matrix.arch }}.mcpb"二进制服务器的manifest.json:
{
"name": "@your-org/your-server",
"version": "1.0.0",
"server": {
"type": "binary",
"entry_point": "bin/server",
"mcp_config": {
"command": "${__dirname}/bin/server",
"args": []
}
}
}Node.js服务器
{
"name": "@your-org/your-server",
"version": "1.0.0",
"server": {
"type": "node",
"entry_point": "dist/index.js",
"mcp_config": {
"command": "node",
"args": ["${__dirname}/dist/index.js"]
}
}
}示例存储库
- mcp回声 -具有多平台构建的简单Python MCP服务器
了解更多
许可证
麻省理工学院
