Skip to main content
Glama
lawp09

bitbucket-mcp

by lawp09

Servidor MCP de Bitbucket (Python)

PyPI Python CI CodeQL Licencia: MIT

Conecta Claude Code, OpenAI Codex, Cursor, VS Code (GitHub Copilot) y cualquier asistente de IA compatible con MCP a tus repositorios de Bitbucket Cloud. Revisa solicitudes de extracción, monitorea pipelines y gestiona tu código — todo mediante lenguaje natural.

Funcionalidades

  • Más de 60 herramientas MCP — repositorios, solicitudes de extracción, comentarios, tareas, diferencias, pipelines (en tiempo de ejecución + configuración), estados de compilación, revisores, borradores de PR, revisión por lotes, sistema de seguimiento de incidencias, commits, exploración de archivos/código fuente

  • Anotaciones de herramientas MCP 2025 — cada herramienta anuncia readOnlyHint / destructiveHint / idempotentHint / openWorldHint + un título legible, por lo que los clientes (Claude Code, Cursor) incluyen automáticamente herramientas de solo lectura y advierten antes de operaciones destructivas

  • Respuestas ligeras — ruido de API eliminado para reducir el uso de tokens LLM

  • Configurable — activa/desactiva herramientas mediante configs/tools.json o la variable de entorno BITBUCKET_TOOLS_CONFIG

  • Credenciales seguras — variables de entorno o llavero del sistema

Related MCP server: Bitbucket MCP

Inicio rápido

1. Instalación

La forma recomendada de ejecutar el servidor es mediante uvx (instalación cero, entorno aislado):

# Always latest version
uvx --from bitbucket-mcp-py bitbucket-mcp

# Pin a specific version
uvx --from bitbucket-mcp-py==1.8.1 bitbucket-mcp

¿Por qué --from? El paquete en PyPI es bitbucket-mcp-py pero el punto de entrada del comando es bitbucket-mcp. La bandera --from le indica a uvx qué paquete instalar.

Modo

Comando

Ideal para

pip global

pip install bitbucket-mcp-py

Instalación simple y permanente

Desarrollo local

pip install -e . en el directorio del proyecto

Contribuir al proyecto

Docker

Consulta la sección de Docker

Flujos de trabajo basados en contenedores

2. Configurar credenciales

Define las siguientes variables de entorno (o usa un archivo .env — consulta Credenciales):

Variable

Descripción

BITBUCKET_USERNAME

Tu correo electrónico de Bitbucket

BITBUCKET_TOKEN

Tu token de API de Bitbucket

BITBUCKET_WORKSPACE

El slug de tu espacio de trabajo

Obtén tu token de API en: https://id.atlassian.com/manage-profile/security/api-tokens

⚠️ Usa un token con alcance, no uno global. Al crear el token, selecciona alcances específicos (ej. Repositories: Read, Pull requests: Read/Write). Los tokens globales sin alcances explícitos no funcionan con este servidor MCP.

3. Configurar tu asistente de IA

Claude Code (recomendado)

Opción A — CLI (la más rápida):

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

Opción B — Configuración JSON (~/.claude.json o .mcp.json del proyecto):

{
  "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

Opción A — CLI (la más rápida):

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

Opción B — Configuración TOML (~/.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

Agrega a ~/.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)

Agrega a .vscode/mcp.json (del espacio de trabajo) o ~/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"
      }
    }
  }
}

Herramientas disponibles

Categoría

Herramientas

Repositorios

list_repositories, get_repository, get_repository_tags

Solicitudes de extracción

get_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

Comentarios

get_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

Tareas de PR

get_pull_request_tasks, get_pull_request_task, create_pull_request_task, update_pull_request_task, delete_pull_request_task

Diff / Revisión

get_pull_request_diff, get_pull_request_patch, get_pull_request_diffstat, get_pull_request_commits

Descubrimiento de PR

get_pull_requests_pending_review

Compilación / CI

get_pull_request_statuses, get_commit_statuses

Pipelines

list_pipeline_runs, get_pipeline_run, get_pipeline_steps, get_pipeline_step_logs, run_pipeline, stop_pipeline

Configuración de Pipelines

get_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

Revisores

get_effective_default_reviewers, suggest_pull_request_reviewers

PR Borrador

create_draft_pull_request, publish_draft_pull_request, convert_pull_request_to_draft

Revisión por Lotes

submit_pull_request_batch_review

Resumen de Revisión

get_pull_request_review_summary

Incidencias

list_issues, get_issue, create_issue, update_issue, delete_issue, get_issue_comments, get_issue_comment, add_issue_comment, update_issue_comment, delete_issue_comment

Commits

list_commits, get_commit, get_commit_comments, get_commit_comment, add_commit_comment

Fuente

get_file_content, list_directory

Despliegues

list_environments, get_environment, create_environment, delete_environment, list_deployments, get_deployment, list_deployment_variables, create_deployment_variable, update_deployment_variable, delete_deployment_variable

Restricciones de Rama

list_branch_restrictions, get_branch_restriction, create_branch_restriction, update_branch_restriction, delete_branch_restriction

Espacio de Trabajo

list_workspace_members, get_workspace_member, list_workspace_permissions, list_repository_permissions

Deshabilitado por defecto: merge_pull_request (seguridad), stop_pipeline (seguridad), get_pull_request_patch (formato git am — no útil para revisión de IA), convert_pull_request_to_draft (no compatible con la API de Bitbucket), delete_issue (seguridad), delete_issue_comment (seguridad), add_commit_comment (operación de escritura), create_pipeline_variable / update_pipeline_variable / delete_pipeline_variable (operaciones de escritura), create_pipeline_schedule / update_pipeline_schedule / delete_pipeline_schedule (operaciones de escritura), delete_pipeline_cache (seguridad), create_environment / delete_environment / create_deployment_variable / update_deployment_variable / delete_deployment_variable (operaciones de escritura), create_branch_restriction / update_branch_restriction / delete_branch_restriction (operaciones de escritura). Habilitar en configs/tools.json.

Ámbitos de gobernanza — Las herramientas de lectura de restricciones de rama necesitan el ámbito repository (repository:admin puede ser necesario según la configuración del repositorio); las herramientas de escritura necesitan repository:admin. Las herramientas de miembros/permisos del espacio de trabajo necesitan el ámbito account. El endpoint /members enumera usuarios sin un permiso por usuario (use list_workspace_permissions para roles).

Ámbitos de despliegues — las herramientas de lectura (list_environments, get_environment, list_deployments, get_deployment, list_deployment_variables) necesitan el ámbito deployment; las herramientas de escritura necesitan deployment:write. Bitbucket no tiene un filtro del lado del servidor para despliegues por entorno (BCLOUD-18729) — filtre en el campo environment de list_deployments en su lugar. No existe la herramienta update_environment: Bitbucket no expone un PUT para entornos (solo POST .../changes para bloqueo).

Configuración de herramientas personalizadas

Por defecto, el servidor lee configs/tools.json incluido con el paquete. Puede apuntar a un archivo personalizado en tiempo de ejecución sin reconstruir:

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

Cadena de respaldo (la primera coincidencia gana):

  1. Variable de entorno BITBUCKET_TOOLS_CONFIG

  2. configs/tools.json incorporado

Comportamiento a prueba de fallos — Si BITBUCKET_TOOLS_CONFIG está configurada pero el archivo falta o contiene JSON inválido, el servidor lanza un error al inicio (fallo explícito en lugar de ignorar silenciosamente la anulación). Si el valor predeterminado incorporado falta, todas las herramientas están habilitadas.

Consejo de tokensget_pull_request_diff acepta un parámetro opcional path para filtrar el diff a un solo archivo, reduciendo el uso de tokens en ~95% en PRs grandes:

get_pull_request_diff(repo_slug, pull_request_id, path="src/services/myService.ts")

Consejo de tokensget_pipeline_step_logs devuelve solo los últimos 100 KiB del registro de un paso por defecto (los registros sin procesar llegan a varios MB en pasos largos). La respuesta incluye un indicador truncated; amplíe la ventana con el rango absoluto de bytes start / end, o pase max_bytes=null para todo el registro. Pase un UUID de contenedor de servicio como log_uuid para leer el registro de ese servicio en lugar del contenedor de compilación. Este endpoint necesita un UUID de pipeline real — resuélvalo a través de get_pipeline_run si solo tiene un número de compilación.

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

MCP Prompts

El servidor también expone MCP Prompts — plantillas parametrizadas que los clientes compatibles (Claude Code, Cursor, ...) muestran como comandos de barra. En lugar de recordar nombres de herramientas, invoca un prompt y el asistente orquesta las herramientas adecuadas para usted. Aparecen en el selector de prompts del cliente (prompts/list).

Prompt

Argumentos

Qué hace

review_pull_request

repo_slug, pull_request_id

Revisión completa de IA: metadatos → diffstat → diff → comentarios → tareas, luego Resumen / Riesgo / Calidad / Seguridad / Recomendación

debug_pipeline_failure

repo_slug, pipeline_uuid

Diagnosticar una canalización fallida: ejecución → pasos → logs del paso fallido, luego Causa raíz / Paso fallido / Error / Solución

summarize_repository

repo_slug

Resumen del repositorio: información → commits recientes → PRs abiertas → CI → incidencias, luego Propósito / Actividad / Salud / Contribuidores

onboard_reviewer

repo_slug, pull_request_id

Ayudar a un revisor nuevo: contexto de PR → commits → diff → historial de revisión, luego Contexto / Cambios / Revisión hasta ahora / Enfoque

Los prompts se habilitan/deshabilitan en configs/tools.json bajo la clave prompts de nivel superior (separada de tools).

Credenciales

Opción 1: archivo .env (recomendada)

cp .env.example .env
# Edit .env with your credentials

Opción 2: llavero del sistema (más seguro)

pip install 'bitbucket-mcp-py[keyring]'
python3 -c "import keyring; keyring.set_password('bitbucket-mcp', 'bitbucket_token', 'YOUR_TOKEN')"

Docker (Alternativa)

Si prefieres ejecutar el servidor en un contenedor:

docker build -t bitbucket-mcp-py .
docker run -d --name bitbucket-mcp --env-file .env bitbucket-mcp-py

Luego configura tu asistente de IA para usar docker exec:

{
  "mcpServers": {
    "bitbucket-mcp": {
      "command": "docker",
      "args": ["exec", "-i", "bitbucket-mcp", "python", "-m", "src.main", "--transport", "stdio"]
    }
  }
}

Transportes

El servidor habla stdio por defecto (el transporte estándar para clientes MCP locales). Para un despliegue en red también soporta Streamable HTTP (especificación MCP 2025-03-26):

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

Los clientes se conectan a http://<host>:<port>/mcp (ej. http://localhost:8080/mcp).

--transport sse (Server-Sent Events heredado) aún se acepta pero está obsoleto — emite un DeprecationWarning. Prefiere --transport http.

HTTP sin estado (escalado horizontal / serverless)

--stateless ejecuta el transporte Streamable HTTP sin sesiones del lado del servidor: sin Mcp-Session-Id, un transporte nuevo por cada petición HTTP. Cualquier instancia detrás de un balanceador de carga puede atender cualquier petición — no se requieren sesiones persistentes.

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

⚠️ De un solo inquilino por defecto. Sin --multi-tenant el servidor atiende con su propio token de Bitbucket a nivel de proceso a todos los llamantes. Despliégalo en una red privada o detrás de un proxy inverso autenticado — o usa el modo multiinquilino, donde cada llamante trae sus propias credenciales.

--stateless requiere --transport http (se rechaza en stdio y en el sse heredado, cuyas aplicaciones ignoran el ajuste). También fuerza una respuesta JSON única en lugar de un flujo SSE, porque los entornos edge/serverless no pueden mantener abierta una respuesta en streaming — actualmente no hay forma de combinar stateless con streaming.

En ambos transportes HTTP se expone un endpoint de actividad para balanceadores de carga:

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

En un contenedor — el CMD por defecto de la imagen lo mantiene inactivo para uso mediante exec sobre stdio, por lo que el modo servidor se inicia sobrescribiendo el comando:

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

Funciona igual con docker run. La imagen expone el puerto 8000.

Variable de entorno

Por defecto

Propósito

BITBUCKET_ALLOWED_HOSTS

(sin valor)

Lista de permitidos de Host separada por comas. Al establecerla, activa la protección contra rebote de DNS.

BITBUCKET_ALLOWED_ORIGINS

(sin valor)

Lista de permitidos de Origin separada por comas.

BITBUCKET_MAX_PAGES_HARD_CAP

10

Máximo de páginas que una sola llamada a herramienta puede obtener en modo stateless. Más allá, la respuesta lleva truncated: true — nunca un corte silencioso.

Las dos listas de permitidos deben configurarse juntas: una lista de Host vacía rechaza toda petición (421), y una lista de Origin vacía rechaza todo cliente de navegador (403). Configurar solo una provoca un rechazo al inicio en lugar de bloquear silenciosamente el servidor.

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

Sin ninguna de las dos listas, no se aplica protección contra rebote de DNS — adecuado para un servidor accesible a través de una red privada o un proxy de confianza. Establécelas tan pronto como el servidor esté expuesto en un nombre de host real.

HTTP multiinquilino (credenciales por petición)

Por defecto, un despliegue HTTP es de un solo inquilino: todos los llamantes actúan con el token de Bitbucket a nivel de proceso. --multi-tenant cambia eso — cada petición lleva el token de acceso OAuth de Bitbucket del propio llamante como Authorization: Bearer, y se ejecuta bajo esa identidad. El servidor no posee ninguna credencial de Bitbucket propia.

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

El token se verifica contra GET /2.0/user, que devuelve el account_id y el espacio de trabajo por defecto del llamante; el mismo token se reutiliza para las llamadas API posteriores, por lo que nunca se almacena ni mapea ninguna credencial. Las peticiones no autenticadas reciben un 401 con un desafío WWW-Authenticate que apunta a /.well-known/oauth-protected-resource.

Lo que esto aporta:

  • Aislamiento — un cliente de Bitbucket por cada (identity, workspace); dos llamantes nunca comparten uno, y no hay token de proceso al que recurrir.

  • workspace=None significa tu espacio de trabajo — se resuelve a partir de las membresías del llamante, nunca de BITBUCKET_WORKSPACE. Con cero o varias membresías no hay valor por defecto y las llamadas deben nombrar su espacio de trabajo.

  • Registro de auditoría — cada llamada se registra en el logger bitbucket_mcp.audit con la herramienta, el account_id y el espacio de trabajo. Nunca las credenciales.

  • Valores predeterminados más estrictos — las herramientas marcadas con destructiveHint se rechazan a menos que se habiliten explícitamente.

Variable de entorno

Por defecto

Propósito

BITBUCKET_RESOURCE_SERVER_URL

(obligatorio)

URL pública de este servidor — el identificador de recurso OAuth

BITBUCKET_OAUTH_ISSUER_URL

https://bitbucket.org

Servidor de autorización anunciado

BITBUCKET_CLIENT_CACHE_SIZE / _TTL

128 / 900

Límite de la caché de clientes por identidad (LRU + TTL, en segundos). TTL 0 crea un cliente nuevo por petición

BITBUCKET_TOKEN_CACHE_SIZE / _TTL

256 / 300

Límite de verificaciones de token en caché. El TTL es la ventana de revocación — establécelo a 0 para verificar cada petición

BITBUCKET_MULTITENANT_ALLOW_DESTRUCTIVE

(desactivado)

Permitir merge, decline, delete_*, stop_pipeline

BITBUCKET_MULTITENANT_READ_ONLY

(desactivado)

Exponer solo herramientas de solo lectura

No compatible en este modo: Tokens de acceso a repositorio/espacio de trabajo de Bitbucket — no están vinculados a una cuenta de usuario, por lo que no se puede derivar una identidad. Usa HTTP de un solo inquilino para eso. Los tokens Bearer requieren TLS: termina HTTPS delante del servidor.

stdio no se ve afectado — sigue siendo de un solo usuario con variables de entorno, exactamente como se documentó anteriormente.

Consulta docs/deployment-modes.md para la matriz completa de los tres modos de despliegue y el modelo de amenazas de cada uno.

Desarrollo

# 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

Requisitos

  • Python 3.12+

  • Token de API de Bitbucket

Licencia

MIT

Referencias

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
6dRelease cycle
26Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to interact with Bitbucket Cloud repositories, allowing users to manage pull requests, comments, tasks, and branches through natural language commands.
    4,138
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to programmatically manage Bitbucket Cloud resources, including pull requests, repositories, and branches, automating code review workflows.
    12
    MIT

View all related MCP servers

Related MCP Connectors

  • Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

  • Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.

  • Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lawp09/bitbucket-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server