bitbucket-mcp-server
Provides tools for managing Bitbucket Cloud pull requests, including listing, creating, updating, approving, commenting, merging, and declining pull requests.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bitbucket-mcp-serverlist open pull requests in my workspace"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bitbucket MCP Server
Servidor MCP (Model Context Protocol) para Bitbucket Cloud que expone operaciones de Pull Requests como herramientas para Claude y otros clientes MCP.
Requisitos previos
Node.js >= 18
Una cuenta de Bitbucket Cloud
Un API Token de Bitbucket con permisos de lectura/escritura en Pull Requests
Crear un API Token
Nota: Los App Passwords de Bitbucket estan deprecados. Desde septiembre 2025 no se pueden crear nuevos y en junio 2026 dejaran de funcionar. Usar API Tokens en su lugar.
Ir a Atlassian API Tokens
Click en Create token
Asignar permisos: Pull requests: Read & Write, Repositories: Read
Copiar el token generado
Related MCP server: bitbucket-mcp-server
Instalacion
git clone <repo-url>
cd bitbucket-mcp-server
npm install
npm run buildConfiguracion
Copiar el archivo de ejemplo y completar con tus credenciales:
cp .env.example .envBITBUCKET_USERNAME=tu-email@ejemplo.com
BITBUCKET_API_TOKEN=tu-api-token
BITBUCKET_WORKSPACE=tu-workspaceVariables de entorno
Variable | Requerida | Default | Descripcion |
| Si | - | Email o username de Bitbucket |
| Si | - | API Token de Bitbucket |
| No | - | Workspace por defecto (evita pasarlo en cada llamada) |
| No |
| Habilita operaciones destructivas (merge, decline) |
| No |
| Modo de transporte: |
| No |
| Puerto HTTP (solo si |
Uso como MCP local
Importante: node vs nvm
Los clientes MCP lanzan el servidor como un proceso hijo usando el command configurado. Esto significa que el binario de node debe ser accesible desde la ruta indicada.
Si instalaste Node.js directamente (instalador, Homebrew, etc.),
nodeesta disponible globalmente y podes usarlo directamente como command.Si usas
nvm, el binario denodeno esta en una ruta fija global sino dentro de~/.nvm/versions/node/vXX.X.X/bin/node. Algunos clientes MCP (como Claude Desktop) no cargan el perfil de tu shell, por lo quenodeno se encuentra.
Solucion para usuarios de nvm: usar la ruta absoluta al binario de node. Para obtenerla:
# Ver la ruta al node activo
which node
# Ejemplo de salida: /Users/tu-usuario/.nvm/versions/node/v22.0.0/bin/nodeY usar esa ruta completa en el campo command de la configuracion:
{
"command": "/Users/tu-usuario/.nvm/versions/node/v22.0.0/bin/node"
}Nota: Si actualizas la version de Node con nvm, vas a tener que actualizar esta ruta tambien.
Claude Code
Claude Code soporta tres scopes al registrar un MCP server con claude mcp add:
Scope | Flag | Donde se guarda | Disponibilidad |
| (default) | Config interna del proyecto actual ( | Solo para vos, en el proyecto actual |
|
|
| Compartido con el equipo via control de versiones |
|
|
| Para tu usuario, en todos los proyectos de tu maquina |
Importante: los MCP servers no se configuran en
~/.claude/settings.jsonni en.claude/settings.json. Esos archivos son para configuracion general (modelo, hooks, permisos). Las versiones actuales de Claude Code leen MCP servers solo desde~/.claude.json(scopeslocalyuser) y.mcp.json(scopeproject).
Instalacion global (recomendado)
Para que el MCP este disponible en todos tus proyectos, usar el scope user:
claude mcp add bitbucket -s user -- node /ruta/absoluta/a/bitbucket-mcp-server/dist/index.jsTambien podes pasar las variables de entorno en el mismo comando:
claude mcp add bitbucket -s user \
-e BITBUCKET_USERNAME=tu-email@ejemplo.com \
-e BITBUCKET_API_TOKEN=tu-api-token \
-e BITBUCKET_WORKSPACE=tu-workspace \
-- node /ruta/absoluta/a/bitbucket-mcp-server/dist/index.jsVerificar que quedo registrado:
claude mcp listPara removerlo en el futuro:
claude mcp remove bitbucket -s userInstalacion por proyecto
Si solo lo queres para el proyecto actual, omitir -s user (scope local por defecto) o usar -s project para compartirlo con el equipo via .mcp.json:
# Solo para vos en este proyecto
claude mcp add bitbucket -- node /ruta/absoluta/a/bitbucket-mcp-server/dist/index.js
# Compartido con el equipo (genera .mcp.json en la raiz del repo)
claude mcp add bitbucket -s project -- node /ruta/absoluta/a/bitbucket-mcp-server/dist/index.jsConfiguracion manual
Tambien podes editar directamente el archivo correspondiente al scope deseado:
Scope
user(global):~/.claude.json— agregar el server dentro de la clavemcpServersa nivel raiz del JSON.Scope
project:.mcp.jsonen la raiz del repo (commiteable).
Estructura del bloque a agregar en cualquiera de los dos casos:
{
"mcpServers": {
"bitbucket": {
"command": "node",
"args": ["/ruta/absoluta/a/bitbucket-mcp-server/dist/index.js"],
"env": {
"BITBUCKET_USERNAME": "tu-email@ejemplo.com",
"BITBUCKET_API_TOKEN": "tu-api-token",
"BITBUCKET_WORKSPACE": "tu-workspace"
}
}
}
}Si usas nvm, reemplazar
"node"por la ruta absoluta (ver seccion anterior).
Claude Desktop
Agregar en ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"bitbucket": {
"command": "node",
"args": ["/ruta/absoluta/a/bitbucket-mcp-server/dist/index.js"],
"env": {
"BITBUCKET_USERNAME": "tu-email@ejemplo.com",
"BITBUCKET_API_TOKEN": "tu-api-token",
"BITBUCKET_WORKSPACE": "tu-workspace"
}
}
}
}Si usas nvm, reemplazar
"node"por la ruta absoluta (ver seccion "node vs nvm"). Claude Desktop no carga el perfil de shell, por lo quenvmno estara disponible.
Cursor / Windsurf / otros editores
La configuracion es similar. Buscar la seccion de MCP servers en la configuracion del editor y agregar:
Command:
node(o ruta absoluta si usas nvm)Args:
["/ruta/absoluta/a/bitbucket-mcp-server/dist/index.js"]Env: las variables de entorno listadas arriba
Modo HTTP (alternativo)
Si se necesita un servidor HTTP en lugar de stdio:
TRANSPORT=http PORT=3000 npm startEndpoints disponibles:
POST /mcp- Recibe requests MCPGET /health- Health check
Herramientas disponibles
Lectura
Herramienta | Descripcion |
| Lista PRs de un repositorio (filtrar por estado: OPEN, MERGED, DECLINED, SUPERSEDED) |
| Detalle completo de un PR |
| Diff en formato unificado |
| Comentarios del PR (generales e inline) |
| Log de actividad (cambios de estado, aprobaciones, comentarios) |
Escritura
Herramienta | Descripcion |
| Crear un nuevo PR |
| Actualizar titulo, descripcion o reviewers |
| Aprobar un PR |
| Quitar aprobacion |
| Solicitar cambios |
| Agregar comentarios (generales, inline en lineas, o respuestas) |
Operaciones peligrosas (requieren BITBUCKET_ENABLE_DANGEROUS=true)
Herramienta | Descripcion |
| Mergear un PR (estrategias: merge_commit, squash, fast_forward) |
| Rechazar un PR |
Desarrollo
# Compilar en modo watch
npm run dev
# En otra terminal, probar el servidor
npm startAvailable Tools
14 toolsadd_pull_request_commentB
Add a comment to a pull request (general, inline on a file/line, or reply to existing comment)
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| content | Yes | Comment text (markdown supported) | |
| line_to | No | Line number for inline comment (new file side) | |
| filepath | No | File path for inline comment | |
| line_from | No | Line number for inline comment (old file side) | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug | |
| parent_comment_id | No | Parent comment ID for reply threads |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden, yet it says nothing about permissions required, that this is a mutating write operation with side effects (e.g., notifications to PR participants), or whether the comment can be edited/removed afterward. It only discloses the structural variants of the comment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that wastes no words and puts the core action first with the variants in parentheses. Appropriately sized for the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with no output schema and no annotations, the description omits key interaction rules such as which parameters are required for inline vs reply modes. The schema documents each parameter, so the gap is not critical, but the mode-to-parameter mapping an agent needs is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description loosely maps the three modes onto parameter sets (inline needs filepath/line, reply needs parent_comment_id), but it adds no syntax, constraints, or dependency rules beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource ('Add a comment to a pull request') and goes further by naming the three comment modes (general, inline, reply). No sibling tool in the list creates comments, so differentiation is implicit rather than stated, which keeps it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three modes imply which path to take, but the description never says when to use inline vs general vs reply, nor which parameters select each mode. Usage is implied by the enumerated modes rather than stated explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_pull_requestC
Approve a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it says nothing about permissions required, whether the approval is idempotent, whether it can be reversed via unapprove_pull_request, or whether it interacts with merge gating. For a mutation with zero annotation coverage this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and free of filler. It is efficient, though its brevity is partly under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the definition omits auth/permission requirements, the effect of approval on merge readiness, idempotency, and reversibility. An agent can guess the call shape from the schema but lacks the behavioral context needed to invoke it responsibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with workspace, repo_slug, and pr_id each documented in the schema, so the description need not re-explain them. It adds no format or constraint detail beyond the schema, matching the baseline 3 for fully-covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Approve') and resource ('pull request'), so the agent knows exactly what operation is performed. It does not, however, distinguish this from near-neighbors like merge_pull_request, request_changes, or unapprove_pull_request, leaving sibling differentiation to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to approve versus request_changes, merge_pull_request, or the inverse unapprove_pull_request. The agent must infer usage purely from the tool name and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pull_requestC
Create a new pull request
| Name | Required | Description | Default |
|---|---|---|---|
| draft | No | Create PR as draft | |
| title | Yes | PR title | |
| repo_slug | Yes | Repository slug | |
| reviewers | No | Array of reviewer UUIDs or account IDs | |
| workspace | Yes | Bitbucket workspace slug | |
| description | No | PR description (markdown) | |
| source_branch | Yes | Source branch name | |
| destination_branch | No | Destination branch (defaults to repo main branch) | |
| close_source_branch | No | Delete source branch after merge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about authentication requirements, side effects, defaults (draft, close_source_branch), or what happens on failure. It merely restates the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and waste-free, but it is undersized for a 9-parameter mutation tool — brevity here reflects missing content rather than efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, non-idempotent mutation tool with no annotations and no output schema, a one-line restatement of the name leaves the agent without the information needed to invoke it safely or correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 9 parameters are documented in the schema itself, making the baseline 3 appropriate. The description adds no parameter meaning whatsoever beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new pull request'), which is unambiguous against siblings like get_pull_request, update_pull_request, and merge_pull_request. It is clear but does not add any scope or platform context beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no acknowledgment of the surrounding workflow tools (e.g., that the source branch must exist, or that this precedes approve/merge). The agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decline_pull_requestA
Decline a pull request (requires BITBUCKET_ENABLE_DANGEROUS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the critical prerequisite that BITBUCKET_ENABLE_DANGEROUS must be true, which is essential behavioral context for a potentially destructive operation. It doesn't describe side effects or permissions, but the major gate is documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with zero waste, front-loading the action and including a crucial condition in parentheses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no annotations or output schema, the description covers the verb and a key prerequisite but omits return format, side effects, or potential error conditions. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter syntax or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Decline') and resource ('pull request'), which clearly distinguishes it from siblings like merge_pull_request, approve_pull_request, or unapprove_pull_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the tool is used to reject a pull request, but provides no explicit guidance on when to use it versus alternatives like request_changes (which is also a form of rejection).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestC
Get details of a specific pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get details' implies a read-only, safe operation, but nothing is stated about authentication scope, whether an unknown pr_id errors or returns empty, or what 'details' comprises. For a no-annotation tool this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, correctly sized for a simple lookup tool. It is arguably too terse rather than padded, so it loses a point for not earning space with any added value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All required parameters are covered by the schema, but with no annotations and no output schema the description says nothing about the shape of the returned PR details. Adequate as a minimum-viable lookup definition, not more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters (workspace, repo_slug, pr_id) are already documented in the schema with their meaning. The description adds no syntax, format, or sourcing hints beyond what the schema provides, which is the expected baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (details of a specific pull request), so the agent knows it retrieves a single PR by identity rather than a collection. It never names or distinguishes itself from siblings like get_pull_request_diff or get_pull_request_comments, which also read PR data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_pull_requests (browse many) or the diff/comments/activity siblings. Usage is only inferable from the word 'specific' in the description and the required pr_id parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_activityC
Get the activity log of a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it offers only a one-line restatement of the name. It does not disclose what 'activity' includes (events, reviews, comments, pushes), whether results are paginated, ordering, or permissions required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though the brevity borders on under-specification for a tool with no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, so the description must define the return shape and behavior, but 'activity log' is left undefined. For a read tool with three required identifiers, an agent still cannot tell what events it will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three required parameters (workspace, repo_slug, pr_id) are documented in the schema. The description adds nothing beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the activity log of a pull request'), which is clearer than a tautology. However, it does nothing to distinguish itself from siblings like get_pull_request_comments or get_pull_request_diff, which arguably also surface pull-request activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the many sibling read tools, and no conditions or prerequisites are stated. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_commentsC
List comments on a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a read-only operation, but nothing is said about pagination, sorting, result limits, or required permissions. For a read tool with zero annotation coverage, this leaves meaningful behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is efficient, though it is arguably too terse given the tool's unfiltered listing behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool with full schema coverage and no output schema, the description is minimally adequate. It omits return-shape and pagination context, but the schema covers all inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (workspace, repo_slug, pr_id) are documented in the schema. The description adds no semantics beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('comments on a pull request'), which cleanly separates it from siblings like add_pull_request_comment or get_pull_request_activity. It does not, however, explicitly name or contrast those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_pull_request_activity (which may also surface comments) or how it differs from add_pull_request_comment. The reader must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_diffC
Get the diff of a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it discloses nothing about the return format (unified diff? file list? truncated?), size limits, pagination, or auth requirements. For a read tool keyed to Bitbucket, the lack of any behavioral context is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words, and the key noun is front-loaded. It is arguably under-specified rather than concise, but there is no padding to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations mean the description should explain what the diff response looks like and any limits, but it offers only the bare purpose. Required parameters are clear from the schema, but return-value semantics are entirely absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the three parameters is documented in the schema (pr_id, repo_slug, workspace), so the baseline of 3 applies. The description adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('diff of a pull request'), which distinguishes it from the metadata-oriented get_pull_request sibling. It does not explicitly name or contrast with siblings, but the noun 'diff' carries the differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_pull_request, get_pull_request_activity, or any other sibling. An agent must infer that 'diff' means code changes rather than metadata or comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pull_requestsC
List pull requests for a repository
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | PR state filter | OPEN |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and discloses almost nothing beyond the implied read-only nature of "list". It does not mention pagination, result limits, ordering, or any rate-limit/auth considerations that would matter for a listing endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. It is efficient, though the brevity comes at the cost of leaving required context unsaid.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read/list tool with a fully documented schema and no output schema, the minimum is met — an agent can call it. But with no annotations, the description does not cover the default OPEN filter behavior or pagination, so it is only adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so workspace, repo_slug, and the state enum (with default OPEN) are already fully documented in the schema. The description adds nothing beyond "for a repository", so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource ("List pull requests for a repository") that lets an agent distinguish this collection-listing tool from the get_pull_request/merge_pull_request siblings. However, it does not explicitly name which sibling to prefer or state that it returns multiple PRs rather than one, so differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no exclusions, and no mention of alternatives such as get_pull_request for a single PR. There is also no mention of the default state filter (OPEN) or any pagination/filtering behavior, leaving the agent to infer all usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_pull_requestA
Merge a pull request (requires BITBUCKET_ENABLE_DANGEROUS=true)
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug | |
| merge_strategy | No | Merge strategy | merge_commit |
| close_source_branch | No | Delete source branch after merge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses the safety gate (dangerous flag) and implies a write/destructive operation, which is useful. However, it omits key traits: deletion of the source branch by default, irreversibility, and permission requirements—all relevant for a merge mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with zero waste. It includes the critical availability constraint inline, though more structure could have been useful given the mutation's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive write operation with no annotations, no output schema, and default behavior (source branch deletion) not mentioned, the description is incomplete. An agent would need to inspect schema defaults to understand consequences, and important behavioral aspects like irreversibility and defaults are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully documented in the schema. The description adds no parameter-level meaning beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Merge a pull request') that clearly distinguishes it from all siblings like create_pull_request or decline_pull_request. An agent immediately knows the action being performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The precondition (BITBUCKET_ENABLE_DANGEROUS=true) hints at when the tool is available, but there is no explicit guidance on when to choose this over alternatives or what conditions must hold (e.g., approvals required). Usage context is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_changesC
Request changes on a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state that this creates a review state on the PR, who is permitted to call it, whether it can be withdrawn or superseded, or what effect it has on mergeability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, which is efficient. However, the terseness borders on under-specification rather than true conciseness, since the one clause does not carry enough information for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description leaves too much open: review semantics, permissions, side effects, and response behavior are all unstated. The schema fully covers inputs, but behavior is essentially undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (workspace, repo_slug, pr_id) are already documented in the schema. The description adds no syntax, format, or identifier-format detail beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Request changes') and resource ('pull request'), so the action is identifiable. It does not explain that this sets a PR review state rather than editing code, nor distinguish itself from siblings like approve_pull_request, but the purpose is still clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus approve_pull_request, decline_pull_request, or add_pull_request_comment, nor any preconditions (e.g., that the caller must be a reviewer). Usage context is left entirely to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_workspace_membersA
Search for workspace members by display name. Useful for finding reviewer UUIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Display name (or part of it) to search for | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses little: nothing about result limits, pagination, partial-match semantics, empty results, or permissions. It does hint that results carry UUIDs, which is the one useful piece of behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the identifying scope (search by display name) front-loaded before the purpose. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only lookup with no output schema and no annotations, the description is adequate but thin. It never says what a result record contains beyond UUIDs, or whether the search is paginated or capped.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (query, workspace) are fully documented in the schema, so the baseline of 3 applies. The description adds no syntax, format, or edge-case guidance beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+key: 'Search for workspace members by display name', which no sibling tool (all pull-request operations) could be confused with. The scope of the search key (display name) is explicit in the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds a concrete downstream purpose ('finding reviewer UUIDs'), which implies when an agent would reach for it. It does not state when not to use it or name any alternative, but no sibling overlaps, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unapprove_pull_requestC
Remove approval from a pull request
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Bitbucket workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this removes only the caller's own approval or any approval, whether the action is reversible, what permissions are required, or what happens on failure, which is a notable gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is efficient, though its brevity is also the source of the missing behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation with fully documented parameters and no output schema, the description is minimally adequate. However, with no annotations, the absence of any note about whose approval is removed or required permissions leaves an agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (workspace, repo_slug, pr_id) are already documented in the schema. The description adds no parameter-level detail beyond identifying the pull request as the target, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Remove approval from a pull request'), which is unambiguous about the operation. It does not explicitly differentiate itself from the sibling approve_pull_request or request_changes, but the name and description together make the intent clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as approve_pull_request or request_changes, nor any mention of prerequisites (e.g., must currently be an approver). The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_requestC
Update an existing pull request (title, description, reviewers)
| Name | Required | Description | Default |
|---|---|---|---|
| pr_id | Yes | Pull request ID | |
| title | No | New title | |
| repo_slug | Yes | Repository slug | |
| reviewers | No | New list of reviewer UUIDs | |
| workspace | Yes | Bitbucket workspace slug | |
| description | No | New description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does not disclose whether this is a partial update (unmentioned fields preserved) or whether omitting a field clears it, nor auth requirements, reversibility, or any side effects such as reviewer notifications. For a mutation tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb front-loaded and zero filler. It is appropriately sized, though the parenthetical field list is largely redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations and no output schema, the description is too thin: partial-vs-full update semantics, required permissions, and expected result are all unstated. An agent cannot call this confidently without inferring behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents pr_id, workspace, repo_slug, title, description, and reviewers. The parenthetical field list mirrors the schema without adding format or constraint detail (e.g., reviewer UUID semantics beyond the schema note), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') plus resource ('an existing pull request') and enumerates the mutable fields, so the agent can separate it from get_pull_request, merge_pull_request, approve_pull_request, etc. It stops short of explicitly contrasting with those siblings, but the operation is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'an existing' implies the PR must already exist, but there is no statement of when to choose this over merge_pull_request, approve_pull_request, request_changes, or decline_pull_request, and no prerequisites (permissions, PR state). Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v1.0.0- First observed
add_pull_request_comment - First observed
approve_pull_request - First observed
create_pull_request - First observed
decline_pull_request - First observed
get_pull_request - First observed
get_pull_request_activity - First observed
get_pull_request_comments - First observed
get_pull_request_diff - First observed
list_pull_requests - First observed
merge_pull_request - First observed
request_changes - First observed
search_workspace_members - First observed
unapprove_pull_request - First observed
update_pull_request
TDQS
Scored across 14 tools
Read tools (list, get, diff, comments, activity) and write tools (create, update, approve, unapprove, request_changes, comment, merge, decline) each target a distinct action on a pull request. Slight potential for confusion between get_pull_request_activity and get_pull_request_comments (activity logs often include comments), and between approve_pull_request and request_changes, but descriptions clarify the boundaries.
Every tool follows a consistent snake_case verb_noun pattern (list_pull_requests, get_pull_request_diff, add_pull_request_comment, merge_pull_request). Even the odd-one-out search_workspace_members fits the same convention.
14 tools is well within the ideal range and each maps to a meaningful step in the PR review/merge workflow. No redundant or filler tools are present.
The pull request lifecycle is thoroughly covered: discovery, inspection, creation, updates, review states (approve/unapprove/request changes), commenting, and merge/decline. Minor gaps remain around repository/branch discovery (no list_repositories or branch tools), which an agent may need to locate a repo before working with its PRs.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.
A Model Context Protocol (MCP) application for automated GitHub PR analysis and issue management.…
Related MCP Servers
- AlicenseCqualityBmaintenanceMCP server for integrating with Bitbucket Cloud and Server APIs, enabling AI assistants to interact with repositories, pull requests, pipelines, and more.5914 npm3MIT
- AlicenseBqualityDmaintenanceMCP server for Bitbucket Cloud that enables AI agents to manage repositories, branches, pull requests, and deployments via typed tools.1738 npmISC
- FlicenseNot gradedqualityCmaintenanceThis MCP server enables AI agents to create Pull Requests in a self-hosted Bitbucket Server instance.-
- AlicenseAqualityCmaintenanceMCP server for Bitbucket Cloud, focused on pull-request review workflows113,208 npmMIT