Bazel构建协议服务器

一个用于与Bazel构建系统交互的MCP(模型上下文协议)服务器,支持AI助手和其他MCP客户端构建、测试、查询和管理Bazel项目。

  • by lewissetter
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 lewissetter/bazel-mcp-server

使用说明

Bazel MCP服务器

一 MCP(模型上下文协议) 用于与交互的服务器 Bazel 构建系统。该服务器使AI助手和其他MCP客户端能够构建、测试、查询和管理Bazel项目。

特性

服务器提供以下MCP工具:

  • 巴泽尔建筑 -建立一个或多个目标
  • bazel_test -使用筛选和自定义参数运行测试
  • bazel_clean -干净的构建输出(带删除/异步选项)
  • 巴泽尔轮 -构建并运行带有参数的单个目标
  • bazel_query -查询依赖关系图
  • bazel_aquery -查询动作图
  • bazel_info -显示Bazel服务器运行时信息
  • bazel_mod -管理Bazel模块(bzlmod)

安装

来源

go install github.com/lewissetter/bazel-mcp-server/cmd/bazel-mcp-server@latest

从发布

从以下网址下载适用于您平台的二进制文件 发布页面.

用法

使用克劳德桌面

将服务器添加到您的Claude Desktop配置中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%/Claude/claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "bazel": {
      "command": "/path/to/bazel-mcp-server"
    }
  }
}

与其他MCP客户端

服务器使用MCP协议通过stdin/stdout进行通信。直接运行它并将客户端连接到它的stdio流。

bazel-mcp-server

工具参考

巴泽尔建筑

使用Bazel建立一个或多个目标。

论据:

  • targets (必填):要构建的目标列表(例如。, ["//pkg:target"] 或 ["//..."])
  • options (可选):其他构建选项(例如。, ["--config=opt", "--compilation_mode=dbg"])

例子:

{
  "name": "bazel_build",
  "arguments": {
    "targets": ["//cmd/app:main", "//pkg/lib:library"],
    "options": ["--config=release"]
  }
}

bazel_test

使用Bazel对一个或多个目标运行测试。

论据:

  • targets (必填):要运行的测试目标列表(例如。, ["//pkg:test"] 或 ["//..."])
  • options (可选):其他测试选项(例如。, ["--test_output=all"])
  • test_args (可选):传递给测试二进制文件的参数
  • test_filter (可选):筛选以选择要运行的特定测试

例子:

{
  "name": "bazel_test",
  "arguments": {
    "targets": ["//pkg:test"],
    "options": ["--test_output=all"],
    "test_filter": "TestMyFunction"
  }
}

bazel_clean

清洁Bazel构建输出。

论据:

  • expunge (可选):删除此Bazel实例的整个工作树
  • async (可选):异步清理
  • options (可选):其他清洁选项

例子:

{
  "name": "bazel_clean",
  "arguments": {
    "expunge": true
  }
}

巴泽尔轮

使用Bazel构建和运行单个目标。

论据:

  • target (必填):构建和运行单个目标(例如。, "//cmd/app:main")
  • options (可选):其他构建/运行选项
  • args (可选):传递给目标二进制文件的参数

例子:

{
  "name": "bazel_run",
  "arguments": {
    "target": "//cmd/server:server",
    "args": ["--port=8080", "--verbose"]
  }
}

bazel_query

查询Bazel依赖关系图。

论据:

  • expression (必填):查询表达式(例如。, "deps(//pkg:target)" 或 "kind(go_library, //...)")
  • options (可选):附加查询选项(例如。, ["--output=label"])

例子:

{
  "name": "bazel_query",
  "arguments": {
    "expression": "deps(//cmd/app:main)",
    "options": ["--output=label"]
  }
}

bazel_aquery

查询有关构建图中操作的信息(操作图查询)。

论据:

  • expression (必填):动作查询表达式(例如。, "mnemonic('GoCompile', deps(//...))")
  • options (可选):其他aquery选项(例如。, ["--output=jsonproto"])

例子:

{
  "name": "bazel_aquery",
  "arguments": {
    "expression": "mnemonic('GoCompile', deps(//...))",
    "options": ["--output=jsonproto"]
  }
}

bazel_info

显示有关Bazel服务器的运行时信息。

论据:

  • keys (可选):要检索的特定信息密钥(例如。, ["bazel-bin", "execution_root"])
  • options (可选):附加信息选项

例子:

{
  "name": "bazel_info",
  "arguments": {
    "keys": ["bazel-bin", "bazel-genfiles"]
  }
}

bazel_mod

管理Bazel模块(bzlmod)-查询模块图、显示存储库和检查扩展。

论据:

  • subcommand (必需):修改要运行的子命令(graph, show_repo, show_extension, dump_repo_mapping)
  • args (可选):子命令的参数(例如,存储库名称 show_repo)
  • options (可选):其他mod选项(例如。, ["--base_module"] 为了 graph, ["--extension_filter"] 为了 show_extension)

示例-显示模块依赖关系图:

{
  "name": "bazel_mod",
  "arguments": {
    "subcommand": "graph"
  }
}

示例-显示特定存储库:

{
  "name": "bazel_mod",
  "arguments": {
    "subcommand": "show_repo",
    "args": ["rules_go"]
  }
}

示例-显示扩展使用情况:

{
  "name": "bazel_mod",
  "arguments": {
    "subcommand": "show_extension",
    "args": ["@rules_go//go:extensions.bzl%go_sdk"]
  }
}

需求

  • 转到1.21或更高版本(用于从源代码构建)
  • Bazel必须在您的PATH中安装并可用
  • 服务器执行当前工作目录中的Bazel命令

发展

建筑

go build -o bazel-mcp-server ./cmd/bazel-mcp-server

测试

go test ./...

本地运行

go run ./cmd/bazel-mcp-server

运作原理

服务器:

  1. 通过stdin/stdout启动并监听MCP请求
  2. 验证传入的工具调用参数
  3. 执行当前工作目录中的相应Bazel命令
  4. 将命令输出(stdout和stderr)返回给客户端
  5. 将错误报告为工具错误(而非协议错误),以获得更好的用户体验

所有命令都使用 context.Context 以获得适当的取消支持。

交互示例

建立目标:

Tool: bazel_build
Arguments: {"targets": ["//cmd/app:main"]}
Result: "Build successful!\n\nINFO: Build completed successfully"

运行测试:

Tool: bazel_test
Arguments: {"targets": ["//..."], "options": ["--test_output=errors"]}
Result: "Tests passed!\n\n//pkg:test PASSED"

查询依赖关系:

Tool: bazel_query
Arguments: {"expression": "deps(//cmd/app:main)", "options": ["--output=label"]}
Result: "//cmd/app:main\n//pkg/lib:library\n//external:go_sdk"

查看模块图:

Tool: bazel_mod
Arguments: {"subcommand": "graph"}
Result: "<root> (my_project@1.0.0)\n  ├─ rules_go@0.50.0\n  └─ gazelle@0.40.0"

贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

致谢

支持