
Bitbucket MCP Server
io.github.lawp09由 GitHub 账号 lawp09 发布v1.29.2更新于 Oct 26, 2026
MCP server for Bitbucket API - manage repositories, pull requests, comments, pipelines and more
概览
本地 MCP 服务器,把 AI 助手连接到 Bitbucket Cloud,用于浏览仓库、审查拉取请求和监控流水线。
- 可以做什么
- 浏览仓库、源码文件、目录、提交以及工作区成员与权限
- 读取、创建、更新、批准、拒绝或合并拉取请求,包括草稿、审查人和批量审查
- 读取、添加、编辑、解决或删除拉取请求评论与任务,以及差异、补丁和差异统计
- 查看并控制 CI:构建状态、流水线运行、步骤与日志、流水线变量、计划和缓存
- 管理议题与议题评论、部署与部署变量,以及分支限制
- 使用内置提示模板完成 PR 审查、流水线失败排查、仓库概览和新审查人上手
- 适用场景
- 适合团队代码托管在 Bitbucket Cloud 的场景:希望助手在对话中直接审查拉取请求、排查 CI 失败,或回答关于仓库和流水线的问题。
- 运行要求
- 需要 Python 3.12+ 和 bitbucket-mcp-py 包,通常用 uvx 或 pip 运行。需要一个带明确权限范围的 Bitbucket API 令牌,并设置 BITBUCKET_USERNAME、BITBUCKET_TOKEN、BITBUCKET_WORKSPACE 环境变量(或使用系统钥匙串)。需要访问 Bitbucket API 的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 Bitbucket MCP Server,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Bitbucket MCP Server (Python)
[PyPI] [Python] [CI] [CodeQL] [License: MIT]
Connect Claude Code, OpenAI Codex, Cursor, VS Code (GitHub Copilot), and any MCP-compatible AI assistant to your Bitbucket Cloud repositories. Review pull requests, monitor pipelines, and manage your code — all through natural language.
Features
- 60+ MCP tools — repositories, pull requests, comments, tasks, diffs, pipelines (runtime + config), build statuses, reviewers, draft PRs, batch review, issue tracker, commits, source/file browsing
- MCP 2025 tool annotations — every tool advertises
readOnlyHint/destructiveHint/idempotentHint/openWorldHint+ a human-readable title, so clients (Claude Code, Cursor) auto-include read-only tools and warn before destructive operations - Slim responses — stripped API noise for lower LLM token usage
- Configurable — enable/disable tools via
configs/tools.jsonorBITBUCKET_TOOLS_CONFIGenv var - Secure credentials — environment variables or system keychain
Quick Start
1. Install
The recommended way to run the server is via uvx (zero install, isolated environment):
Why
--from? The PyPI package isbitbucket-mcp-pybut the command entry point isbitbucket-mcp. The--fromflag tells uvx which package to install.
Alternative install methods
2. Configure credentials
Set the following environment variables — in your MCP client's env block, as shown above, or in the system keychain (see Credentials):
Get your API token at: https://id.atlassian.com/manage-profile/security/api-tokens
⚠️ Use a scoped token, not a global one. When creating the token, select specific scopes (e.g.
Repositories: Read,Pull requests: Read/Write). Global tokens without explicit scopes do not work with this MCP server.
3. Configure your AI assistant
Claude Code (recommended)
Option A — CLI (fastest):
Option B — JSON config (~/.claude.json or project .mcp.json):
OpenAI Codex
Option A — CLI (fastest):
Option B — TOML config (~/.codex/config.toml):
Cursor
Add to ~/.cursor/mcp.json:
VS Code (GitHub Copilot)
Add to .vscode/mcp.json (workspace) or ~/Library/Application Support/Code/User/mcp.json (global, macOS):
Available Tools
Disabled by default:
merge_pull_request(safety),stop_pipeline(safety),get_pull_request_patch(git am format — not useful for AI review),convert_pull_request_to_draft(not supported by Bitbucket API),delete_issue(safety),delete_issue_comment(safety),add_commit_comment(write op),create_pipeline_variable/update_pipeline_variable/delete_pipeline_variable(write ops),create_pipeline_schedule/update_pipeline_schedule/delete_pipeline_schedule(write ops),delete_pipeline_cache(safety),create_environment/delete_environment/create_deployment_variable/update_deployment_variable/delete_deployment_variable(write ops),create_branch_restriction/update_branch_restriction/delete_branch_restriction(write ops). Enable inconfigs/tools.json.
Governance scopes — Branch restriction read tools need the
repositoryscope (repository:adminmay be required depending on repo config); the write tools needrepository:admin. Workspace member/permission tools need theaccountscope. The/membersendpoint lists users without a per-user permission (uselist_workspace_permissionsfor roles).
Deployments scopes — the read tools (
list_environments,get_environment,list_deployments,get_deployment,list_deployment_variables) need thedeploymentscope; the write tools needdeployment:write. Bitbucket has no server-side filter for deployments by environment (BCLOUD-18729) — filter on theenvironmentfield oflist_deploymentsinstead. There is noupdate_environmenttool: Bitbucket exposes noPUTfor environments (onlyPOST .../changesfor locking).
Custom tool configuration
By default the server reads configs/tools.json bundled with the package. You can point to a custom file at runtime without rebuilding:
Fallback chain (first match wins):
BITBUCKET_TOOLS_CONFIGenvironment variable- Built-in
configs/tools.json
Fail-safe behaviour — If
BITBUCKET_TOOLS_CONFIGis set but the file is missing or contains invalid JSON, the server raises an error on startup (explicit failure rather than silently ignoring the override). If the built-in default is missing, all tools are enabled.
Token tip —
get_pull_request_diffaccepts an optionalpathparameter to filter the diff to a single file, reducing token usage by ~95% on large PRs:Token tip —
get_pipeline_step_logsreturns only the trailing 100 KiB of a step log by default (raw logs run to several MB on long steps). The response carries atruncatedflag; widen the window with the absolute byte rangestart/end, or passmax_bytes=nullfor the whole log. Pass a service container UUID aslog_uuidto read that service's log instead of the build container's. This endpoint needs a real pipeline UUID — resolve it viaget_pipeline_runif you only have a build number.
MCP Prompts
The server also exposes MCP Prompts — parameterised templates that compatible clients (Claude Code, Cursor, ...) surface as slash commands. Instead of remembering tool names, you invoke a prompt and the assistant orchestrates the right tools for you. They appear in the client's prompt picker (prompts/list).
Prompts are enabled/disabled in configs/tools.json under the top-level prompts key (separate from tools).
Credentials
Option 1: environment variables (recommended)
Put them in the env block of your MCP client configuration, as in the examples above, or export them in the shell that launches the server.
Option 2: System keychain (most secure)
About
.env: the server itself never reads a.envfile..env.exampleis a template for containers, which load it with--env-file .envorenv_file:(the Docker, Makefile anddocker-compose.ymlsetups); withuvxorpython -m src.main, use option 1 or 2.
Docker (Alternative)
If you prefer running the server in a container:
Then configure your AI assistant to use docker exec:
Transports
The server speaks stdio by default (the standard transport for local MCP clients). For a network deployment it also supports Streamable HTTP (MCP spec 2025-03-26):
Clients connect to
http://<host>:<port>/mcp(e.g.http://localhost:8080/mcp).
⚠️
--hostdefaults to0.0.0.0, every interface. Without--multi-tenantthe server has no authentication of its own: anyone who can reach the port acts with your Bitbucket token. Bind to127.0.0.1unless the port sits behind an authenticating proxy.
--transport sse(legacy Server-Sent Events) is still accepted but deprecated — it emits aDeprecationWarning. Prefer--transport http.
Stateless HTTP (horizontal scaling / serverless)
--stateless runs the Streamable HTTP transport without server-side sessions: no Mcp-Session-Id, a fresh transport per HTTP request. Any instance behind a load balancer can serve any request — no sticky sessions required.
⚠️ Single-tenant by default. Without
--multi-tenantthe server serves its own process-wide Bitbucket token to every caller. Deploy it on a private network or behind an authenticated reverse proxy — or use multi-tenant mode, where each caller brings their own credentials.
--stateless requires --transport http (it is rejected on stdio and on the legacy sse, whose app ignores the setting). It also forces a single JSON response instead of an SSE stream, because edge/serverless runtimes cannot hold a streaming response open — there is currently no way to combine stateless with streaming.
A liveness endpoint is exposed on both HTTP transports for load balancers:
In a container — the image's default CMD keeps it idle for exec-based stdio usage, so server mode is started by overriding the command:
Inside the container
--host 0.0.0.0is required;-p 127.0.0.1:8000:8000is what keeps the published port off the network, since this single-tenant server answers every caller with the.envtoken.
Works identically with
docker run. The image exposes port 8000.
The two allowlists must be set together: an empty
Hostallowlist rejects every request (421), and an emptyOriginallowlist rejects every browser client (403). Setting only one is refused at startup rather than silently locking the server out.
With neither allowlist set, no DNS-rebinding protection is applied — appropriate for a server reached through a private network or a trusted proxy. Set them as soon as the server is exposed on a real hostname.
Multi-tenant HTTP (per-request credentials)
By default an HTTP deployment is single-tenant: every caller acts with the process-wide Bitbucket token. --multi-tenant changes that — each request carries the caller's own Bitbucket OAuth access token as Authorization: Bearer, and runs under that identity. The server holds no Bitbucket credential of its own.
The token is verified against GET /2.0/user, which yields the caller's account_id and default workspace; the same token is then reused for the downstream API calls, so no credential is ever stored or mapped. Unauthenticated requests get a 401 with a WWW-Authenticate challenge pointing at /.well-known/oauth-protected-resource/mcp. Since Bitbucket publishes no OAuth metadata, the server serves /.well-known/oauth-authorization-server itself, pointing at Bitbucket's endpoints — which is what lets it be added to claude.ai as a custom connector (Bitbucket sign-in through the Atlassian login); setup, what was verified and the residual risks in docs/deployment-modes.md.
What this buys you:
- Isolation — one Bitbucket client per
(identity, workspace); two callers never share one, and there is no process token to fall back on. workspace=Nonemeans your workspace — resolved from the caller's memberships, never fromBITBUCKET_WORKSPACE. With zero or several memberships there is no default and calls must name their workspace.- Audit trail — every call is logged to the
bitbucket_mcp.auditlogger with the tool, theaccount_idand the workspace. Never credentials. - Tighter defaults — tools flagged
destructiveHintare refused unless explicitly enabled. The other write tools (comment, approve, create a pull request, run a pipeline…) stay available to every caller: setBITBUCKET_MULTITENANT_READ_ONLY=1for a first deployment.
Spec deviation: the caller's Bitbucket token is accepted without an audience check and forwarded upstream as-is, which the MCP authorization spec (2025-11-25) forbids — trade-offs and residual risks in docs/deployment-modes.md.
Not supported in this mode: Bitbucket Repository/Workspace Access Tokens — they are not bound to a user account, so no identity can be derived. Use single-tenant HTTP for that. Bearer tokens require TLS: terminate HTTPS in front of the server.
stdio is unaffected — it stays single-user with environment variables, exactly as documented above.
See docs/deployment-modes.md for the full matrix of the three deployment modes and the threat model of each.
Kubernetes (k3s, datacenter, GKE)
Each release publishes a multi-arch image (ghcr.io/lawp09/bitbucket-mcp) and a Helm chart (oci://ghcr.io/lawp09/charts/bitbucket-mcp) that deploy the multi-tenant HTTP mode; publicUrl is the only required value:
Ingress, GKE and network-policy notes: docs/deployment-kubernetes.md.
Development
Requirements
- Python 3.12+
- Bitbucket API token
License
MIT
References
- MCP Registry — Official MCP server registry
- PyPI Package — Python package
- MCP Python SDK
- Bitbucket API 2.0
- FastMCP Framework
来源:README.md,提交 a92ce75
工具
0版本历史
5- v1.29.2最新Oct 26, 2026
- v1.29.1Oct 9, 2026
- v1.29.0Oct 8, 2026
- v1.28.0Oct 8, 2026
- v1.26.1Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分