CCM
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Claude Code Marketplaces

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Skill index
  • MCP index
  • Marketplace index
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by mertbuilds.com

Independent project, not affiliated with Anthropic
lawp09 avatar

Bitbucket MCP Server

lawp09/bitbucket-mcp
217 toolsSTDIOregistry active
Summary

Connects Claude, Copilot, and Cursor to Bitbucket Cloud through 45 tools covering repos, pull requests, comments, pipelines, and build statuses. You can review PRs, post inline comments, approve or request changes, run pipelines, and query CI status all through natural language. The server strips API noise for lower token usage and lets you filter diffs by file path to cut tokens by 95% on large PRs. Ships with safety guards on destructive operations like merging and pipeline stops. Runs via uvx with zero install, supports scoped API tokens, and includes batch review and draft PR workflows. Built for teams doing code review and CI monitoring from their AI assistant.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
inference shell
inference shell
create and run specialised agents in minutes
build now →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
inference shell
inference shell
create and run specialised agents in minutes
build now →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →

Tools

Public tool metadata for what this MCP can expose to an agent.

17 tools
BITBUCKET_CREATE_BRANCHCreates a new branch in a Bitbucket repository from a target commit hash; the branch name must be unique, adhere to Bitbucket's naming conventions, and not include the 'refs/heads/' prefix.4 params

Creates a new branch in a Bitbucket repository from a target commit hash; the branch name must be unique, adhere to Bitbucket's naming conventions, and not include the 'refs/heads/' prefix.

Parameters* required
namestring
The name for the new branch (e.g., 'feature/new-login', 'bugfix/issue-123'). Important: Do not include the 'refs/heads/' prefix.
repo_slugstring
The slug or UUID of the repository where the branch will be created. This is usually the repository's name in URL-friendly format.
target_hashstring
The full commit hash (SHA1) from which the new branch will be created. This commit must exist in the repository.
workspacestring
The workspace ID or UUID that owns the repository. This can typically be found in the URL of your Bitbucket workspace.
BITBUCKET_CREATE_ISSUECreates a new issue in a Bitbucket repository, setting the authenticated user as reporter; ensures assignee (if provided) has repository access, and that any specified milestone, version, or component IDs exist.11 params

Creates a new issue in a Bitbucket repository, setting the authenticated user as reporter; ensures assignee (if provided) has repository access, and that any specified milestone, version, or component IDs exist.

Parameters* required
assigneestring
Bitbucket username of the assignee. The assignee must have repository access.
component_idinteger
Numeric ID of an existing component to associate with this issue.
contentstring
Detailed description for the new issue.
due_onstring
Due date for the issue in ISO 8601 format (e.g., 'YYYY-MM-DDTHH:mm:ssZ').
kindstring
Type of the issue (e.g., 'bug', 'enhancement', 'proposal', 'task').
milestone_idinteger
Numeric ID of an existing milestone to associate with this issue.
prioritystring
Priority level of the issue (e.g., 'trivial', 'minor', 'major', 'critical', 'blocker').
repo_slugstring
The slug of the Bitbucket repository.
titlestring
Title for the new issue.
version_idinteger
Numeric ID of an existing version to associate with this issue.
workspacestring
The ID or slug of the Bitbucket workspace.
BITBUCKET_CREATE_ISSUE_COMMENTAdds a new comment with markdown support to an existing Bitbucket issue.4 params

Adds a new comment with markdown support to an existing Bitbucket issue.

Parameters* required
contentstring
The raw text content for the comment. This content supports markdown formatting, which Bitbucket will then render.
issue_idstring
The unique identifier of the issue on which the comment will be posted.
repo_slugstring
The slug (URL-friendly version) of the repository name.
workspacestring
The ID or slug of the workspace or user that owns the repository.
BITBUCKET_CREATE_PULL_REQUESTCreates a new pull request in a specified Bitbucket repository, ensuring the source branch exists and is distinct from the (optional) destination branch.8 params

Creates a new pull request in a specified Bitbucket repository, ensuring the source branch exists and is distinct from the (optional) destination branch.

Parameters* required
close_source_branchboolean
If true, automatically closes the source branch upon pull request merge.default: false
descriptionstring
Detailed Markdown description of the pull request, outlining changes and purpose.
destination_branchstring
Name of the destination branch for merging; defaults to repository's main branch if unspecified.
repo_slugstring
Slug (URL-friendly name) of the repository for the pull request.
reviewersarray
List of Bitbucket user UUIDs to be added as reviewers.
source_branchstring
Name of the source branch with changes to be merged.
titlestring
Concise title summarizing the changes for the pull request.
workspacestring
Workspace ID (UUID or slug) of the repository owner.
BITBUCKET_CREATE_REPOSITORYCreates a new Bitbucket 'git' repository in a specified workspace, defaulting to the workspace's oldest project if `project_key` is not provided.9 params

Creates a new Bitbucket 'git' repository in a specified workspace, defaulting to the workspace's oldest project if `project_key` is not provided.

Parameters* required
descriptionstring
Description for the new repository.
fork_policystring
Forking policy for the repository, determining who can create forks.one of allow_forks · no_public_forks · no_forksdefault: allow_forks
has_issuesboolean
Enable the issue tracker (`True`), or disable it (`False`).default: true
has_wikiboolean
Enable the wiki (`True`), or disable it (`False`).default: true
is_privateboolean
Repository visibility: `True` for private, `False` for public.default: true
languagestring
Primary programming language (e.g., 'python', 'java') for categorization.
project_keystring
Key of the Bitbucket project for the repository; if omitted, it's placed in the workspace's oldest project.
repo_slugstring
URL-friendly slug for the new repository.
workspacestring
ID or slug of the Bitbucket workspace for the new repository.
BITBUCKET_CREATE_SNIPPET_COMMENTPosts a new top-level comment or a threaded reply to an existing comment on a specified Bitbucket snippet.4 params

Posts a new top-level comment or a threaded reply to an existing comment on a specified Bitbucket snippet.

Parameters* required
contentstring
Raw text content of the comment; Bitbucket will render any included markup (like Markdown).
encoded_idstring
Unique, encoded ID of the Bitbucket snippet to comment on (typically part of the snippet's URL).
parent_idinteger
ID of an existing comment to reply to, creating a threaded comment; if omitted, a top-level comment is created.
workspacestring
Workspace ID or slug (e.g., 'my_workspace_slug' or a UUID) for the Bitbucket workspace containing the snippet.
BITBUCKET_DELETE_ISSUEPermanently deletes a specific issue, identified by its `issue_id`, from the repository specified by `repo_slug` within the given `workspace`.3 params

Permanently deletes a specific issue, identified by its `issue_id`, from the repository specified by `repo_slug` within the given `workspace`.

Parameters* required
issue_idstring
The unique identifier of the issue to be deleted from the specified repository.
repo_slugstring
The slug of the repository. This is the repository's name, usually in lowercase and with hyphens instead of spaces.
workspacestring
The workspace ID (slug) or UUID of the Bitbucket workspace that owns the repository. This can be the workspace name or its universally unique identifier.
BITBUCKET_DELETE_REPOSITORYPermanently deletes a specified Bitbucket repository; this action is irreversible and does not affect forks.2 params

Permanently deletes a specified Bitbucket repository; this action is irreversible and does not affect forks.

Parameters* required
repo_slugstring
The slug (URL-friendly name) of the repository to be deleted. This identifies the repository within the workspace.
workspacestring
The ID or slug of the Bitbucket workspace that owns the repository. This can be a user's username or a team's slug.
BITBUCKET_GET_CURRENT_USERRetrieves the profile information (UUID, display name, links, creation date) for the currently authenticated Bitbucket user.

Retrieves the profile information (UUID, display name, links, creation date) for the currently authenticated Bitbucket user.

No parameter schema in public metadata yet.

BITBUCKET_GET_FILE_FROM_REPOSITORYRetrieves a specific file's content from a Bitbucket repository at a given commit (hash, branch, or tag), failing if the file path is invalid for that commit.4 params

Retrieves a specific file's content from a Bitbucket repository at a given commit (hash, branch, or tag), failing if the file path is invalid for that commit.

Parameters* required
commitstring
Commit hash, branch name (fetches latest), or tag for the file version.
pathstring
Full path to the file within the repository (e.g., 'src/main.py').
repo_slugstring
Repository slug or UUID (typically URL-formatted name).
workspacestring
Workspace ID or UUID (often username or team name) containing the repository.
BITBUCKET_GET_PULL_REQUESTGet a single pull request by ID with complete details.3 params

Get a single pull request by ID with complete details.

Parameters* required
pull_request_idinteger
The ID of the pull request to retrieve.
repo_slugstring
Repository slug (URL-friendly name).
workspacestring
Workspace ID or slug (URL-friendly name).
BITBUCKET_GET_SNIPPETRetrieves a specific Bitbucket snippet by its encoded ID from an existing workspace, returning its metadata and file structure.3 params

Retrieves a specific Bitbucket snippet by its encoded ID from an existing workspace, returning its metadata and file structure.

Parameters* required
accept_formatstring
The desired format for the response. Valid options are 'application/json', 'multipart/related', or 'multipart/form-data'. This may affect how snippet content or file data is presented.default: application/json
encoded_idstring
The unique identifier (encoded ID) of the snippet to be retrieved.
workspacestring
The workspace ID (slug) or the workspace UUID surrounded by curly braces, identifying the Bitbucket workspace.
BITBUCKET_LIST_PULL_REQUESTSLists pull requests in a specified, accessible Bitbucket repository, optionally filtering by state (OPEN, MERGED, DECLINED).5 params

Lists pull requests in a specified, accessible Bitbucket repository, optionally filtering by state (OPEN, MERGED, DECLINED).

Parameters* required
pageinteger
Page number for paginated results (starts from 1).
pageleninteger
Number of pull requests per page (1-100). Bitbucket default if not specified.
repo_slugstring
Repository slug (URL-friendly name).
statestring
Lifecycle state of a pull request.one of OPEN · MERGED · DECLINED
workspacestring
Workspace ID or slug (URL-friendly name).
BITBUCKET_LIST_REPOSITORIES_IN_WORKSPACELists repositories in a specified Bitbucket workspace, accessible to the authenticated user, with options to filter by role or query string, and sort results.4 params

Lists repositories in a specified Bitbucket workspace, accessible to the authenticated user, with options to filter by role or query string, and sort results.

Parameters* required
qstring
Query string using Bitbucket's REST API filtering syntax to filter repositories. For detailed syntax, refer to Bitbucket API documentation.
rolestring
Filters repositories by the authenticated user's role within each repository.
sortstring
Field for sorting repository results. Prefix with '-' for descending order. Common sortable fields: 'name', 'updated_on', 'created_on'.
workspacestring
The identifier of the Bitbucket workspace. This can be the workspace slug (e.g., 'my-workspace') or its UUID enclosed in curly braces (e.g., '{workspace-uuid}').
BITBUCKET_LIST_WORKSPACE_MEMBERSLists all members of a specified Bitbucket workspace; the workspace must exist.1 params

Lists all members of a specified Bitbucket workspace; the workspace must exist.

Parameters* required
workspacestring
The workspace ID (UUID) or slug from which to list members. The slug is the user-friendly, URL-safe identifier for the workspace.
BITBUCKET_LIST_WORKSPACESLists Bitbucket workspaces accessible to the authenticated user, optionally filtered and sorted.2 params

Lists Bitbucket workspaces accessible to the authenticated user, optionally filtered and sorted.

Parameters* required
qstring
Query string to filter workspaces by attributes, following Bitbucket's filtering syntax.
sortstring
Field to sort returned workspaces by; prefix with a hyphen (-) for descending order.
BITBUCKET_UPDATE_ISSUEUpdates an existing issue in a Bitbucket repository by modifying specified attributes; requires `workspace`, `repo_slug`, `issue_id`, and at least one attribute to update.12 params

Updates an existing issue in a Bitbucket repository by modifying specified attributes; requires `workspace`, `repo_slug`, `issue_id`, and at least one attribute to update.

Parameters* required
assignee_account_idstring
The Bitbucket account ID (UUID) of the user to assign the issue to. If omitted, the assignee remains unchanged.
componentstring
The name of the component to associate with the issue (e.g., 'API', 'Frontend'). If omitted, the component remains unchanged.
contentstring
The new content or description for the issue, in raw text format. If omitted, the content remains unchanged.
issue_idstring
The unique identifier (ID) of the issue to be updated.
kindstring
The updated kind (type) for the issue. If omitted, kind remains unchanged.
milestonestring
The name of the milestone to associate with the issue (e.g., 'Sprint 1', 'v1.0 Launch'). If omitted, the milestone remains unchanged.
prioritystring
The updated priority for the issue. If omitted, priority remains unchanged.
repo_slugstring
The slug or name of the repository (e.g., 'my-app-repo').
statestring
The updated state for the issue. If omitted, state remains unchanged.
titlestring
The new title for the issue. If omitted, the title remains unchanged.
versionstring
The name of the version affected by this issue (e.g., '1.0.0', '2.0-beta'). If omitted, the version remains unchanged.
workspacestring
The workspace ID or slug that owns the repository (e.g., 'my-company' or '{123e4567-e89b-12d3-a456-426614174000}').

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.json or BITBUCKET_TOOLS_CONFIG env 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):

# 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 is bitbucket-mcp-py but the command entry point is bitbucket-mcp. The --from flag tells uvx which package to install.

Alternative install methods
ModeCommandBest for
pip globalpip install bitbucket-mcp-pySimple, persistent install
Local devpip install -e . in project dirContributing to the project
DockerSee Docker sectionContainer-based workflows

2. Configure credentials

Set the following environment variables (or use a .env file — see Credentials):

VariableDescription
BITBUCKET_USERNAMEYour Bitbucket email
BITBUCKET_TOKENYour Bitbucket API token
BITBUCKET_WORKSPACEYour 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"
      }
    }
  }
}
OpenAI Codex

Option A — CLI (fastest):

codex mcp add bitbucket-mcp \
  --env BITBUCKET_USERNAME=your-email@example.com \
  --env BITBUCKET_TOKEN=your-api-token \
  --env BITBUCKET_WORKSPACE=your-workspace \
  -- uvx --from bitbucket-mcp-py bitbucket-mcp

Option B — TOML config (~/.codex/config.toml):

[mcp_servers.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" }
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"
      }
    }
  }
}
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"
      }
    }
  }
}

Available Tools

CategoryTools
Repositorieslist_repositories, get_repository, get_repository_tags
Pull Requestsget_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
Commentsget_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 PRget_pull_request_tasks, get_pull_request_task, create_pull_request_task, update_pull_request_task, delete_pull_request_task
Diff / Reviewget_pull_request_diff, get_pull_request_patch, get_pull_request_diffstat, get_pull_request_commits
PR Discoveryget_pull_requests_pending_review
Build / CIget_pull_request_statuses, get_commit_statuses
Pipelineslist_pipeline_runs, get_pipeline_run, get_pipeline_steps, get_pipeline_step_logs, run_pipeline, stop_pipeline
Pipelines Configget_pipeline_config, list_pipeline_variables, get_pipeline_variable, create_pipeline_variable, update_pipeline_variable, delete_pipeline_variable, list_pipeline_schedules, get_pipeline_schedule, list_pipeline_schedule_executions, create_pipeline_schedule, update_pipeline_schedule, delete_pipeline_schedule, list_pipeline_caches, delete_pipeline_cache
Reviewersget_effective_default_reviewers, suggest_pull_request_reviewers
Draft PRcreate_draft_pull_request, publish_draft_pull_request, convert_pull_request_to_draft
Batch Reviewsubmit_pull_request_batch_review
Review Summaryget_pull_request_review_summary
Issueslist_issues, get_issue, create_issue, update_issue, delete_issue, get_issue_comments, get_issue_comment, add_issue_comment, update_issue_comment, delete_issue_comment
Commitslist_commits, get_commit, get_commit_comments, get_commit_comment, add_commit_comment
Sourceget_file_content, list_directory
Deploymentslist_environments, get_environment, create_environment, delete_environment, list_deployments, get_deployment, list_deployment_variables, create_deployment_variable, update_deployment_variable, delete_deployment_variable
Branch Restrictionslist_branch_restrictions, get_branch_restriction, create_branch_restriction, update_branch_restriction, delete_branch_restriction
Workspacelist_workspace_members, get_workspace_member, list_workspace_permissions, list_repository_permissions

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 in configs/tools.json.

Governance scopes — Branch restriction read tools need the repository scope (repository:admin may be required depending on repo config); the write tools need repository:admin. Workspace member/permission tools need the account scope. The /members endpoint lists users without a per-user permission (use list_workspace_permissions for roles).

Deployments scopes — the read tools (list_environments, get_environment, list_deployments, get_deployment, list_deployment_variables) need the deployment scope; the write tools need deployment:write. Bitbucket has no server-side filter for deployments by environment (BCLOUD-18729) — filter on the environment field of list_deployments instead. There is no update_environment tool: Bitbucket exposes no PUT for environments (only POST .../changes for 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:

export BITBUCKET_TOOLS_CONFIG=/path/to/my-tools.json

Fallback chain (first match wins):

  1. BITBUCKET_TOOLS_CONFIG environment variable
  2. Built-in configs/tools.json

Fail-safe behaviour — If BITBUCKET_TOOLS_CONFIG is 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_diff accepts an optional path parameter 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")

Token tip — get_pipeline_step_logs returns only the trailing 100 KiB of a step log by default (raw logs run to several MB on long steps). The response carries a truncated flag; widen the window with the absolute byte range start / end, or pass max_bytes=null for the whole log. Pass a service container UUID as log_uuid to read that service's log instead of the build container's. This endpoint needs a real pipeline UUID — resolve it via get_pipeline_run if you only have a build number.

get_pipeline_step_logs(repo_slug, pipeline_uuid="{adab6a1f-...}", step_uuid="{84fc6465-...}")

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).

PromptArgumentsWhat it does
review_pull_requestrepo_slug, pull_request_idFull AI review: metadata → diffstat → diff → comments → tasks, then Summary / Risk / Quality / Security / Recommendation
debug_pipeline_failurerepo_slug, pipeline_uuidDiagnose a failed pipeline: run → steps → failed-step logs, then Root cause / Failed step / Error / Fix
summarize_repositoryrepo_slugRepo overview: info → recent commits → open PRs → CI → issues, then Purpose / Activity / Health / Contributors
onboard_reviewerrepo_slug, pull_request_idHelp a new reviewer: PR context → commits → diff → review history, then Context / Changes / Review-so-far / Focus

Prompts are enabled/disabled in configs/tools.json under the top-level prompts key (separate from tools).

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"]
    }
  }
}

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):

# Streamable HTTP on 0.0.0.0:8080
python -m src.main --transport http --host 0.0.0.0 --port 8080

Clients connect to http://<host>:<port>/mcp (e.g. http://localhost:8080/mcp).

--transport sse (legacy Server-Sent Events) is still accepted but deprecated — it emits a DeprecationWarning. 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.

python -m src.main --transport http --host 0.0.0.0 --port 8080 --stateless

⚠️ Single-tenant by default. Without --multi-tenant the 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:

curl http://localhost:8080/healthz    # {"status": "ok"}

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:

podman run -d --name bitbucket-mcp-http -p 8000:8000 --env-file .env bitbucket-mcp-py \
  python -m src.main --transport http --host 0.0.0.0 --port 8000 --stateless

Works identically with docker run. The image exposes port 8000.

Environment variableDefaultPurpose
BITBUCKET_ALLOWED_HOSTS(unset)Comma-separated Host allowlist. Enables DNS-rebinding protection when set.
BITBUCKET_ALLOWED_ORIGINS(unset)Comma-separated Origin allowlist.
BITBUCKET_MAX_PAGES_HARD_CAP10Max pages a single tool call may fetch in stateless mode. Beyond it the response carries truncated: true — never a silent cut.

The two allowlists must be set together: an empty Host allowlist rejects every request (421), and an empty Origin allowlist rejects every browser client (403). Setting only one is refused at startup rather than silently locking the server out.

export BITBUCKET_ALLOWED_HOSTS="mcp.example.com"
export BITBUCKET_ALLOWED_ORIGINS="https://app.example.com"

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.

BITBUCKET_RESOURCE_SERVER_URL=https://mcp.example.com \
  python -m src.main --transport http --host 0.0.0.0 --port 8080 --stateless --multi-tenant

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.

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=None means your workspace — resolved from the caller's memberships, never from BITBUCKET_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.audit logger with the tool, the account_id and the workspace. Never credentials.
  • Tighter defaults — tools flagged destructiveHint are refused unless explicitly enabled.
Environment variableDefaultPurpose
BITBUCKET_RESOURCE_SERVER_URL(required)This server's public URL — the OAuth resource identifier
BITBUCKET_OAUTH_ISSUER_URLhttps://bitbucket.orgAdvertised authorization server
BITBUCKET_CLIENT_CACHE_SIZE / _TTL128 / 900Bound on the per-identity client cache (LRU + TTL, seconds). TTL 0 builds a fresh client per request
BITBUCKET_TOKEN_CACHE_SIZE / _TTL256 / 300Bound on cached token verifications. The TTL is the revocation window — set it to 0 to verify every request
BITBUCKET_MULTITENANT_ALLOW_DESTRUCTIVE(off)Allow merge, decline, delete_*, stop_pipeline
BITBUCKET_MULTITENANT_READ_ONLY(off)Expose read-only tools only

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.

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
Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
inference shell
inference shell
create and run specialised agents in minutes
build now →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →
Categories
Developer Tools
Registryactive
Packagebitbucket-mcp-py
TransportSTDIO
UpdatedMar 20, 2026
View on GitHub

Related Developer Tools MCP Servers

View all →
theupsider avatar
Lsp Mcp

theupsider/lsp-mcp

Universal LSP MCP server
2
domdomegg avatar
Filesystem

domdomegg/filesystem-mcp

Read, create, and edit files.
1
davidweb3-ctrl avatar
Git Enhanced

io.github.davidweb3-ctrl/git-enhanced

Enhanced Git MCP Server - Code review, commit analysis, and branch management
1
dingdawg avatar
Dingdawg Code Review

io.github.dingdawg/dingdawg-code-review

AI code review — security, quality, performance. Learns your patterns. Receipted.
1
ofershap avatar
Github Gist

io.github.ofershap/github-gist

MCP server to create, read, update, list, and search GitHub Gists from your IDE
1
ozanmutlu avatar
Gitlab Docs

io.github.ozanmutlu/gitlab-docs

GitLab documentation search for AI assistants via Model Context Protocol (MCP)
1