返回 MCP 目录
public公开dns本地运行

bitbucket-mcp-server

Bitbucket MCP服务器是一个提供与Bitbucket API交互工具的服务,支持Bitbucket Cloud和Server,包含PR生命周期管理、分支管理、文件操作和代码评审等功能。

article

README

🚀 Bitbucket MCP Server

Bitbucket MCP Server 是一个基于模型上下文协议(MCP)的服务器,它提供了与 Bitbucket API 交互的工具,同时支持 Bitbucket Cloud 和 Bitbucket Server。

🚀 快速开始

本 MCP 服务器提供了丰富的工具,用于与 Bitbucket API 进行交互。你可以按照以下步骤进行安装和配置,从而使用这些工具。

✨ 主要特性

当前已实现的工具

核心 PR 生命周期工具

  • get_pull_request - 获取拉取请求的详细信息
  • list_pull_requests - 按筛选条件(状态、作者、分页)列出拉取请求
  • create_pull_request - 创建新的拉取请求
  • update_pull_request - 更新拉取请求的详细信息(标题、描述、审核人、目标分支)
  • 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 - 撤销对拉取请求的更改请求

📦 安装指南

使用 npx(推荐)

使用 npx 直接使用此 MCP 服务器是最简单的方法:

{
  "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"
      }
    }
  }
}

从源代码安装

  1. 克隆或下载此存储库
  2. 安装依赖项:
    npm install
    
  3. 构建 TypeScript 代码:
    npm run build
    

📚 详细文档

身份验证设置

此服务器使用 Bitbucket 应用密码进行身份验证。

创建应用密码

  1. 登录到你的 Bitbucket 账户
  2. 导航到:https://bitbucket.org/account/settings/app-passwords/
  3. 点击“创建应用密码”
  4. 给它一个描述性标签(例如,“MCP Server”)
  5. 选择以下权限:
    • 账户:读取
    • 存储库:读取、写入
    • 拉取请求:读取、写入
  6. 点击“创建”
  7. 重要提示:立即复制生成的密码(你将无法再次看到它!)

运行设置脚本

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 用户注意事项

  • 使用你的完整电子邮件地址作为用户名(例如,“john.doe@company.com”)
  • 这是确保批准/审核操作正确工作所必需的

💻 使用示例

基础用法

获取拉取请求

{
  "tool": "get_pull_request",
  "arguments": {
    "workspace": "PROJ",  // 必需 - 你的项目密钥
    "repository": "my-repo",
    "pull_request_id": 123
  }
}

返回拉取请求的详细信息,包括:

  • 标题和描述
  • 作者和审核人
  • 源分支和目标分支
  • 批准状态
  • 指向 Web UI 和差异的链接
  • 合并提交详情(当 PR 合并时):
    • merge_commit_hash:合并提交的哈希值
    • merged_by:执行合并的人
    • merged_at:合并发生的时间
    • merge_commit_message:合并提交消息
  • 带有嵌套回复的活动评论(需要关注的未解决评论):
    • active_comments:活动评论数组(最多 20 条最近的顶级评论)
      • 评论文本和作者
      • 创建日期
      • 是否为内联评论(带有文件路径和行号)
      • 嵌套回复(适用于 Bitbucket Server):
        • replies:具有相同结构的回复评论数组
        • 回复可以嵌套多层
      • 父引用(适用于 Bitbucket Cloud):
        • parent_id:回复评论的父评论 ID
    • active_comment_count:未解决评论的总数(包括嵌套回复)
    • total_comment_count:所有评论的总数(包括已解决和回复)
  • 文件更改
    • file_changes:PR 中修改的所有文件的数组
      • 文件路径
      • 状态(添加、修改、删除或重命名)
      • 旧路径(对于重命名的文件)
    • file_changes_summary:摘要统计信息
      • 更改的文件总数
  • 以及更多...

列出拉取请求

{
  "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)
  }
}

返回分页的拉取请求列表,包含:

  • get_pull_request 相同详细信息的拉取请求数组
  • 匹配的 PR 总数
  • 分页信息(has_more, next_start)

作者筛选注意事项

  • 对于 Bitbucket Cloud:使用用户名(例如,“johndoe”)
  • 对于 Bitbucket Server:使用完整的电子邮件地址(例如,“john.doe@company.com”)

创建拉取请求

{
  "tool": "create_pull_request",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "title": "Add new feature",
    "source_branch": "feature/new-feature",
    "destination_branch": "main",
    "description": "This PR adds a new feature...",  // 可选
    "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": "Updated title",  // 可选
    "description": "Updated description",  // 可选
    "destination_branch": "develop",  // 可选
    "reviewers": ["new.reviewer"]  // 可选 - 见下面的注释
  }
}

审核人重要说明

  • 当更新 PR 时未指定 reviewers 参数,现有审核人和他们的批准状态将被保留
  • 当提供 reviewers 参数时:
    • 审核人列表将被新列表替换
    • 对于已经在 PR 上的审核人,他们的批准状态将被保留
    • 新审核人将以未批准状态添加
  • 这可以防止在仅想更新 PR 描述或标题时意外删除审核人

添加评论

为拉取请求添加评论,可以是一般评论或特定代码行的内联评论:

// 一般评论
{
  "tool": "add_comment",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "comment_text": "Great work on this PR!"
  }
}

// 特定行的内联评论
{
  "tool": "add_comment",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "comment_text": "Consider extracting this into a separate function",
    "file_path": "src/utils/helpers.js",
    "line_number": 42,
    "line_type": "CONTEXT"  // ADDED, REMOVED, or CONTEXT
  }
}

// 回复现有评论
{
  "tool": "add_comment",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "comment_text": "I agree with this suggestion",
    "parent_comment_id": 456
  }
}

// 添加带有代码建议的评论(单行)
{
  "tool": "add_comment",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "comment_text": "This variable name could be more descriptive.",
    "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": "This function could be simplified using array methods.",
    "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_pathline_number 是必需的
  • suggestion_end_line 是可选的,用于多行建议(默认为 line_number
  • 评论将使用 ````suggestion` markdown 块格式化,可能适用于 Bitbucket UI

使用代码片段代替行号

add_comment 工具现在支持使用代码片段自动查找行号。这在 AI 工具分析差异时特别有用,因为它们可能难以确定确切的行号:

// 使用代码片段添加评论
{
  "tool": "add_comment",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "comment_text": "This variable name could be more descriptive",
    "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": "Consider extracting this",
    "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": "Code snippet 'return result;' found in 3 locations",
    "occurrences": [
      {
        "line_number": 42,
        "file_path": "src/utils/helpers.js",
        "preview": "  const result = calculate();\n> return result;\n}",
        "confidence": 0.9,
        "line_type": "ADDED"
      },
      // ... 更多匹配项
    ],
    "suggestion": "To resolve, either:\n1. Add more context...\n2. Use match_strategy: 'best'...\n3. Use line_number directly"
  }
}

此功能对于以下情况特别有用:

  • 分析差异的 AI 驱动的代码审查工具
  • 根据代码模式自动添加评论的脚本
  • 避免大差异中的行号混淆

评论回复注意事项

  • 使用 parent_comment_id 回复任何评论(一般或内联)
  • get_pull_request 响应中:
    • Bitbucket Server 在 replies 数组中显示嵌套回复
    • Bitbucket Cloud 为回复评论显示 parent_id 字段
  • 你可以回复回复,创建嵌套对话

内联评论注意事项

  • file_path:差异中显示的文件路径
  • line_number:差异中显示的行号
  • line_type
    • ADDED - 对于新添加的行(差异中为绿色)
    • REMOVED - 对于删除的行(差异中为红色)
    • CONTEXT - 对于未更改的上下文行

添加评论 - 完整使用指南

add_comment 工具支持多种场景。以下是何时以及如何使用每种方法:

1. 一般 PR 评论(无文件/行)

  • 使用场景:对 PR 进行总体反馈
  • 必需参数:仅 comment_text
  • 示例:“LGTM!”,“请更新文档”

2. 回复现有评论

  • 使用场景:继续对话线程
  • 必需参数:comment_textparent_comment_id
  • 适用于一般和内联评论回复

3. 带行号的内联评论

  • 使用场景:你知道差异中的确切行号
  • 必需参数:comment_textfile_pathline_number
  • 可选:line_type(默认为 CONTEXT)

4. 带代码片段的内联评论

  • 使用场景:你有代码但不知道行号(AI 工具常见)
  • 必需参数:comment_textfile_pathcode_snippet
  • 工具将自动查找行号
  • 如果代码多次出现,添加 search_context
  • 当存在多个匹配项时,使用 match_strategy: "best" 自动选择

5. 代码建议

  • 使用场景:提出特定的代码更改建议
  • 必需参数:comment_textfile_pathline_numbersuggestion
  • 对于多行:还需添加 suggestion_end_line
  • 在 Bitbucket UI 中创建适用的建议块

AI/自动化工具的决策流程

1. 你是否想建议代码更改?
   → 使用带行号的建议
   
2. 你是否有确切的行号?
   → 直接使用行号
   
3. 你有代码片段但没有行号吗?
   → 使用代码片段(如有需要添加搜索上下文)
   
4. 这是关于 PR 的一般评论吗?
   → 仅使用 comment_text
   
5. 你是否在回复另一条评论?
   → 添加 parent_comment_id

避免常见陷阱

  • 不要同时使用 line_numbercode_snippet - 选择其一
  • 建议始终需要 file_pathline_number
  • 代码片段必须完全匹配(包括空白)
  • REMOVED 行引用源文件,ADDED/CONTEXT 引用目标文件

合并拉取请求

{
  "tool": "merge_pull_request",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "merge_strategy": "squash",  // 可选: merge-commit, squash, fast-forward
    "close_source_branch": true,  // 可选
    "commit_message": "Custom merge message"  // 可选
  }
}

列出分支

{
  "tool": "list_branches",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "filter": "feature",  // 可选: 按名称模式筛选
    "limit": 25,  // 可选 (默认: 25)
    "start": 0  // 可选: 用于分页 (默认: 0)
  }
}

返回分页的分支列表,包含:

  • 分支名称和 ID
  • 最新提交哈希
  • 默认分支指示符
  • 分页信息

删除分支

{
  "tool": "delete_branch",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "feature/old-feature",
    "force": false  // 可选 (默认: false)
  }
}

注意:删除分支需要适当的权限。分支将被永久删除。

获取分支

{
  "tool": "get_branch",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "feature/new-feature",
    "include_merged_prs": false  // 可选 (默认: false)
  }
}

返回全面的分支信息,包括:

  • 分支详情:
    • 名称和 ID
    • 最新提交(哈希、消息、作者、日期)
    • 默认分支指示符
  • 从此分支发出的开放拉取请求:
    • PR 标题和 ID
    • 目标分支
    • 作者和审核人
    • 批准状态(批准人、请求更改人、待处理)
    • PR URL
  • 合并的拉取请求(如果 include_merged_prs 为 true):
    • PR 标题和 ID
    • 合并日期和合并人
  • 统计信息:
    • 开放 PR 总数
    • 合并 PR 总数
    • 自上次提交以来的天数

此工具对于以下情况特别有用:

  • 在删除分支之前检查是否有开放 PR
  • 获取分支活动概述
  • 了解 PR 审核状态
  • 识别陈旧分支

列出分支提交

获取特定分支中的所有提交,并具有高级筛选选项:

// 基本用法 - 获取最近的提交
{
  "tool": "list_branch_commits",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "feature/new-feature",
    "limit": 50  // 可选 (默认: 25)
  }
}

// 按日期范围筛选
{
  "tool": "list_branch_commits",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "main",
    "since": "2025-01-01T00:00:00Z",  // ISO 日期字符串
    "until": "2025-01-15T23:59:59Z"   // ISO 日期字符串
  }
}

// 按作者筛选
{
  "tool": "list_branch_commits",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "develop",
    "author": "john.doe@company.com",  // 电子邮件或用户名
    "limit": 100
  }
}

// 排除合并提交
{
  "tool": "list_branch_commits",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "release/v2.0",
    "include_merge_commits": false
  }
}

// 在提交消息中搜索
{
  "tool": "list_branch_commits",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "main",
    "search": "bugfix",  // 在提交消息中搜索
    "limit": 50
  }
}

// 组合多个筛选器
{
  "tool": "list_branch_commits",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "branch_name": "develop",
    "author": "jane.smith@company.com",
    "since": "2025-01-01T00:00:00Z",
    "include_merge_commits": false,
    "search": "feature",
    "limit": 100,
    "start": 0  // 用于分页
  }
}

筛选参数

  • since:ISO 日期字符串 - 仅显示此日期之后的提交
  • until:ISO 日期字符串 - 仅显示此日期之前的提交
  • author:按作者电子邮件/用户名筛选
  • include_merge_commits:布尔值,是否包含合并提交(默认:true)
  • search:在提交消息中搜索文本

返回详细的提交信息:

{
  "branch_name": "feature/new-feature",
  "branch_head": "abc123def456",  // 最新提交哈希
  "commits": [
    {
      "hash": "abc123def456",
      "abbreviated_hash": "abc123d",
      "message": "Add new feature implementation",
      "author": {
        "name": "John Doe",
        "email": "john.doe@example.com"
      },
      "date": "2025-01-03T10:30:00Z",
      "parents": ["parent1hash", "parent2hash"],
      "is_merge_commit": false
    }
    // ... 更多提交
  ],
  "total_count": 150,
  "start": 0,
  "limit": 25,
  "has_more": true,
  "next_start": 25,
  "filters_applied": {
    "author": "john.doe@example.com",
    "since": "2025-01-01",
    "include_merge_commits": false
  }
}

此工具对于以下情况特别有用:

  • 在发布前审查提交历史
  • 查找特定作者的提交
  • 跟踪日期范围内的更改
  • 搜索特定功能或修复
  • 分析分支活动模式

获取拉取请求中的提交

获取属于拉取请求的所有提交:

{
  "tool": "list_pr_commits",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "limit": 50,  // 可选 (默认: 25)
    "start": 0    // 可选: 用于分页
  }
}

返回 PR 的提交信息:

{
  "pull_request_id": 123,
  "pull_request_title": "Add awesome feature",
  "commits": [
    {
      "hash": "def456ghi789",
      "abbreviated_hash": "def456g",
      "message": "Initial implementation",
      "author": {
        "name": "Jane Smith",
        "email": "jane.smith@example.com"
      },
      "date": "2025-01-02T14:20:00Z",
      "parents": ["parent1hash"],
      "is_merge_commit": false
    }
    // ... 更多提交
  ],
  "total_count": 5,
  "start": 0,
  "limit": 25,
  "has_more": false
}

此工具对于以下情况特别有用:

  • 在合并前审查 PR 中的所有更改
  • 了解 PR 的开发历史
  • 检查提交消息的质量
  • 验证更改的作者身份
  • 通过提交计数分析 PR 的复杂性

获取拉取请求差异

获取拉取请求的差异/更改,并具有可选的筛选功能:

// 获取完整差异(默认行为)
{
  "tool": "get_pull_request_diff",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "context_lines": 5  // 可选 (默认: 3)
  }
}

// 排除特定文件类型
{
  "tool": "get_pull_request_diff",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "exclude_patterns": ["*.lock", "*.svg", "node_modules/**", "*.min.js"]
  }
}

// 仅包含特定文件类型
{
  "tool": "get_pull_request_diff",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "include_patterns": ["*.res", "*.resi", "src/**/*.js"]
  }
}

// 仅获取特定文件的差异
{
  "tool": "get_pull_request_diff",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "file_path": "src/components/Button.res"
  }
}

// 组合筛选器
{
  "tool": "get_pull_request_diff",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "include_patterns": ["src/**/*"],
    "exclude_patterns": ["*.test.js", "*.spec.js"]
  }
}

筛选选项

  • include_patterns:要包含的 glob 模式数组(白名单)
  • exclude_patterns:要排除的 glob 模式数组(黑名单)
  • file_path:仅获取特定文件的差异
  • 模式支持标准 glob 语法(例如,*.jssrc/**/*.res!test/**

响应包含筛选元数据

{
  "message": "Pull request diff retrieved successfully",
  "pull_request_id": 123,
  "diff": "..filtered diff content..",
  "filter_metadata": {
    "total_files": 15,
    "included_files": 12,
    "excluded_files": 3,
    "excluded_file_list": ["package-lock.json", "logo.svg", "yarn.lock"],
    "filters_applied": {
      "exclude_patterns": ["*.lock", "*.svg"]
    }
  }
}

批准拉取请求

{
  "tool": "approve_pull_request",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123
  }
}

请求更改

{
  "tool": "request_changes",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "pull_request_id": 123,
    "comment": "Please address the following issues..."  // 可选
  }
}

列出目录内容

{
  "tool": "list_directory_content",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "path": "src/components",  // 可选 (默认为根目录)
    "branch": "main"  // 可选 (默认为默认分支)
  }
}

返回目录列表,包含:

  • 路径和分支信息
  • 内容数组,包含:
    • 名称
    • 类型(文件或目录)
    • 大小(对于文件)
    • 完整路径
  • 总项目数

获取文件内容

{
  "tool": "get_file_content",
  "arguments": {
    "workspace": "PROJ",
    "repository": "my-repo",
    "file_path": "src/index.ts",
    "branch": "main",  // 可选 (默认为默认分支)
    "start_line": 1,  // 可选: 起始行 (基于 1,负数表示从末尾开始)
    "line_count": 100,  // 可选: 返回的行数
    "full_content": false  // 可选: 强制获取完整内容 (默认: false)
  }
}

智能截断功能

  • 自动截断大文件(>50KB)以防止令牌过载
  • 根据文件类型的默认行数:
    • 配置文件(.yml,.json):200 行
    • 文档文件(.md,.txt):300 行
    • 代码文件(.ts,.js,.py):500 行
    • 日志文件:最后 100 行
  • 使用 start_line: -50 获取最后 50 行(尾部功能)
  • 大于 1MB 的文件需要显式 full_content: true 或行参数

返回文件内容,包含:

  • 文件路径和分支
  • 文件大小和编码
  • 内容(根据参数为完整或截断)
  • 行信息(如果截断):
    • 文件中的总行数
    • 返回的行范围
    • 截断指示符
  • 最后修改信息(提交、作者、日期)

示例响应:

// 小文件 - 返回完整内容
{
  "file_path": "package.json",
  "branch": "main",
  "size": 1234,
  "encoding": "utf-8",
  "content": "{\n  \"name\": \"my-project\",\n  ...",
  "last_modified": {
    "commit_id": "abc123",
    "author": "John Doe",
    "date": "2025-01-21T10:00:00Z"
  }
}

// 大文件 - 自动截断
{
  "file_path": "src/components/LargeComponent.tsx",
  "branch": "main",
  "size": 125000,
  "encoding": "utf-8",
  "content": "... first 500 lines ...",
  "line_info": {
    "total_lines": 3500,
    "returned_lines": {
      "start": 1,
      "end": 500
    },
    "truncated": true,
    "message": "Showing lines 1-500 of 3500. File size: 122.1KB"
  }
}

高级用法

在实际开发中,你可以根据具体需求组合使用这些工具,以实现更复杂的功能。例如,结合 list_pull_requestsget_pull_request_diff 工具,先列出符合条件的拉取请求,再获取特定拉取请求的差异信息,从而进行更细致的代码审查。

🔧 技术细节

本项目使用 Node.js 构建,并使用 TypeScript 进行类型检查,以确保代码的健壮性和可维护性。通过与 Bitbucket API 交互,实现了各种工具的功能。在处理大文件时,采用了智能截断的策略,避免因文件过大导致的性能问题。同时,在身份验证方面,使用 Bitbucket 应用密码,提供了安全可靠的认证方式。

📄 许可证

本项目采用 MIT 许可证。

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端