MCP Server for Bitbucket API - Container optimized with configurable tools, structured output and slim responses
Project description
Bitbucket MCP Server (Python)
Connect Claude Code, VS Code (GitHub Copilot), Cursor, 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
- 45 MCP tools — repositories, pull requests, comments, tasks, diffs, pipelines, build statuses, reviewers, draft PRs, batch review
- Slim responses — stripped API noise for lower LLM token usage
- Configurable — enable/disable tools via
configs/tools.json - 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):
# Always latest version
uvx --from bitbucket-mcp-py bitbucket-mcp
# Pin a specific version
uvx --from bitbucket-mcp-py==1.8.1 bitbucket-mcp
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
| Mode | Command | Best for |
|---|---|---|
| pip global | pip install bitbucket-mcp-py |
Simple, persistent install |
| Local dev | pip install -e . in project dir |
Contributing to the project |
| Docker | See Docker section | Container-based workflows |
2. Configure credentials
Set the following environment variables (or use a .env file — see Credentials):
| Variable | Description |
|---|---|
BITBUCKET_USERNAME |
Your Bitbucket email |
BITBUCKET_TOKEN |
Your Bitbucket API token |
BITBUCKET_WORKSPACE |
Your workspace slug |
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):
claude mcp add bitbucket-mcp \
-e BITBUCKET_USERNAME=your-email@example.com \
-e BITBUCKET_TOKEN=your-api-token \
-e BITBUCKET_WORKSPACE=your-workspace \
-- uvx --from bitbucket-mcp-py bitbucket-mcp
Option B — JSON config (~/.claude.json or project .mcp.json):
{
"mcpServers": {
"bitbucket-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "bitbucket-mcp-py", "bitbucket-mcp"],
"env": {
"BITBUCKET_USERNAME": "your-email@example.com",
"BITBUCKET_TOKEN": "your-api-token",
"BITBUCKET_WORKSPACE": "your-workspace"
}
}
}
}
VS Code (GitHub Copilot)
Add to .vscode/mcp.json (workspace) or ~/Library/Application Support/Code/User/mcp.json (global, macOS):
{
"servers": {
"bitbucket-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "bitbucket-mcp-py", "bitbucket-mcp"],
"env": {
"BITBUCKET_USERNAME": "your-email@example.com",
"BITBUCKET_TOKEN": "your-api-token",
"BITBUCKET_WORKSPACE": "your-workspace"
}
}
}
}
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"bitbucket-mcp": {
"command": "uvx",
"args": ["--from", "bitbucket-mcp-py", "bitbucket-mcp"],
"env": {
"BITBUCKET_USERNAME": "your-email@example.com",
"BITBUCKET_TOKEN": "your-api-token",
"BITBUCKET_WORKSPACE": "your-workspace"
}
}
}
}
Available Tools
| Category | Tools |
|---|---|
| Repositories | list_repositories, get_repository |
| Pull Requests | get_pull_requests, get_pull_request, create_pull_request, update_pull_request, approve_pull_request, unapprove_pull_request, request_changes_pull_request, unrequest_changes_pull_request, decline_pull_request, merge_pull_request |
| Comments | get_pull_request_comments, add_pull_request_comment, get_pull_request_comment, update_pull_request_comment, delete_pull_request_comment, resolve_pull_request_comment, reopen_pull_request_comment, get_pull_request_activity |
| Tasks PR | get_pull_request_tasks, get_pull_request_task, create_pull_request_task, update_pull_request_task, delete_pull_request_task |
| Diff / Review | get_pull_request_diff, get_pull_request_patch, get_pull_request_diffstat, get_pull_request_commits |
| PR Discovery | get_pull_requests_pending_review |
| Build / CI | get_pull_request_statuses, get_commit_statuses |
| Pipelines | list_pipeline_runs, get_pipeline_run, get_pipeline_steps, get_pipeline_step_logs, run_pipeline, stop_pipeline |
| Reviewers | get_effective_default_reviewers, suggest_pull_request_reviewers |
| Draft PR | create_draft_pull_request, publish_draft_pull_request, convert_pull_request_to_draft |
| Batch Review | submit_pull_request_batch_review |
| Review Summary | get_pull_request_review_summary |
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). Enable inconfigs/tools.json.
Token tip —
get_pull_request_diffaccepts an optionalpathparameter to filter the diff to a single file, reducing token usage by ~95% on large PRs:get_pull_request_diff(repo_slug, pull_request_id, path="src/services/myService.ts")
Credentials
Option 1: .env file (recommended)
cp .env.example .env
# Edit .env with your credentials
Option 2: System keychain (most secure)
pip install 'bitbucket-mcp-py[keyring]'
python3 -c "import keyring; keyring.set_password('bitbucket-mcp', 'bitbucket_token', 'YOUR_TOKEN')"
Docker (Alternative)
If you prefer running the server in a container:
docker build -t bitbucket-mcp-py .
docker run -d --name bitbucket-mcp --env-file .env bitbucket-mcp-py
Then configure your AI assistant to use docker exec:
{
"mcpServers": {
"bitbucket-mcp": {
"command": "docker",
"args": ["exec", "-i", "bitbucket-mcp", "python", "-m", "src.main", "--transport", "stdio"]
}
}
}
Development
# Install dev dependencies
uv sync --extra dev
# Run tests
uv run pytest tests/ -v
# Run specific test
uv run pytest tests/test_client.py -v
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bitbucket_mcp_py-1.13.0.tar.gz.
File metadata
- Download URL: bitbucket_mcp_py-1.13.0.tar.gz
- Upload date:
- Size: 104.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46be26cb93f97896f9cc6bd42659dac5e4515681a2f86d75799d682762d298c5
|
|
| MD5 |
bb298ee574115380095ec970b5202a57
|
|
| BLAKE2b-256 |
7fd1efce8c5c69476d73a806ca98af47ecd0bb8b0d2a38116a1a7f4bfe1985cf
|
Provenance
The following attestation bundles were made for bitbucket_mcp_py-1.13.0.tar.gz:
Publisher:
release.yml on lawp09/bitbucket-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bitbucket_mcp_py-1.13.0.tar.gz -
Subject digest:
46be26cb93f97896f9cc6bd42659dac5e4515681a2f86d75799d682762d298c5 - Sigstore transparency entry: 1066544162
- Sigstore integration time:
-
Permalink:
lawp09/bitbucket-mcp@807f98de3061831670b8d59d7757398173f5c229 -
Branch / Tag:
refs/tags/v1.13.0 - Owner: https://github.com/lawp09
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@807f98de3061831670b8d59d7757398173f5c229 -
Trigger Event:
push
-
Statement type:
File details
Details for the file bitbucket_mcp_py-1.13.0-py3-none-any.whl.
File metadata
- Download URL: bitbucket_mcp_py-1.13.0-py3-none-any.whl
- Upload date:
- Size: 26.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
679d43b0f3f0d040926b9d67af871460d92f68c7d4640de9804a5484267349fe
|
|
| MD5 |
5ed185a6b7f653a7b6c5354b018a9455
|
|
| BLAKE2b-256 |
9d60d8c0b27fc99761525bc102cedd82ce3e5c05e29739bea855c9787acf31df
|
Provenance
The following attestation bundles were made for bitbucket_mcp_py-1.13.0-py3-none-any.whl:
Publisher:
release.yml on lawp09/bitbucket-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bitbucket_mcp_py-1.13.0-py3-none-any.whl -
Subject digest:
679d43b0f3f0d040926b9d67af871460d92f68c7d4640de9804a5484267349fe - Sigstore transparency entry: 1066544163
- Sigstore integration time:
-
Permalink:
lawp09/bitbucket-mcp@807f98de3061831670b8d59d7757398173f5c229 -
Branch / Tag:
refs/tags/v1.13.0 - Owner: https://github.com/lawp09
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@807f98de3061831670b8d59d7757398173f5c229 -
Trigger Event:
push
-
Statement type: