这是一个 MCP(模型上下文协议)服务器,提供了与 Bitbucket API 交互的工具,支持 Bitbucket Cloud 和 Bitbucket Server。
get_pull_request - 获取拉取请求的详细信息list_pull_requests - 列出拉取请求(带过滤器:状态、作者、分页)create_pull_request - 创建新的拉取请求update_pull_request - 更新 PR 细节(标题、描述、审阅者、目标分支)add_comment - 在拉取请求中添加评论(支持回复)merge_pull_request - 使用各种策略合并拉取请求list_pr_commits - 列出属于某个拉取请求的所有提交delete_branch - 合并后删除分支list_branches - 列出分支(带过滤和分页)delete_branch - 删除分支(带保护检查)get_branch - 获取详细的分支信息(包括关联的 PR)list_branch_commits - 列出分支中的提交(高级过滤)list_directory_content - 列出仓库路径中的文件和目录get_file_content - 获取文件内容(大文件智能截断)get_pull_request_diff - 获取拉取请求的差异/更改approve_pull_request - 批准拉取请求unapprove_pull_request - 取消批准拉取请求request_changes - 要求对拉取请求进行更改remove_requested_changes - 移除拉取请求中的更改要求search_code - 在仓库中搜索代码(目前仅支持 Bitbucket Server)list_projects - 列出所有可访问的 Bitbucket 项目/工作区(带过滤)list_repositories - 列出项目中的仓库或所有可访问项目的仓库使用此 MCP 服务器最简单的方法是直接通过 npx:
{
"mcpServers": {
"bitbucket": {
"command": "npx",
"args": [
"-y",
"@nexus2520/bitbucket-mcp-server"
],
"env": {
"BITBUCKET_USERNAME": "your-username",
"BITBUCKET_APP_PASSWORD": "your-app-password"
}
}
}
}
对于 Bitbucket Server:
{
"mcpServers": {
"bitbucket": {
"command": "npx",
"args": [
"-y",
"@nexus2520/bitbucket-mcp-server"
],
"env": {
"BITBUCKET_USERNAME": "your.email@company.com",
"BITBUCKET_TOKEN": "your-http-access-token",
"BITBUCKET_BASE_URL": "https://bitbucket.yourcompany.com"
}
}
}
}
npm install
npm run build
此服务器使用 Bitbucket 应用密码进行认证。
node scripts/setup-auth.js
这将引导您完成认证设置过程。
将服务器添加到您的 MCP 设置文件中(通常位于 ~/.vscode-server/data/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json):
{
"mcpServers": {
"bitbucket": {
"command": "node",
"args": ["/absolute/path/to/bitbucket-mcp-server/build/index.js"],
"env": {
"BITBUCKET_USERNAME": "your-username",
"BITBUCKET_APP_PASSWORD": "your-app-password"
}
}
}
}
替换:
/absolute/path/to/bitbucket-mcp-server 为该目录的实际路径your-username 为您在 Bitbucket 中的用户名(非电子邮件)your-app-password 为您创建的应用密码对于 Bitbucket Server,请使用:
{
"mcpServers": {
"bitbucket": {
"command": "node",
"args": ["/absolute/path/to/bitbucket-mcp-server/build/index.js"],
"env": {
"BITBUCKET_USERNAME": "your.email@company.com",
"BITBUCKET_TOKEN": "your-http-access-token",
"BITBUCKET_BASE_URL": "https://bitbucket.yourcompany.com"
}
}
}
}
重要提示:Bitbucket Server 用户
配置完成后,您可以使用可用的工具:
{
"tool": "get_pull_request",
"arguments": {
"workspace": "PROJ", // 必需 - 您的项目键
"repository": "my-repo",
"pull_request_id": 123
}
}
返回关于拉取请求的详细信息,包括:
merge_commit_hash:合并提交的哈希值merged_by:执行合并的人merged_at:合并发生的时间merge_commit_message:合并提交的消息active_comments:最近的 20 条顶级评论数组
replies:具有相同结构的回复评论数组parent_id:回复评论的父级评论 IDactive_comment_count:未解决评论总数(包括嵌套回复)total_comment_count:所有评论总数(包括已解决和回复)file_changes:PR 中修改的所有文件数组
file_changes_summary:汇总统计
在 Bitbucket 仓库中搜索代码(目前仅支持 Bitbucket Server):
// 在特定仓库中搜索
{
"tool": "search_code",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"search_query": "TODO",
"limit": 50
}
}
// 在工作区中的所有仓库中搜索
{
"tool": "search_code",
"arguments": {
"workspace": "PROJ",
"search_query": "deprecated",
"file_pattern": "*.java", // 可选:按文件模式过滤
"limit": 100
}
}
// 使用文件模式过滤搜索
{
"tool": "search_code",
"arguments": {
"workspace": "PROJ",
"repository": "frontend-app",
"search_query": "useState",
"file_pattern": "*.tsx", // 仅在 .tsx 文件中搜索
"start": 0,
"limit": 25
}
}
返回搜索结果,包括:
示例响应:
{
"message": "代码搜索成功完成",
"workspace": "PROJ",
"repository": "my-repo",
"search_query": "TODO",
"results": [
{
"file_path": "src/utils/helper.js",
"file_name": "helper.js",
"repository": "my-repo",
"project": "PROJ",
"matches": [
{
"line_number": 42,
"line_content": " // TODO: 实现错误处理",
"highlighted_segments": [
{ "text": " // ", "is_match": false },
{ "text": "TODO", "is_match": true },
{ "text": ": 实现错误处理", "is_match": false }
]
}
]
}
],
"total_count": 15,
"start": 0,
"limit": 50,
"has_more": false
}
注意:此工具目前仅适用于 Bitbucket Server。Bitbucket Cloud 支持计划在未来版本中提供。
{
"tool": "list_pull_requests",
"arguments": {
"workspace": "PROJ", // 必需 - 您的项目键
"repository": "my-repo",
"state": "OPEN", // 可选:OPEN, MERGED, DECLINED, ALL(默认:OPEN)
"author": "username", // 可选:按作者过滤(见下方注释)
"limit": 25, // 可选:每页最大结果数(默认:25)
"start": 0 // 可选:分页起始索引(默认:0)
}
}
返回分页的拉取请求列表,包括:
关于作者过滤的注意事项:
{
"tool": "create_pull_request",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"title": "添加新功能",
"source_branch": "feature/new-feature",
"destination_branch": "main",
"description": "此 PR 添加了一个新功能...", // 可选
"reviewers": ["john.doe", "jane.smith"], // 可选
"close_source_branch": true // 可选(默认:false)
}
}
{
"tool": "update_pull_request",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"title": "更新标题", // 可选
"description": "更新描述", // 可选
"destination_branch": "develop", // 可选
"reviewers": ["new.reviewer"] // 可选 - 见下方注释
}
}
关于审阅者的注意事项:
reviewers 参数时,现有的审阅者及其审批状态会被保留reviewers 参数时:
向拉取请求添加评论,既可以作为一般评论,也可以针对特定代码行进行内联评论:
// 一般评论
{
"tool": "add_comment",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"comment_text": "这个 PR 很棒!"
}
}
// 针对特定行的内联评论
{
"tool": "add_comment",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"comment_text": "考虑将这部分提取为一个单独的函数",
"file_path": "src/utils/helpers.js",
"line_number": 42,
"line_type": "CONTEXT" // ADDED, REMOVED 或 CONTEXT
}
}
// 回复现有评论
{
"tool": "add_comment",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"comment_text": "我同意这个建议",
"parent_comment_id": 456
}
}
// 添加带有代码建议的评论(单行)
{
"tool": "add_comment",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"comment_text": "这个变量名可以更具描述性。",
"file_path": "src/utils/helpers.js",
"line_number": 42,
"line_type": "CONTEXT",
"suggestion": "const userAuthenticationToken = token;"
}
}
// 添加带有多行代码建议的评论
{
"tool": "add_comment",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"comment_text": "这个函数可以通过数组方法简化。",
"file_path": "src/utils/calculations.js",
"line_number": 50,
"suggestion_end_line": 55,
"line_type": "CONTEXT",
"suggestion": "function calculateTotal(items) {\n return items.reduce((sum, item) => sum + item.price, 0);\n}"
}
}
建议功能使用 GitHub 样式的 Markdown 建议块来格式化评论,Bitbucket 可以渲染这些块。添加建议时:
suggestion 是必需的,并包含替换代码file_path 和 line_number 在使用建议时是必需的suggestion_end_line 是可选的,用于多行建议(默认为 line_number)add_comment 工具现在支持自动查找行号,使用代码片段。这对于 AI 工具分析差异时特别有用,可能会难以确定确切的行号:
// 使用代码片段添加评论
{
"tool": "add_comment",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"comment_text": "这个变量名可以更具描述性",
"file_path": "src/components/Button.res",
"code_snippet": "let isDisabled = false",
"search_context": {
"before": ["let onClick = () => {"],
"after": ["setLoading(true)"]
}
}
}
// 多个匹配时使用策略
{
"tool": "add_comment",
"arguments": {
"workspace": "PROJ",
"repository": "my-repo",
"pull_request_id": 123,
"comment_text": "考虑将这部分提取出来",
"file_path": "src/utils/helpers.js",
"code_snippet": "return result;",
"search_context": {
"before": ["const result = calculate();"],
"after": ["}"]
},
"match_strategy": "best" // 自动选择最高置信度匹配
}
}
代码片段参数:
code_snippet:要查找的确切代码行(替代 line_number)search_context:可选上下文,用于消除多个匹配
before:目标之前应该出现的行数组after:目标之后应该出现的行数组match_strategy:如何处理多个匹配
"strict"(默认):显示所有匹配的错误"best":自动选择最高置信度匹配严格模式下多个匹配的错误响应:
{
"error": {
"code": "MULTIPLE_MATCHES_FOUND",
"message": "代码片段 'return result;' 在 3 个位置找到",
"occurrences": [
{
"line_number": 42,
"file_path": "src/utils/helpers.js",
"preview": " const result = calculate();\n> return result;\n}",
"confidence": 0.9,
"line