mcpField
M
MCP Server for Bitbucket API

MCP Server for Bitbucket API

Local
github.com/JaviMalignoVersion Control2Updated 5d ago

About MCP Server for Bitbucket API

MCP Server for Bitbucket API connects MCP-compatible clients to Bitbucket repository and development operations. Available in TypeScript and Python, it covers pull requests, pipelines, source browsing, and related workspace data.

Key features

  1. 01Manage repositories, projects, branches, and tags
  2. 02Create and review pull requests
  3. 03Trigger and inspect pipelines
  4. 04Browse source files without cloning
  5. 05Manage permissions, webhooks, and deployments
  6. 06Provide reusable prompts and workspace resources

Use cases

  1. 01Review pull requests and compare changes
  2. 02Run or troubleshoot Bitbucket Pipelines
  3. 03Inspect repository files and workspace status
  4. 04Manage repository access and CI variables

MCP support

It exposes Bitbucket operations through MCP tools, along with reusable prompts and browsable workspace resources. It supports stdio use and a remote deployment mode with optional OAuth protection.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Bitbucket MCP Server

CI/CD PyPI version npm version License: MIT

MCP server for Bitbucket API operations. Works with Claude Code, Claude Desktop, Cursor, and any MCP-compatible client.

Language Versions

This repository contains both TypeScript and Python implementations:

VersionDirectoryStatusInstallation
TypeScript/typescript✅ Recommended (Smithery)npm install -g mcp-server-bitbucket
Python/python✅ Stablepipx install mcp-server-bitbucket

Note: The TypeScript version is used for Smithery deployments. Both versions provide identical functionality.

Use patched Node.js 22.23.4 or 24.22.1 for TypeScript, or Python 3.11+ for Python. See the security update for HTTP request bounds and reproducible image builds.

Features

  • Repositories: get, create, delete, list, update (move to project, rename)
  • Pull Requests: create, get, list, merge, approve, decline, request changes, comments, diff
  • Pipelines: trigger, get status, list, view logs, stop
  • Branches: list, get
  • Projects: list, get
  • Commits: list, get details, compare/diff between branches
  • Commit Statuses: get build statuses, create status (CI/CD integration)
  • Deployments: list environments, get environment details, deployment history
  • Webhooks: list, create, get, delete
  • Tags: list, create, delete
  • Branch Restrictions: list, create, delete branch protection rules
  • Source Browsing: read files, list directories without cloning
  • Repository Permissions: manage user and group permissions
  • Pipeline Variables: manage CI/CD environment variables
  • MCP Prompts: reusable workflow templates (code review, release notes, etc.)
  • MCP Resources: browsable workspace data

Quick Start

TypeScript (Recommended for Smithery)
# Install globally
npm install -g mcp-server-bitbucket

# Or run directly with npx
npx mcp-server-bitbucket
Python
# Install with pipx
pipx install mcp-server-bitbucket

# Configure Claude Code
claude mcp add bitbucket -s user \
  -e BITBUCKET_WORKSPACE=your-workspace \
  -e [email protected] \
  -e BITBUCKET_API_TOKEN=your-api-token \
  -- mcp-server-bitbucket

Full Installation Guide - Includes API token creation, permissions setup, and troubleshooting.

Hosted

If you'd rather not run the server yourself, a hosted deployment is available on Fronteir AI.

Configuration

Environment Variables
VariableRequiredDescription
BITBUCKET_WORKSPACE✅Bitbucket workspace slug
BITBUCKET_EMAIL✅ (basic auth)Account email for Basic Auth
BITBUCKET_API_TOKEN✅Atlassian API token (Basic auth)
BITBUCKET_OAUTH_TOKENAccess token sent as Authorization: Bearer
BITBUCKET_AUTH_TYPEForce auth mode: basic or bearer (auto-detected)
API_TIMEOUTRequest timeout in seconds (default: 30)
MAX_RETRIESMax retry attempts for rate limiting (default: 3)
Authentication modes

Bitbucket Cloud has two credential families, and they do not share an auth scheme:

CredentialHeaderConfiguration
Atlassian API token (ATATT...), tied to a personal accountAuthorization: Basic base64(email:token)BITBUCKET_EMAIL + BITBUCKET_API_TOKEN
Workspace / project / repository access token (ATCTT...), owned by the workspaceAuthorization: Bearer <token>BITBUCKET_OAUTH_TOKEN

Access tokens return 401 with Basic auth, so the server picks the mode automatically:

  1. BITBUCKET_AUTH_TYPE, when set, always wins.
  2. Otherwise bearer is used when BITBUCKET_OAUTH_TOKEN is set, or when no BITBUCKET_EMAIL is configured.
  3. Otherwise basic is used (the default for personal API tokens).

Bearer example — a company-owned workspace access token with no personal account involved:

claude mcp add bitbucket -s user \
  -e BITBUCKET_WORKSPACE=your-workspace \
  -e BITBUCKET_OAUTH_TOKEN=your-workspace-access-token \
  -- npx mcp-server-bitbucket
Protecting the remote server (OAuth)

The stdio server runs on your machine with your own credential, so it needs no protection. A remote deployment is different: it holds one shared credential and serves whoever reaches it, so /mcp can be gated on a bearer token issued by an external authorization server (Microsoft Entra ID, Okta, Auth0…).

VariableDescription
MCP_OAUTH_ISSUERToken issuer, e.g. https://login.microsoftonline.com/<tenant>/v2.0
MCP_OAUTH_AUDIENCEExpected aud claim, e.g. api://bitbucket-mcp
MCP_OAUTH_JWKS_URISigning keys (derived from the issuer when omitted)
MCP_OAUTH_REQUIRED_SCOPEScope the token must carry, e.g. mcp.access
MCP_PUBLIC_URLPublic URL of this server, advertised as the resource

Protection is off unless both MCP_OAUTH_ISSUER and MCP_OAUTH_AUDIENCE are set, so existing deployments are unaffected. With them set, the server:

  • answers unauthenticated /mcp requests with 401 and a WWW-Authenticate header pointing at /.well-known/oauth-protected-resource, which is what makes an MCP client start the OAuth flow;
  • serves that metadata document (RFC 9728) naming the authorization server;
  • verifies every request's JWT — signature against the issuer's JWKS, plus iss, aud and expiry — and returns 403 insufficient_scope when a valid token lacks the required scope;
  • leaves /health open, so platform probes keep working.

Note what this does and does not do: it controls who may use the server. Calls still reach Bitbucket under the server's own credential, so it does not attribute actions to individual users.

Claude Code CLI
# TypeScript version
claude mcp add bitbucket -s user \
  -e BITBUCKET_WORKSPACE=your-workspace \
  -e [email protected] \
  -e BITBUCKET_API_TOKEN=your-api-token \
  -- npx mcp-server-bitbucket

# Python version
claude mcp add bitbucket -s user \
  -e BITBUCKET_WORKSPACE=your-workspace \
  -e [email protected] \
  -e BITBUCKET_API_TOKEN=your-api-token \
  -- mcp-server-bitbucket
Cursor IDE

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "bitbucket": {
      "command": "npx",
      "args": ["mcp-server-bitbucket"],
      "env": {
        "BITBUCKET_WORKSPACE": "your-workspace",
        "BITBUCKET_EMAIL": "[email protected]",
        "BITBUCKET_API_TOKEN": "your-api-token"
      }
    }
  }
}

Available Tools (58 total)

Repositories
ToolDescription
list_repositoriesList and search repositories
get_repositoryGet repository details
create_repositoryCreate a new repository
delete_repositoryDelete a repository
update_repositoryUpdate repo settings
Pull Requests
ToolDescription
list_pull_requestsList PRs
get_pull_requestGet PR details
create_pull_requestCreate a new PR
merge_pull_requestMerge a PR
approve_prApprove a PR
unapprove_prRemove approval
request_changes_prRequest changes
decline_prDecline a PR
list_pr_commentsList comments
add_pr_commentAdd comment
get_pr_diffGet the diff
Pipelines
ToolDescription
list_pipelinesList recent runs
get_pipelineGet status
get_pipeline_logsView logs
trigger_pipelineTrigger a run (supports custom pipelines and commit triggers)
stop_pipelineStop pipeline
list_pipeline_variablesList variables
get_pipeline_variableGet variable
create_pipeline_variableCreate variable
update_pipeline_variableUpdate variable
delete_pipeline_variableDelete variable
trigger_pipeline Parameters
ParameterTypeDescription
repo_slugstringRepository slug (required)
branchstringBranch to run on (default: main). Mutually exclusive with commit
commitstringCommit hash to run on. Mutually exclusive with branch
custom_pipelinestringName from custom: section in bitbucket-pipelines.yml
variablesarrayVariables as [{key, value, secured?}]

Examples:

# Default pipeline on main
trigger_pipeline(repo_slug="my-repo")

# Custom pipeline
trigger_pipeline(repo_slug="my-repo", custom_pipeline="deploy-staging")

# Custom pipeline on specific commit with variables
trigger_pipeline(
    repo_slug="my-repo",
    commit="abc123def",
    custom_pipeline="deploy-prod",
    variables=[
        {"key": "ENV", "value": "production"},
        {"key": "SECRET", "value": "xxx", "secured": True}
    ]
)
Branches, Commits, Tags
ToolDescription
list_branchesList branches
get_branchGet branch details
list_commitsList commits
get_commitGet commit details
compare_commitsCompare branches
get_commit_statusesGet build statuses
create_commit_statusReport CI status
list_tagsList tags
create_tagCreate a tag
delete_tagDelete a tag
And more...
  • Deployments: list_environments, get_environment, list_deployment_history
  • Webhooks: list_webhooks, create_webhook, get_webhook, delete_webhook
  • Branch Restrictions: list_branch_restrictions, create_branch_restriction, delete_branch_restriction
  • Source Browsing: get_file_content, list_directory
  • Permissions: User and group permission management (8 tools)
  • Projects: list_projects, get_project

MCP Prompts

Reusable workflow templates:

PromptDescription
code_reviewComprehensive PR code review
release_notesGenerate changelog between versions
pipeline_debugDebug failed CI/CD pipelines
repo_summaryComplete repository status overview

MCP Resources

Browsable workspace data:

Resource URIDescription
bitbucket://repositoriesList all repos
bitbucket://repositories/{repo}Repository details
bitbucket://repositories/{repo}/branchesBranch list
bitbucket://repositories/{repo}/pull-requestsOpen PRs
bitbucket://projectsList all projects

Development

TypeScript
cd typescript
npm install
npm run build
npm run dev  # Watch mode
Python
cd python
uv sync
uv run python -m src.server

Creating a Bitbucket API Token

  1. Go to your repository in Bitbucket
  2. Navigate to Repository settings > Access tokens
  3. Click Create Repository Access Token
  4. Select permissions:
    • Repository: Read, Write, Admin, Delete
    • Pull requests: Read, Write
    • Pipelines: Read, Write
  5. Copy the token immediately

Using this at work

If your team is running this against a company Bitbucket, I'd like to know. It decides what gets built next, and issues that come from a real deployment get looked at first.

Two kinds of work I take on around this:

  • An MCP server for an internal system that doesn't have one. Same shape as this one, against your own API.
  • Help getting an MCP deployment past a security review — scopes, token handling, self-hosting the transport.

Open an issue, or write to [email protected].

Author

Built and maintained by Javier Aguilar — AI engineer working on agent systems and MCP integrations. There's a write-up of how and why this server was built here.

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.