mcp-bitbucket-dc
MCP (Model Context Protocol) server for Bitbucket Data Center. Enables AI assistants to search code, browse files, manage pull requests, and explore repositories through a standardized interface.
Built with FastMCP in Python. Installs via uvx.
Acknowledgements
- Many tools in this project were inspired by atlassian-dc-mcp.
- Code search functionality was inspired by @beapirate and prior related implementation work.
Quick Start
1. Generate a Personal Access Token
- Log in to your Bitbucket Data Center instance
- Go to Manage Account → HTTP access tokens
- Click Create token
- Set permissions: Repository Read (and Write if you need PR creation/commenting)
- Copy the token
2. Configure Your IDE
Add to your MCP configuration (mcp.json in VS Code, claude_desktop_config.json for Claude Desktop):
{
"mcpServers": {
"bitbucket-dc": {
"command": "uvx",
"args": ["mcp-bitbucket-dc"],
"env": {
"BITBUCKET_HOST": "git.yourcompany.com",
"BITBUCKET_API_TOKEN": "your-personal-access-token"
}
}
}
}
That's it. The server starts automatically when your IDE connects.
3. Start Using
Ask your AI assistant:
- "Search for CompanyInfoUpdater in the codebase"
- "Show me the file structure of the api-service repo in PROJECT"
- "Get the content of src/main/Application.java from repo backend"
- "List open pull requests in PROJECT/my-repo"
- "What branches exist in PROJECT/my-repo?"
Tools Reference
Most read/query tools support response_format:
markdown(default): human-readable outputjson: raw structured API response
Code Search
| Tool | Description |
|---|---|
bitbucket_code_search |
Search code across all repos with Lucene syntax (ext:java, lang:python, repo:name, project:KEY, AND/OR/NOT) |
File Browsing
| Tool | Description |
|---|---|
bitbucket_browse |
Browse directory tree (files & folders at a path) |
bitbucket_get_file_content |
Get raw file content with syntax highlighting |
bitbucket_list_files |
Recursively list all file paths in a repo |
bitbucket_get_branches |
List branches (filterable) |
bitbucket_get_tags |
List tags (filterable) |
bitbucket_create_branch |
Create a new branch from a branch, tag, or commit |
Projects & Repositories
| Tool | Description |
|---|---|
bitbucket_get_projects |
List projects (filterable by name/permission) |
bitbucket_get_project |
Get project details |
bitbucket_search_repositories |
Search repos across all projects (no project key required) |
bitbucket_get_repositories |
List repos in a project |
bitbucket_get_repository |
Get repo details with clone URLs |
Pull Requests
| Tool | Description |
|---|---|
bitbucket_get_pull_requests |
List PRs (filter by state, direction, text) |
bitbucket_get_pull_request |
Get PR details with reviewers |
bitbucket_get_pull_request_comments |
Get PR comments and activity |
bitbucket_get_pull_request_changes |
Get files changed in a PR |
bitbucket_get_pull_request_diff |
Get diff for a file in a PR |
bitbucket_post_pull_request_comment |
Post a comment (general or inline) |
bitbucket_update_pull_request_comment |
Update an existing PR comment |
bitbucket_delete_pull_request_comment |
Delete a PR comment |
bitbucket_create_pull_request |
Create a new PR |
bitbucket_update_pull_request |
Update PR title/description/reviewers |
bitbucket_get_required_reviewers |
Get required reviewers for a branch pair |
Commits
| Tool | Description |
|---|---|
bitbucket_get_commits |
List commits (filter by path, ref range) |
bitbucket_get_commit |
Get full details of a single commit |
bitbucket_get_commit_diff |
Get the diff for a specific commit |
Search Query Syntax
The bitbucket_code_search tool uses Lucene-style queries:
# Simple text search
CompanyInfoUpdater
# Filter by file extension
function ext:java
# Filter by language
config lang:python
# Filter by repository or project
DatabaseHelper repo:backend-api
service project:PLATFORM
# Filter by path
controller path:src/main
# Boolean operators (must be UPPERCASE)
config AND (yaml OR yml)
test NOT unit
UserService AND ext:java AND project:CORE
Configuration
| Environment Variable | Required | Description |
|---|---|---|
BITBUCKET_HOST |
Yes* | Bitbucket DC hostname (e.g. git.company.com) |
BITBUCKET_URL |
Yes* | Full base URL alternative (e.g. https://git.company.com) |
BITBUCKET_API_TOKEN |
Yes | Personal Access Token |
BITBUCKET_VERIFY_SSL |
No | Verify TLS certificates (default true). Set to false for self-signed or internal CA deployments. |
* Provide either BITBUCKET_HOST or BITBUCKET_URL, not both.
Disabling SSL verification
For Bitbucket DC instances behind a self-signed certificate or an internal CA that
isn't trusted by the system store, set BITBUCKET_VERIFY_SSL=false:
{
"mcpServers": {
"bitbucket-dc": {
"command": "uvx",
"args": ["mcp-bitbucket-dc"],
"env": {
"BITBUCKET_HOST": "git.yourcompany.com",
"BITBUCKET_API_TOKEN": "your-personal-access-token",
"BITBUCKET_VERIFY_SSL": "false"
}
}
}
}
⚠️ Disabling SSL verification means traffic is not protected against man-in-the-middle attacks. Only use this against trusted internal networks.
Support Matrix
| Component | Version(s) | Verification |
|---|---|---|
| Bitbucket Data Center | 8.19.5 | Live smoke tests run locally against a real server |
| Python runtime | 3.10, 3.11, 3.12, 3.13 | GitHub Actions CI (test workflow matrix) |
If you run on a different Bitbucket DC version, please open an issue with results.
Alternative Transports
# SSE transport (for remote/multi-user setups)
uvx mcp-bitbucket-dc --transport sse --host 0.0.0.0 --port 8000
# Streamable HTTP
uvx mcp-bitbucket-dc --transport streamable-http --host 0.0.0.0 --port 8000
By default, HTTP-based transports bind to 127.0.0.1 for safer local development.
Development
# Clone and install
git clone https://github.com/christopherekfeldt/mcp-bitbucket-dc.git
cd mcp-bitbucket-dc
uv sync
# Install git hooks
uv run pre-commit install
# Run locally
export BITBUCKET_HOST=git.yourcompany.com
export BITBUCKET_API_TOKEN=your-token
uv run mcp-bitbucket-dc
# Run tests
uv run pytest
# Run live smoke tests against a real/staging Bitbucket DC
# (requires BITBUCKET_HOST or BITBUCKET_URL + BITBUCKET_API_TOKEN)
RUN_LIVE_SMOKE=1 uv run pytest -m integration -q
Contributor/agent workflow guidance: see AGENTS.md.
Versioning & Stability
This project follows Semantic Versioning. From v1.0.0 onward, tool names, required parameters, and output contracts are stable — breaking changes only in major version bumps.
Upgrade: uvx mcp-bitbucket-dc always uses the latest. Pin with uvx mcp-bitbucket-dc==X.Y.Z.
Release notes: See GitHub Releases for changelogs.
License
MIT — see LICENSE.
Metadata
Release files for mcp-bitbucket-dc 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mcp_bitbucket_dc-1.0.1.tar.gz | 170.9 kB | With provenance | Details for mcp_bitbucket_dc-1.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mcp_bitbucket_dc-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for mcp_bitbucket_dc-1.0.1-py3-none-any.whl |
Total release size: 198.4 kB
Release files / mcp_bitbucket_dc-1.0.1.tar.gz
| Download URL | mcp_bitbucket_dc-1.0.1.tar.gz |
|---|---|
| Size | 170.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b3ffc2cc70ca119c37ab9cfbf16b44402d5dbbdc5f94e0352dbc1a593b621165
|
|
BLAKE2b-256 checksum How to use checksums |
61f18c6e2034e31a0b5115ae997803f1190e0dc1c07438d0a7a75b269a3a6e32
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency logRelease files / mcp_bitbucket_dc-1.0.1-py3-none-any.whl
| Download URL | mcp_bitbucket_dc-1.0.1-py3-none-any.whl |
|---|---|
| Size | 27.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
74b1f3cd36834ac02928445330de8980da62a187f7090ef486749e1e12b4b978
|
|
BLAKE2b-256 checksum How to use checksums |
2c9dbd75a901500bcd1716dfd20dc56b7acb833d812af4d378a41f635f726d2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency logSecurity for mcp-bitbucket-dc 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for mcp_bitbucket_dc-1.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.