Skip to main content
Glama

mcp-bitbucket-dc

PyPI Version PyPI Downloads Total Downloads Main Push Checks Release License: MIT

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

  1. Log in to your Bitbucket Data Center instance

  2. Go to Manage Account → HTTP access tokens

  3. Click Create token

  4. Set permissions: Repository Read (and Write if you need PR creation/commenting)

  5. 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 output

  • json: raw structured API response

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.

Available Tools

26 tools
bitbucket_browseBrowse FilesA
Read-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_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 RequestA
Destructive

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 CommentA
Destructive

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 BranchesA
Read-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 CommitA
Read-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 DiffA
Read-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 CommitsA
Read-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 ContentA
Read-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 ProjectA
Read-onlyIdempotent

Get details of a specific Bitbucket project by its key.

Inputs: project_key (required), response_format. Returns: result

bitbucket_get_projectsGet ProjectsA
Read-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 RequestA
Read-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 ChangesA
Read-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 CommentsA
Read-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 DiffB
Read-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 RequestsA
Read-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 RepositoriesA
Read-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 RepositoryA
Read-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 ReviewersA
Read-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 TagsA
Read-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 FilesA
Read-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 CommentA
Destructive

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 RepositoriesA
Read-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 RequestA
Destructive

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 CommentA
Destructive

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

    A3.9/5.0

    Scored across 26 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count4/5

    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.

    Completeness3/5

    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

    ActivityStale
    ResponsivenessNo recent community issues

    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.

      https://mcp.remote-mcp.com
    • 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.

      https://mcp.buildkite.com/mcp
    • 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.

      https://mcp.cortex.io/mcp
    • Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.

      https://mcp.driflyte.com/openai

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      An 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
    • A
      license
      C
      quality
      C
      maintenance
      MCP server for integrating with Bitbucket Cloud and Server APIs, enabling AI assistants to interact with repositories, pull requests, pipelines, and more.
      59
      30 npm
      3
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      MCP server for Bitbucket Cloud that enables AI agents to manage repositories, branches, pull requests, and deployments via typed tools.
      17
      41 npm
      ISC