这是一个 Buildkite 插件,它允许使用 ToolHive 在您的持续集成/持续交付(CI/CD)管道中运行模型上下文协议(MCP)服务器。
uvx://、npx://、go://)将插件添加到您的管道步骤中:
步骤:
- 标签: "使用 MCP 服务器运行"
命令: "your-command-here"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "fetch" # 来自 ToolHive 注册表的服务器
步骤:
- 标签: "使用 Fetch MCP 服务器"
命令: "curl http://localhost:8080/some-endpoint"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "fetch"
传输: "stdio"
代理端口: 8080
步骤:
- 标签: "使用自定义 MCP 服务器"
命令: "your-command"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "my-registry/my-mcp-server:latest"
传输: "sse"
卷:
- "/host/path:/container/path:ro"
步骤:
- 标签: "使用 Python MCP 服务器"
命令: "your-command"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "uvx://some-python-mcp-package@1.0.0"
传输: "streamable-http"
参数:
- "--verbose"
- "--config=/path/to/config"
步骤:
- 标签: "使用 GitHub MCP 服务器"
命令: "your-command"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "github"
密钥:
- 名称: "github-token"
目标: "GITHUB_PERSONAL_ACCESS_TOKEN"
- 名称: "api-key"
目标: "API_KEY"
| 选项 | 类型 | 描述 |
|---|---|---|
服务器 | 字符串 | 要运行的 MCP 服务器(注册表名称、Docker 镜像或协议方案) |
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
名称 | 字符串 | 自动生成 | MCP 服务器实例的自定义名称 |
传输 | 字符串 | ""(自动) | 传输方法:stdio、sse 或 streamable-http |
代理端口 | 整数 | 随机 | ToolHive 代理的具体端口 |
密钥 | 数组 | [] | 传递给 MCP 服务器的密钥 |
卷 | 数组 | [] | 卷挂载,格式为 "主机路径:容器路径[:ro]" |
参数 | 数组 | [] | 传递给 MCP 服务器的附加参数 |
权限配置文件 | 字符串 | 默认 | MCP 服务器的权限配置文件 |
toolhive-version | 字符串 | 最新 | 要下载的 ToolHive 的具体版本 |
清理 | 布尔值 | true | 是否在退出时清理 MCP 服务器 |
mcp-config-file | 字符串 | ./mcp_servers.json | 生成 MCP 配置文件的位置 |
mcp-config-cleanup | 布尔值 | true | 是否在退出时删除 MCP 配置文件 |
密钥配置为具有 名称 和 目标 属性的对象数组:
密钥:
- 名称: "toolhive中的密钥名称"
目标: "环境变量名称"
名称 指的是存储在 ToolHive 密钥管理系统中的密钥,而 目标 是将在 MCP 服务器容器中设置的环境变量名称。
请注意,在插件中使用之前必须在 ToolHive 中创建密钥。
卷指定为 Docker 卷格式的字符串:
卷:
- "/host/path:/container/path" # 读写挂载
- "/host/path:/container/path:ro" # 仅读挂载
使用来自 ToolHive 注册表 的服务器:
# 获取 MCP 服务器
服务器: "fetch"
# GitHub MCP 服务器
服务器: "github"
# 文件系统 MCP 服务器
服务器: "filesystem"
使用实现 MCP 协议的任何 Docker 镜像:
# 自定义 Docker 镜像
服务器: "my-registry/my-mcp-server:v1.0.0"
# GitHub 容器注册表镜像
服务器: "ghcr.io/org/mcp-server:latest"
使用包管理器运行 MCP 服务器:
# 通过 uv 运行 Python
服务器: "uvx://python-mcp-package@1.0.0"
# 通过 npm 运行 Node.js
服务器: "npx://node-mcp-package@2.0.0"
# Go 模块
服务器: "go://github.com/org/go-mcp-server"
该插件会自动生成一个 MCP 配置文件,其中包含所有已启动的 MCP 服务器的连接详情。这使得 MCP 客户端可以轻松发现并连接到可用的服务器。
生成的文件遵循标准的 MCP 配置格式:
{
"mcpServers": {
"fetch-server": {
"url": "http://localhost:8080/mcp",
"type": "streamable-http"
},
"github-server": {
"url": "http://localhost:8081/sse#github-server",
"type": "sse"
}
}
}
http://localhost:{端口}/sse#{服务器名称}http://localhost:{端口}/mcp"sse" 或 "streamable-http"插件导出 BUILDKITE_PLUGIN_TOOLHIVE_MCP_CONFIG_FILE 指向生成的配置文件:
echo "MCP 配置文件: $BUILDKITE_PLUGIN_TOOLHIVE_MCP_CONFIG_FILE"
cat $BUILDKITE_PLUGIN_TOOLHIVE_MCP_CONFIG_FILE
步骤:
- 命令: |
# 使用生成的 MCP 配置与您的工具
my-mcp-client --config $BUILDKITE_PLUGIN_TOOLHIVE_MCP_CONFIG_FILE
# 或者编程地读取配置
python -c "
import json
import os
config_file = os.environ['BUILDKITE_PLUGIN_TOOLHIVE_MCP_CONFIG_FILE']
with open(config_file) as f:
config = json.load(f)
print('可用的 MCP 服务器:', list(config['mcpServers'].keys()))
"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "fetch"
mcp-config-file: "./my_mcp_config.json"
插件会自动生成唯一的服务器名称以避免冲突:
名称 选项提供了自定义名称,则使用该名称构建-{构建编号}-步骤-{步骤键}-{服务器名称}如果 ToolHive 安装失败:
如果 MCP 服务器无法启动:
thv 日志 <服务器名称>如果您遇到端口冲突:
代理端口 选项指定不同的端口步骤:
- 标签: "复杂的 MCP 服务器设置"
命令: |
echo "MCP 服务器正在运行"
curl http://localhost:9000/健康
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "my-registry/custom-mcp:v2.0.0"
名称: "my-custom-server"
传输: "sse"
代理端口: 9000
密钥:
- 名称: "api-token"
目标: "API_TOKEN"
- 名称: "db-password"
目标: "DATABASE_PASSWORD"
卷:
- "./config:/app/config:ro"
- "./data:/app/data"
参数:
- "--log-level=debug"
- "--config=/app/config/server.yml"
权限配置文件: "网络"
toolhive-version: "v0.0.33"
清理: true
mcp-config-file: "./custom_mcp_config.json"
mcp-config-cleanup: false
步骤:
- 标签: "步骤 1: 使用 Fetch 服务器"
命令: "测试-fetch-功能"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "fetch"
- 标签: "步骤 2: 使用 GitHub 服务器"
命令: "测试-github-集成"
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "github"
密钥:
- 名称: "github-token"
目标: "GITHUB_PERSONAL_ACCESS_TOKEN"
您可以在单个步骤中运行多个 MCP 服务器,只需多次调用插件即可:
步骤:
- 标签: "使用多个 MCP 服务器"
命令: |
echo "现在两个服务器都在运行"
curl http://localhost:8080/fetch-endpoint
curl http://localhost:8081/github-endpoint
插件:
- StacklokLabs/toolhive#v0.0.2:
服务器: "fetch"
名称: "fetch-server"
代理端口: 8080
- StacklokLabs/toolhive#v0.0.2:
服务器: "github"
名称: "github-server"
代理端口: 8081
密钥:
- 名称: "github-token"
目标: "GITHUB_PERSONAL_ACCESS_TOKEN"
重要提示:对于多个服务器
名称 以避免冲突代理端口,每个服务器应使用不同的端口本项目根据 Apache 许可证 2.0 授权 - 详情见 LICENSE 文件。