Back to Browse

Bitbucket MCP Server

Developer ToolsUse Caution4.8MCP RegistryLocal
Free

Server data from the Official MCP Registry

Provider-agnostic, AI-review-first MCP server for Bitbucket Cloud.

About

Provider-agnostic, AI-review-first MCP server for Bitbucket Cloud.

Security Report

4.8
Use Caution4.8High Risk

Well-architected MCP server with strong separation of concerns, proper authentication handling, and appropriate permission scoping. Code quality is high with good error handling and masking of sensitive data. Minor findings around input validation and logging practices do not significantly impact security posture. Supply chain analysis found 11 known vulnerabilities in dependencies (2 critical, 1 high severity). Package verification found 1 issue.

7 files analyzed · 17 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

env_vars

Check that this permission is expected for this type of plugin.

HTTP Network Access

Connects to external APIs or services over the internet.

File System Read

Reads files on your machine. Normal for tools that analyze or process local data.

File System Write

Writes or modifies files on your machine. Check that this is expected for the tool.

process_spawn

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

Bitbucket API token (ATATT), app password, or OAuth access tokenRequired

Environment variable: BITBUCKET_ACCESS_TOKEN

Atlassian account email (required with API tokens)Optional

Environment variable: BITBUCKET_EMAIL

Default Bitbucket workspace when a tool omits workspaceOptional

Environment variable: BITBUCKET_DEFAULT_WORKSPACE

LLM backend for analyze_pull_request (openai, anthropic, gemini, bedrock)Optional

Environment variable: LLM_PROVIDER

OpenAI API key when LLM_PROVIDER is openaiRequired

Environment variable: OPENAI_API_KEY

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-droplinkperformance-bitbucket-mcp-server": {
      "env": {
        "LLM_PROVIDER": "your-llm-provider-here",
        "OPENAI_API_KEY": "your-openai-api-key-here",
        "BITBUCKET_EMAIL": "your-bitbucket-email-here",
        "BITBUCKET_ACCESS_TOKEN": "your-bitbucket-access-token-here",
        "BITBUCKET_DEFAULT_WORKSPACE": "your-bitbucket-default-workspace-here"
      },
      "args": [
        "-y",
        "@droplinkperformance/bitbucket-mcp-server"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

@droplinkperformance/bitbucket-mcp-server

Provider-agnostic, AI-review-first Model Context Protocol (MCP) server for Bitbucket Cloud.

The primary value of this server is AI-powered code review and pull request analysis, not CRUD against the Bitbucket API. Every major dependency (SCM access, cache, token storage, rate limiting, LLM, events) is hidden behind a provider-agnostic interface so the same business logic can later target GitHub / GitLab / Azure DevOps and OpenAI / Anthropic / Gemini / Bedrock without changes to use-cases, agents, or domain contracts.

Status: Phase 1. See Roadmap.

Features (Phase 1)

  • Dual transports: stdio (Cursor / Claude Desktop) and Streamable HTTP (Node http, for remote/production).
  • Auto-discovered tools via a ToolRegistry — no manual registration.
  • Explicit BitbucketContext (workspace + optional repository) on every tool — multi-workspace ready.
  • Resilient BitbucketClient: auth injection, auto-pagination, retry/backoff, rate-limit handling, caching, secret masking.
  • Two auth strategies: OAuth 2.0 (Authorization Code, with rotating refresh-token persistence) and Bearer token.
  • AI code review (analyze_pull_request) backed by a CodeReviewAgent that chunks large PRs and returns a standard ReviewResult.
  • Pluggable LLM provider (OpenAI / Anthropic / Gemini / Bedrock), cache (memory / Redis), and token store (file / memory / Redis).

Tools

ToolDescription
get_current_userAuthenticated user.
list_pull_requestsList PRs (filter by state/query).
get_pull_requestFetch a PR by id.
create_pull_requestOpen a PR.
get_pull_request_diffRaw unified diff.
get_pull_request_filesChanged files + line stats.
get_pull_request_commentsPR comments.
comment_pull_requestAdd a (optionally inline) comment.
analyze_pull_requestAI review returning a standard ReviewResult.

All tool inputs accept workspace (optional if BITBUCKET_DEFAULT_WORKSPACE is set) and, where applicable, repository.

Architecture

src/
  index.ts            entry: chooses transport
  container.ts        composition root (the only place wiring concretes)
  mcp/                McpServer + ToolRegistry (auto-discovery) + transports
  tools/              thin MCP adapters (*.tool.ts) -> call exactly one use-case
  application/        use-cases (CQRS-ish: command|query) with Input/Output DTOs
  agents/             autonomous workflows implementing Agent<TInput,TOutput>
  domain/             provider-agnostic types, repository contracts, ReviewResult
  repositories/bitbucket/  Bitbucket implementations of the contracts
  clients/bitbucket/  resilient REST client
  auth/               AuthProvider (+ token/oauth) and TokenStore implementations
  cache/              CacheProvider (+ memory/redis)
  ratelimit/          RateLimitStrategy (+ bitbucket)
  llm/                LlmProvider (+ openai/anthropic/gemini/bedrock)
  events/             EventBus (+ in-memory)
  services/           reusable services (masking, chunking)
  telemetry/          OpenTelemetry bootstrap + metrics
  infrastructure/     config, logger, http, attachments
  shared/             errors, result envelope, http-status, BitbucketContext

Flow: tool -> use-case -> (agent | repository contract) -> repositories/bitbucket -> BitbucketClient. Agents may also use the LlmProvider and EventBus. Tools never contain business logic.

Requirements

  • Node.js 23+

Install

Published as @droplinkperformance/bitbucket-mcp-server.

npx -y @droplinkperformance/bitbucket-mcp-server

From source:

npm install
npm run build

Release

Merges to main run .github/workflows/release.yml: tests, build, then semantic-release. Version and npm publish happen only when the merge includes Conventional Commits:

CommitBump
fix:patch
feat:minor
BREAKING CHANGE / feat!:major

Other messages skip publish. The GitHub secret NPM_TOKEN (npm Automation token for the droplinkperformance org) is required.

After a successful npm release, the same workflow publishes metadata to the MCP Registry as io.github.droplinkperformance/bitbucket-mcp-server (OIDC, no extra secret). github.com/mcp syncs from that registry; if the server does not appear, email partnerships@github.com.

To stay on 0.x for the first release, tag the current commit (git tag v0.1.0 && git push origin v0.1.0) before the first conventional merge; otherwise semantic-release starts at 1.0.0.

Configuration

Copy .env.example to .env and fill in values. Load it with Node's built-in flag:

node --env-file=.env dist/index.js

Key variables:

VariableDefaultNotes
MCP_TRANSPORTstdiostdio or http.
HTTP_HOST / HTTP_PORT0.0.0.0 / 3000HTTP transport bind.
BITBUCKET_DEFAULT_WORKSPACEFallback when a tool omits workspace.
BITBUCKET_ACCESS_TOKENAPI token (ATATT…), app password, or OAuth access token
BITBUCKET_EMAILRequired with API tokens (ATATT…) — your Atlassian account email
BITBUCKET_CLIENT_ID / BITBUCKET_CLIENT_SECRETRequired for OAuth (when no access token).
BITBUCKET_REFRESH_TOKENOptional seed for headless OAuth.
TOKEN_STOREfilefile | memory | redis.
CACHE_PROVIDERmemorymemory | redis.
LLM_PROVIDERopenaiopenai | anthropic | gemini | bedrock.
MAX_FILES_PER_CHUNK / MAX_DIFF_LINES_PER_CHUNK50 / 5000Large-PR chunking thresholds.
OTEL_ENABLEDfalseNo-op metrics unless enabled.

Authentication

Bearer (OAuth access token): set BITBUCKET_ACCESS_TOKEN only (non-ATATT tokens).

API token (recommended, ATATT…): set BITBUCKET_ACCESS_TOKEN and BITBUCKET_EMAIL (your Atlassian account email from Bitbucket → Personal settings → Email aliases). API tokens use HTTP Basic auth, not Bearer.

App password (legacy, until June 2026): set BITBUCKET_ACCESS_TOKEN and BITBUCKET_USERNAME (your Bitbucket username).

OAuth 2.0 (Authorization Code): set BITBUCKET_CLIENT_ID / BITBUCKET_CLIENT_SECRET. Tokens are persisted by the configured TOKEN_STORE; Bitbucket rotates refresh tokens, and the server persists the new one on every refresh. For headless boot, provide a previously obtained BITBUCKET_REFRESH_TOKEN.

Bitbucket OAuth endpoints used: authorize https://bitbucket.org/site/oauth2/authorize, token https://bitbucket.org/site/oauth2/access_token. The authorize URL can be built from OAuthProvider.buildAuthorizeUrl() and the returned ?code= exchanged via OAuthProvider.loginWithCode(code).

LLM provider

Set LLM_PROVIDER and the matching key:

LLM_PROVIDER=openai      # OPENAI_API_KEY
LLM_PROVIDER=anthropic   # ANTHROPIC_API_KEY
LLM_PROVIDER=gemini      # GEMINI_API_KEY
LLM_PROVIDER=bedrock     # AWS creds + BEDROCK_MODEL_ID (needs @aws-sdk/client-bedrock-runtime)

ioredis (Redis providers) and @aws-sdk/client-bedrock-runtime (Bedrock) are optional and loaded lazily — only needed when selected.

Running

stdio

MCP_TRANSPORT=stdio node --env-file=.env dist/index.js

Streamable HTTP

MCP_TRANSPORT=http HTTP_PORT=3000 node --env-file=.env dist/index.js
# health:   GET  http://localhost:3000/health
# endpoint: POST http://localhost:3000/mcp

MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js

Cursor

~/.cursor/mcp.json (or project .cursor/mcp.json):

{
  "mcpServers": {
    "bitbucket": {
      "command": "npx",
      "args": ["-y", "@droplinkperformance/bitbucket-mcp-server"],
      "env": {
        "MCP_TRANSPORT": "stdio",
        "BITBUCKET_ACCESS_TOKEN": "ATATT-your-api-token",
        "BITBUCKET_EMAIL": "you@company.com",
        "BITBUCKET_DEFAULT_WORKSPACE": "your-workspace",
        "LLM_PROVIDER": "openai",
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

Claude Desktop

claude_desktop_config.json:

{
  "mcpServers": {
    "bitbucket": {
      "command": "npx",
      "args": ["-y", "@droplinkperformance/bitbucket-mcp-server"],
      "env": {
        "BITBUCKET_ACCESS_TOKEN": "your-token",
        "BITBUCKET_DEFAULT_WORKSPACE": "your-workspace",
        "LLM_PROVIDER": "anthropic",
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

Development

npm run dev          # tsx watch (stdio)
npm run typecheck
npm run lint
npm test
npm run test:coverage

Roadmap

  • Phase 1 (this release): auth, abstractions, BitbucketClient, tool auto-discovery, PR tools, analyze_pull_request.
  • Phase 2: Pipelines + full-text paginated logs, pipeline-investigator agent, auto_review_pull_request (dry-run / publish inline comments).
  • Phase 3: Remaining CRUD — repositories, commits, branches, tags, issues, workspaces, members, search.
  • Phase 4: analyze_dotnet_pull_request (dotnet-review agent), advanced agents, automation workflows.
  • Phase 5: Docker, Compose, Helm, production deploy guide.

License

MIT

Reviews

No reviews yet

Be the first to review this server!