mcp-bitbucket-dc
mcp-bitbucket-dc is an MCP server that enables AI assistants to interact with Bitbucket Data Center for code search, file browsing, repository management, pull request operations, and commit history.
Code Search: Search code across all repositories using Lucene-style queries with filters for file extension, language, repository, project, and path
File Browsing: Browse directory trees, retrieve raw file content, and recursively list all file paths in a repository or subdirectory
Branch & Tag Management: List and filter branches and tags in a repository
Projects & Repositories: List projects and repositories, get detailed info including clone URLs
Pull Request Reading: List PRs with filters for state/direction/text, get full PR details, view comments and activity, see changed files, and view file-specific diffs
Pull Request Writing: Post general or inline code comments, create new pull requests, and update PR title/description/reviewers
Required Reviewers: Discover mandatory reviewers for a branch pair before creating a PR
Commit History: List commits with optional filters by file path or commit range
Most tools support both human-readable markdown and raw JSON output, and the server supports local and remote deployments via SSE or Streamable HTTP transports.
Enables searching code, browsing files, managing pull requests, and exploring repositories and projects within a Bitbucket Data Center instance.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-bitbucket-dc Search for the DatabaseHelper class in the backend-api repository"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Related MCP server: Bitbucket MCP Server
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 |
| Search code across all repos with Lucene syntax ( |
File Browsing
Tool | Description |
| Browse directory tree (files & folders at a path) |
| Get raw file content with syntax highlighting |
| Recursively list all file paths in a repo |
| List branches (filterable) |
| List tags (filterable) |
| Create a new branch from a branch, tag, or commit |
Projects & Repositories
Tool | Description |
| List projects (filterable by name/permission) |
| Get project details |
| Search repos across all projects (no project key required) |
| List repos in a project |
| Get repo details with clone URLs |
Pull Requests
Tool | Description |
| List PRs (filter by state, direction, text) |
| Get PR details with reviewers |
| Get PR comments and activity |
| Get files changed in a PR |
| Get diff for a file in a PR |
| Post a comment (general or inline) |
| Update an existing PR comment |
| Delete a PR comment |
| Create a new PR |
| Update PR title/description/reviewers |
| Get required reviewers for a branch pair |
Commits
Tool | Description |
| List commits (filter by path, ref range) |
| Get full details of a single commit |
| 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:COREConfiguration
Environment Variable | Required | Description |
| Yes* | Bitbucket DC hostname (e.g. |
| Yes* | Full base URL alternative (e.g. |
| Yes | Personal Access Token |
| No | Verify TLS certificates (default |
* 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 ( |
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 8000By 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 -qContributor/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.
Available Tools
26 toolsbitbucket_browseBrowse FilesARead-onlyIdempotent
Browse the file tree of a repository.
Lists files and directories at the given path. If path points to a file,
returns its content instead. Use at to browse a specific branch or commit.
Inputs: project_key (required), repository_slug (required), at, path, +3 more. Returns: result
bitbucket_code_searchCode SearchARead-onlyIdempotent
Search code across all Bitbucket repositories using the search API.
Uses Bitbucket's built-in code search (powered by Elasticsearch). Searches across all repositories the authenticated user has access to. Returns matching files with surrounding code context and line numbers.
Requires the Bitbucket Search feature to be enabled on the Data Center instance.
Inputs: query (required), limit, start, response_format. Returns: result
bitbucket_create_branchCreate BranchA
Create a new branch in a repository.
Creates a branch at the given start point (branch name, tag, or commit hash).
Inputs: name (required), project_key (required), start_point (required), repository_slug (required). Returns: result
bitbucket_create_pull_requestCreate Pull RequestADestructive
Create a new pull request.
Creates a PR from from_ref branch to to_ref branch. Optionally add
a description and reviewers.
Inputs: title (required), to_ref (required), from_ref (required), project_key (required), +3 more. Returns: result
bitbucket_delete_pull_request_commentDelete PR CommentADestructive
Delete a comment from a pull request.
Requires the current comment version number for optimistic locking.
Only the comment author or an admin can delete a comment.
Inputs: version (required), comment_id (required), project_key (required), pull_request_id (required), +1 more. Returns: result
bitbucket_get_branchesGet BranchesARead-onlyIdempotent
List branches in a repository.
Returns branches with their latest commit hash. Use filter_text to search
for branches by name.
Inputs: project_key (required), repository_slug (required), limit, start, +3 more. Returns: result
bitbucket_get_commitGet CommitARead-onlyIdempotent
Get full details of a single commit including message, author, and parents.
Inputs: commit_id (required), project_key (required), repository_slug (required), response_format. Returns: result
bitbucket_get_commit_diffGet Commit DiffARead-onlyIdempotent
Get the diff for a specific commit.
Returns the unified diff showing all changes introduced by the commit.
Optionally restrict to a single file with path.
Inputs: commit_id (required), project_key (required), repository_slug (required), path, +3 more. Returns: result
bitbucket_get_commitsGet CommitsARead-onlyIdempotent
Get commits for a repository.
Lists commits in reverse chronological order. Use since/until to specify
a commit range (like git log since..until). Use path to only show commits
that modified a specific file.
Inputs: project_key (required), repository_slug (required), path, limit, +4 more. Returns: result
bitbucket_get_file_contentGet File ContentARead-onlyIdempotent
Get the raw content of a file from a repository.
Returns the full file content as text. Use at to fetch from a specific
branch, tag, or commit hash.
Inputs: path (required), project_key (required), repository_slug (required), at, +1 more. Returns: result
bitbucket_get_projectGet ProjectARead-onlyIdempotent
Get details of a specific Bitbucket project by its key.
Inputs: project_key (required), response_format. Returns: result
bitbucket_get_projectsGet ProjectsARead-onlyIdempotent
Get a list of Bitbucket projects.
Returns projects the authenticated user has access to. Use name to filter
by project name, and permission to filter by access level.
Inputs: name, limit, start, permission, +1 more. Returns: result
bitbucket_get_pull_requestGet Pull RequestARead-onlyIdempotent
Get full details of a specific pull request including description and reviewers.
Inputs: project_key (required), pull_request_id (required), repository_slug (required), response_format. Returns: result
bitbucket_get_pull_request_changesGet PR ChangesARead-onlyIdempotent
Get the list of files changed in a pull request.
Shows which files were added, modified, deleted, or renamed in the PR.
Inputs: project_key (required), pull_request_id (required), repository_slug (required), limit, +4 more. Returns: result
bitbucket_get_pull_request_commentsGet PR CommentsARead-onlyIdempotent
Get comments and activity for a pull request.
Returns all activities (comments, approvals, status changes) on the PR, including inline code comments with file path and line information.
Inputs: project_key (required), pull_request_id (required), repository_slug (required), limit, +2 more. Returns: result
bitbucket_get_pull_request_diffGet PR DiffBRead-onlyIdempotent
Get the text diff for a specific file in a pull request.
Returns the unified diff showing additions and deletions for the specified file.
Inputs: path (required), project_key (required), pull_request_id (required), repository_slug (required), +4 more. Returns: result
bitbucket_get_pull_requestsGet Pull RequestsARead-onlyIdempotent
List pull requests for a repository.
Returns pull requests filtered by state, direction, and text. Defaults to showing OPEN pull requests ordered by newest first.
Inputs: project_key (required), repository_slug (required), limit, order, +5 more. Returns: result
bitbucket_get_repositoriesGet RepositoriesARead-onlyIdempotent
Get repositories for a Bitbucket project.
Lists all repositories within the specified project that the authenticated user has access to.
Inputs: project_key (required), limit, start, response_format. Returns: result
bitbucket_get_repositoryGet RepositoryARead-onlyIdempotent
Get details of a specific repository including clone URLs and configuration.
Inputs: project_key (required), repository_slug (required), response_format. Returns: result
bitbucket_get_required_reviewersGet Required ReviewersARead-onlyIdempotent
Get required reviewers for a potential pull request between two branches.
Use this before creating a PR to discover mandatory reviewers configured via merge checks or default reviewer rules.
Inputs: source_ref (required), target_ref (required), project_key (required), repository_slug (required), +1 more. Returns: result
bitbucket_get_tagsGet TagsARead-onlyIdempotent
List tags in a repository.
Returns tags with their associated commit hash. Use filter_text to search
for tags by name.
Inputs: project_key (required), repository_slug (required), limit, start, +3 more. Returns: result
bitbucket_list_filesList FilesARead-onlyIdempotent
Recursively list all file paths in a repository or sub-directory.
Returns a flat list of all file paths (no directories). Useful for understanding the project structure or finding files by name.
Inputs: project_key (required), repository_slug (required), at, path, +3 more. Returns: result
bitbucket_post_pull_request_commentPost PR CommentADestructive
Post a comment on a pull request.
Can post general comments, reply to existing comments, or add inline code comments at a specific file and line.
Inputs: text (required), project_key (required), pull_request_id (required), repository_slug (required), +4 more. Returns: result
bitbucket_search_repositoriesSearch RepositoriesARead-onlyIdempotent
Search repositories across all projects.
Returns repositories the authenticated user has access to, optionally filtered by name, project name, or permission level. Unlike bitbucket_get_repositories, this does not require a project key.
Inputs: name, limit, start, permission, +2 more. Returns: result
bitbucket_update_pull_requestUpdate Pull RequestADestructive
Update a pull request's title, description, or reviewers.
Requires the current PR version number for optimistic locking — fetch it
first using bitbucket_get_pull_request.
Inputs: version (required), project_key (required), pull_request_id (required), repository_slug (required), +3 more. Returns: result
bitbucket_update_pull_request_commentUpdate PR CommentADestructive
Update an existing comment on a pull request.
Requires the current comment version number for optimistic locking.
Inputs: text (required), version (required), comment_id (required), project_key (required), +2 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 26 tools
Each tool targets a distinct resource and action (e.g., get vs list for pull requests, branches, commits). There is no ambiguity between tools; even closely related ones like get_pull_request_changes and get_pull_request_diff have clear, separate purposes.
All tools follow the consistent pattern 'bitbucket_<verb>_<noun>', using snake_case throughout. Examples: bitbucket_create_branch, bitbucket_get_pull_requests, bitbucket_post_pull_request_comment.
26 tools is slightly high but appropriate for a comprehensive Bitbucket server covering projects, repositories, branches, pull requests, commits, files, and search. The count is justified by the breadth of operations, though a few could be merged.
Covers many key operations but has notable gaps: no delete for branches/repositories/projects, no merge pull request, no create/update repository. These are common workflows missing, though destructive operations may be intentionally excluded.
Maintenance
Related MCP Connectors
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
The Buildkite MCP server exposes Buildkite product data (pipelines, builds, jobs, and test data) to AI tools, editors, and agents through the Model Context Protocol. It provides capabilities including pipeline creation and management, build monitoring with specialized tools like 'wait_for_build', efficient log querying using Apache Parquet conversion and caching, and OAuth-based authentication for both read-write and read-only access to Buildkite's REST API.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to interact with Atlassian Jira and Confluence across Cloud and Server/Data Center environments. It supports tasks like searching and summarizing documentation, managing Jira issues, and creating content through natural language.MIT
- AlicenseCqualityCmaintenanceMCP server for integrating with Bitbucket Cloud and Server APIs, enabling AI assistants to interact with repositories, pull requests, pipelines, and more.5930 npm3MIT
- AlicenseAqualityDmaintenanceAn MCP server for BitBucket Cloud operations that enables AI agents to manage repositories, branches, pull requests, and search code.32MIT
- AlicenseBqualityDmaintenanceMCP server for Bitbucket Cloud that enables AI agents to manage repositories, branches, pull requests, and deployments via typed tools.1741 npmISC