bbkt
A MCP server for Bitbucket Cloud that provides comprehensive tools to manage workspaces, repositories, pull requests, pipelines, issues, source code, commits, and branches/tags. It also operates as a standalone CLI and supports AI agent integration via MCP (Stdio and HTTP Streamable transports).
Workspaces: List or get workspace details.
Repositories: List, get, create, or delete repositories, with filtering by role, sort, and query.
Branches & Tags: List, create, or delete branches and tags.
Commits: List commits, get commit details, and compare diffs/diffstats.
Source Code: Read files, list directories, view file history, search, write, or delete files.
Pull Requests: List, get, create, update, merge, approve, unapprove, decline; retrieve diffs, diffstats, and commits.
Pull Request Comments: List, create, update, delete, resolve, or unresolve inline or top-level comments.
Pipelines: List, get, trigger, or stop pipelines; list steps and retrieve step logs.
Issues: List, get, create, or update issues with filtering by state, kind, priority, and assignee.
Authentication: Supports Atlassian API tokens, OAuth 2.0 with auto token refresh, multi-profile management, and environment variable overrides.
Git Integration: Automatically infers the current Bitbucket workspace and repository from
.git/config.Scope-aware Tools: Dynamically adjusts available MCP tools based on the authenticated user's token scopes.
Integrates with Atlassian's Bitbucket platform to manage workspaces, repositories, pipelines, and development workflows through the Bitbucket API.
Provides programmatic integration with Bitbucket workspaces and repositories, allowing for the management of repositories, pull requests, pipelines, issues, and source code operations.
bbkt (Bitbucket CLI & MCP Server)
A complete command-line interface and Model Context Protocol (MCP) server written in Go that provides programmatic integration with Bitbucket Cloud workspaces and repositories.
Features
Dual mode — Use as an interactive CLI for daily work, or launch as an MCP server (
bbkt mcp) for AI agents (Claude Desktop, Cursor, etc.).Git-aware — Most commands auto-detect the current workspace and repo from
.git/config, sobbkt prs listJust Works inside a Bitbucket repo.Multi-profile — Switch between personal and work Atlassian accounts with
--profileorBBKT_PROFILE; auto-selects the right profile based on your git config email.Two auth modes — Atlassian API tokens (Basic auth) or interactive OAuth 2.0 with automatic token refresh.
Scope-aware MCP — At startup the MCP server introspects your token's granted scopes and silently hides tools the token can't use, preventing the AI from hallucinating successful writes it doesn't have permission for.
Read and write — Repositories, workspaces, pipelines, issues, pull requests, comments, and source code (read/write/delete) — all via the API.
Related MCP server: obx
Installation
Recommended — curl | bash
Installs the latest release binary for your OS/arch from GitHub Releases.
# System-wide (uses sudo if /usr/local/bin isn't writable)
curl -sSL https://raw.githubusercontent.com/zach-snell/bbkt/main/install.sh | bash
# User-local, no sudo (~/.local/bin)
curl -sSL https://raw.githubusercontent.com/zach-snell/bbkt/main/install.sh | bash -s -- --userFish users on --user: run fish_add_path ~/.local/bin once if it isn't already on $PATH.
From GitHub Releases
Download a prebuilt binary for your OS/arch directly from the Releases page (Linux/macOS/Windows, amd64 + arm64).
From source
git clone https://github.com/zach-snell/bbkt.git
cd bbkt
go build -o bbkt ./cmd/bbktRequires Go 1.26+.
Quickstart
# 1. Authenticate (interactive — prompts for email + Atlassian API token)
bbkt auth
# 2. Verify
bbkt status
# 3. Use it. Inside a Bitbucket repo, workspace/repo are inferred from git.
bbkt prs list
bbkt pipelines trigger --ref-name main
bbkt source read README.mdFor OAuth instead of an API token:
export BITBUCKET_OAUTH_CLIENT_ID=<consumer-key>
export BITBUCKET_OAUTH_CLIENT_SECRET=<consumer-secret>
bbkt auth --oauthAuthentication
bbkt stores credentials at ~/.config/bbkt/credentials.json and supports multiple profiles.
Atlassian API tokens (default)
bbkt auth # save to "default" profile
bbkt auth --profile work # save to a named profileImportant: Bitbucket Cloud REST API requires scoped API tokens since the September 2025 phase-2 of app-password deprecation. At id.atlassian.com/manage-profile/security/api-tokens, use the "Create API token with scopes" button — not plain "Create API token". Unscoped tokens authenticate to Atlassian but Bitbucket rejects them; bbkt will detect this and point you here.
Recommended scope set for full read/write:
read:account
read:user:bitbucket read:workspace:bitbucket
read:repository:bitbucket write:repository:bitbucket
read:pullrequest:bitbucket write:pullrequest:bitbucket
read:pipeline:bitbucket write:pipeline:bitbucketOAuth 2.0 (browser flow)
Register an OAuth consumer in your Bitbucket workspace settings, then:
export BITBUCKET_OAUTH_CLIENT_ID=<consumer-key>
export BITBUCKET_OAUTH_CLIENT_SECRET=<consumer-secret>
bbkt auth --oauthbbkt opens a browser, captures the callback on http://localhost:8976, exchanges the code for tokens, and stores them. Access tokens auto-refresh on expiry. To override the callback port (must match your registered redirect_uri):
export BBKT_OAUTH_CALLBACK_PORT=9876Multi-profile switching
bbkt profile # list profiles, mark active
bbkt profile use work # set active profile
bbkt profile refresh # refresh cached workspace list per profile
BBKT_PROFILE=work bbkt prs list # one-shot profile overrideWhen BBKT_PROFILE is unset, bbkt tries to auto-select a profile whose accessible workspaces match your git config email; otherwise it falls back to active_profile.
One-shot env-var auth (CI, scripts)
Setting any of these env vars bypasses the stored profile entirely:
# API token
export BITBUCKET_USERNAME=you@example.com # despite the name, this is your Atlassian email
export BITBUCKET_API_TOKEN=ATATT3xFf...
# OAuth bearer
export BITBUCKET_ACCESS_TOKEN=<oauth-access-token>CLI Usage
Global flags (all commands): --json raw JSON output, --profile <name> profile override.
# Auth & profiles
bbkt auth [--oauth] [--profile <name>] # set up credentials
bbkt status # show active profile + token health
bbkt logout # remove stored credentials
bbkt profile [use <name> | refresh] # manage profiles
# Workspaces / repos
bbkt workspaces [list | get <workspace>]
bbkt repos [list | get | create | delete]
[--query <q>] [--role <owner|admin|contributor|member>]
# Pull requests (workspace/repo inferred from git)
bbkt prs list # --state OPEN|MERGED|SUPERSEDED|DECLINED
bbkt prs get <pr-id>
bbkt prs create --title <t> --source <branch> [--destination <branch>]
bbkt prs merge <pr-id> [--strategy merge_commit|squash|fast_forward]
bbkt prs approve <pr-id>
bbkt prs decline <pr-id>
bbkt prs comments [list | add | resolve] # --content, --parent, --file, --to, --from
# Pipelines
bbkt pipelines list # --status SUCCESSFUL|FAILED|INPROGRESS
bbkt pipelines get <pipeline-uuid>
bbkt pipelines trigger --ref-name <branch> [--ref-type branch|tag|bookmark]
bbkt pipelines stop <pipeline-uuid>
bbkt pipelines steps <pipeline-uuid>
bbkt pipelines log <pipeline-uuid> <step-uuid>
# Issues
bbkt issues [list | get | create | update]
[--state] [--kind bug|enhancement|proposal|task] [--priority ...]
# Source code
bbkt source read <path> [--ref <ref>]
bbkt source tree [<path>] [--max-depth <n>]
bbkt source search <query>
bbkt source history <path>
bbkt source write <path> --content <text> [--message <m>] [--branch <b>]
bbkt source delete <path> [--message <m>]Most commands prompt interactively (via huh) when required arguments are missing. Run bbkt <command> --help for full flag details.
MCP Server
bbkt mcp launches a Model Context Protocol server for AI agents. Two transports:
Stdio (default — for Claude Desktop, Cursor, etc.)
Add to your MCP client config:
{
"mcpServers": {
"bitbucket": {
"command": "/absolute/path/to/bbkt",
"args": ["mcp"]
}
}
}By default the server reads credentials from ~/.config/bbkt/credentials.json (the profile set up via bbkt auth). To override per-client:
{
"mcpServers": {
"bitbucket": {
"command": "/absolute/path/to/bbkt",
"args": ["mcp"],
"env": {
"BBKT_PROFILE": "work"
}
}
}
}HTTP Streamable (for remote / network clients)
bbkt mcp --port 8080This serves the MCP Streamable Transport (SSE-based) on the given port.
Scope-gated tools
The MCP server calls Bitbucket's /user endpoint at startup to introspect your token's granted scopes, then silently drops any tool whose required scope is missing. This prevents the AI from confidently calling, say, manage_pipelines (pipeline scope) on a read-only token and getting a 403 it can't recover from.
To explicitly deny tools even when scopes allow them:
export BITBUCKET_DISABLED_TOOLS="manage_repositories,manage_pipelines"To skip credential loading entirely (tools will return auth-required errors when invoked — useful for testing the transport):
bbkt mcp --no-authEnvironment Variables
Variable | Purpose | Required |
| Atlassian email (despite the legacy name) — used with | Only for env-var API-token auth |
| Atlassian scoped API token | Only for env-var API-token auth |
| OAuth 2.0 bearer token (overrides stored profile) | Only for env-var OAuth |
| OAuth consumer Key | Only for |
| OAuth consumer Secret | Only for |
| Profile name override (one-shot) | No |
| Local callback port for OAuth flow (default 8976) | No |
| Comma-separated MCP tools to disable | No |
When BITBUCKET_ACCESS_TOKEN or (BITBUCKET_USERNAME + BITBUCKET_API_TOKEN) is set, the stored profile is bypassed entirely.
Tools Provided (MCP)
Tool | Operations | Required Scope |
| list, get | — |
| list, get, create, delete |
|
| list, create, delete branches and tags |
|
| list, get, diff, diffstat |
|
| read, list_directory, get_history, search, write, delete |
|
| list, get, create, update, merge, approve, unapprove, decline, diff, diffstat, commits |
|
| list, create, update, delete, resolve, unresolve |
|
| list, get, trigger, stop, list-steps, get-step-log |
|
| list, get, create, update |
|
Scopes shown are the OAuth-style names. For Atlassian API tokens, the equivalent granular scopes are read:<scope>:bitbucket / write:<scope>:bitbucket.
Development
Requires Go 1.26+.
go test ./... # unit tests
go test -tags=live ./... # live integration tests (requires BBKT_LIVE_* secrets)
golangci-lint run ./...The repo also has a docs site (Astro) under docs/ deployed to https://zach-snell.github.io/bbkt/.
License
Apache 2.0 — see LICENSE.
Available Tools
10 toolsbitbucket_apiA
Authenticated passthrough to ANY Bitbucket Cloud REST API v2 endpoint not covered by the manage_* tools above (e.g. pipelines-config/OIDC, webhooks, branch restrictions). Prefer a typed manage_* tool when one fits; use this for the long tail instead of calling the API yourself. Reads (GET/HEAD) work by default; write methods are rejected unless BBKT_API_ALLOW_WRITE is set on the server. Supports pagination and returns the raw HTTP status + JSON body.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Raw JSON request body for POST/PUT/PATCH | |
| path | Yes | Bitbucket API v2 path, e.g. '/repositories/{workspace}/{repo}/pipelines'. A leading /2.0 and the api.bitbucket.org host are optional. | |
| method | No | HTTP method (default GET) | |
| paginate | No | Follow pagination and merge all 'values' (GET collections) | |
| max_pages | No | Max pages when paginate is true (default 10; a cap is reported as truncated) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behaviors: writes are rejected unless BBKT_API_ALLOW_WRITE is set, pagination is supported, and the tool returns raw HTTP status and JSON body. This covers safety and operational aspects adequately.
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 description is concise, using three sentences that front-load the purpose, then provide usage guidance, and finally behavioral details. Every sentence adds essential information with no redundancy.
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?
Given the tool's nature as a passthrough with moderate complexity (5 parameters, no output schema), the description covers all necessary aspects: purpose, usage context, pagination, auth restrictions, and return format. It is completely sufficient for an agent to understand and invoke the tool 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?
The input schema already describes all 5 parameters (100% coverage). The description adds useful context beyond the schema, such as pagination defaults, method default, and read/write behavior. This enriches understanding without repeating schema info.
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 clearly states that the tool is an 'Authenticated passthrough to ANY Bitbucket Cloud REST API v2 endpoint', specifying the verb as passthrough and resource as API endpoints. It distinguishes itself from sibling typed manage_* tools by noting usage for endpoints not covered by them.
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 provides explicit guidance on when to use this tool: 'Prefer a typed manage_* tool when one fits; use this for the long tail instead of calling the API yourself.' It also explains that writes are rejected unless an environment variable is set, helping agents avoid errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_commitsC
Unified tool for listing and getting commits, diffs, and diffstats
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| path | No | Filter diff/commits to this file path | |
| spec | No | Diff spec: single commit hash or 'hash1..hash2' (required for 'diff', 'diffstat') | |
| action | Yes | Action to perform: 'list', 'get', 'diff', 'diffstat' | |
| commit | No | Commit hash (required for 'get') | |
| exclude | No | Exclude commits reachable from this ref (for 'list') | |
| include | No | Include commits reachable from this ref (for 'list') | |
| pagelen | No | Results per page | |
| revision | No | Branch name or commit hash to list commits for | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what actions are available without disclosing behavioral traits. It doesn't mention whether operations are read-only or mutating, authentication requirements, rate limits, pagination behavior (though schema hints at it), error conditions, or what the outputs look like.
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 description is a single, efficient sentence that directly states the tool's purpose. It's appropriately sized and front-loaded with the core information, though it could be slightly more specific about the resource context.
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 complex tool with 11 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain the relationships between actions and parameters, what results to expect, or important behavioral aspects. The schema handles parameter documentation, but the description fails to provide necessary context for proper tool selection and usage.
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 all 11 parameters thoroughly. The description adds no additional meaning about parameters beyond what's in the schema, so it meets the baseline of 3 where the schema does the heavy lifting.
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 it's a 'unified tool for listing and getting commits, diffs, and diffstats' which provides a general purpose but lacks specificity about what resources it operates on (commits in a repository). It doesn't distinguish itself from sibling tools like 'manage_source' or 'manage_repositories' that might handle similar operations.
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 alternatives is provided. The description mentions multiple actions but doesn't explain when to choose one action over another or how this tool relates to sibling tools like 'manage_source' or 'manage_pull_requests' that might handle related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_issuesC
Unified tool for managing repository issues (list, get, create, update)
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Issue kind: bug, enhancement, proposal, task (for 'create', 'update') | |
| page | No | Page number | |
| query | No | Filter query (for 'list') | |
| state | No | Issue state: new, open, resolved, on hold, invalid, duplicate, wontfix, closed (for 'list', 'create', 'update') | |
| title | No | Issue title (for 'create', 'update') | |
| action | Yes | Action to perform: 'list', 'get', 'create', 'update' | |
| content | No | Issue description content (for 'create', 'update') | |
| pagelen | No | Results per page | |
| assignee | No | Account ID of the user assigned to the issue (for 'create', 'update') | |
| issue_id | No | Issue ID (for 'get', 'update') | |
| priority | No | Issue priority: trivial, minor, major, critical, blocker (for 'create', 'update') | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the four action types but doesn't describe what each action does, what permissions are required, whether operations are idempotent, rate limits, or what happens on success/failure. 'Manage' is vague about mutation behaviors.
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 description is a single, efficient sentence that states the unified nature and four action types. It's appropriately sized for a multi-action tool, though it could be more front-loaded with key behavioral context given the lack of 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?
For a complex 13-parameter mutation tool with no annotations and no output schema, the description is inadequate. It doesn't explain what 'manage' entails for each action, what values are returned, error conditions, or how this tool fits with sibling tools. The agent lacks crucial context for proper invocation.
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 all 13 parameters thoroughly with descriptions and action mappings. The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline for high schema coverage.
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 clearly states the tool's purpose as a 'unified tool for managing repository issues' with specific actions (list, get, create, update). It distinguishes itself from siblings like manage_commits or manage_pull_requests by focusing on issues, but doesn't explicitly differentiate from other issue-related tools that might exist.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when to choose specific actions, or how it relates to sibling tools like manage_repositories or manage_workspaces. The agent must infer usage from the action parameter alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_pipelinesC
Unified tool for managing Bitbucket Pipelines (list, get, trigger, stop, list-steps, get-step-log)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| sort | No | Sort field | |
| action | Yes | Action to perform: 'list', 'get', 'trigger', 'stop', 'list-steps', 'get-step-log' | |
| status | No | Filter by status | |
| pagelen | No | Results per page | |
| pattern | No | Custom pipeline pattern name to trigger (for 'trigger') | |
| ref_name | No | Branch or tag name to run pipeline on (for 'trigger') | |
| ref_type | No | Reference type: branch or tag (default branch) (for 'trigger') | |
| repo_slug | Yes | Repository slug | |
| step_uuid | No | Step UUID (for 'get-step-log') | |
| workspace | Yes | Workspace slug | |
| pipeline_uuid | No | Pipeline UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It lists actions but fails to describe critical behaviors: whether actions are read-only or destructive (e.g., 'stop' implies mutation), authentication needs, rate limits, error handling, or response formats. This is inadequate for a multi-action tool with potential write operations.
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 description is a single, efficient sentence that front-loads the tool's unified nature and lists all actions without redundancy. Every word earns its place, making it highly concise and well-structured.
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?
Given the tool's complexity (12 parameters, multiple actions including potential mutations like 'trigger' and 'stop'), no annotations, and no output schema, the description is insufficient. It lacks behavioral details, usage context, and output information, leaving significant gaps for an agent to operate effectively.
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 parameters are well-documented in the schema. The description adds no additional semantic context beyond listing action names, which are already in the 'action' parameter description. Baseline 3 is appropriate as the schema does the heavy lifting.
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 clearly states the tool's purpose as a 'unified tool for managing Bitbucket Pipelines' and lists six specific actions (list, get, trigger, stop, list-steps, get-step-log). It distinguishes itself from siblings by focusing on pipelines rather than commits, issues, PRs, etc., though it doesn't explicitly contrast with them.
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 provides no guidance on when to use this tool versus alternatives, nor does it specify prerequisites or appropriate contexts. It merely lists actions without indicating scenarios for each, leaving the agent to infer usage from parameter descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_pr_commentsC
Unified tool for managing pull request comments (list, create, update, delete, resolve, unresolve)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| pr_id | Yes | Pull request ID | |
| action | Yes | Action to perform: 'list', 'create', 'update', 'delete', 'resolve', 'unresolve' | |
| content | No | Markdown content (for 'create', 'update') | |
| line_to | No | Line number the comment applies to for new/modified lines (for 'create') | |
| pagelen | No | Results per page (default 50) | |
| file_path | No | File path for inline comments (for 'create') | |
| line_from | No | Line number the comment applies to for deleted lines (for 'create') | |
| parent_id | No | Parent comment ID to reply to (for 'create') | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Workspace slug | |
| comment_id | No | Comment ID (for 'update', 'delete', 'resolve', 'unresolve') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It lists actions but doesn't disclose behavioral traits like authentication requirements, rate limits, side effects of destructive actions (delete), or what 'resolve/unresolve' means in context. For a multi-action tool with write operations, this leaves critical gaps in understanding how the tool behaves.
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 description is a single, efficient sentence that front-loads the key information: it's a unified tool for managing PR comments and enumerates all actions. There's no wasted verbiage or redundancy, making it easy to parse quickly.
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?
Given the tool's complexity (12 parameters, multiple actions including destructive ones), lack of annotations, and no output schema, the description is inadequate. It doesn't explain return values, error conditions, or behavioral nuances needed for safe and effective use. The agent would struggle to invoke this tool correctly without trial and error.
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 parameters are well-documented in the schema itself. The description adds minimal value by mentioning the action types, which aligns with the 'action' parameter's description. However, it doesn't provide additional context about parameter interactions or semantics beyond what's already in the schema, meeting the baseline for high schema coverage.
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 clearly states the tool's purpose as a 'unified tool for managing pull request comments' and lists the specific actions (list, create, update, delete, resolve, unresolve). It distinguishes itself from siblings like 'manage_pull_requests' by focusing specifically on comments rather than pull requests themselves. However, it doesn't explicitly contrast with other comment-related tools if they exist.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when certain actions are appropriate, or how it differs from other tools that might handle comments. The agent must infer usage from the action list alone, which is insufficient for informed tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_pull_requestsB
Unified tool covering all pull request operations (list, get, create, update, merge, approve, unapprove, decline, diff, diffstat, commits)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| draft | No | Create as a draft PR (for 'create') | |
| pr_id | No | Pull request ID | |
| query | No | Filter query (for 'list') | |
| state | No | Filter by state (MERGED, SUPERSEDED, OPEN, DECLINED) (for 'list') | |
| title | No | Title of the pull request (for 'create', 'update') | |
| action | Yes | Action to perform: 'list', 'get', 'create', 'update', 'merge', 'approve', 'unapprove', 'decline', 'get-diff', 'get-diffstat', 'get-commits' | |
| message | No | Commit message (for 'merge') | |
| pagelen | No | Results per page | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Workspace slug | |
| description | No | Description of the pull request (for 'create', 'update') | |
| source_branch | No | Source branch name (for 'create') | |
| merge_strategy | No | Merge strategy (e.g. merge_commit, squash, fast_forward) (for 'merge') | |
| destination_branch | No | Destination branch name (for 'create') | |
| close_source_branch | No | Close source branch (for 'create', 'merge') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it lists the available actions, it provides no information about authentication requirements, rate limits, side effects, error conditions, or what happens when operations succeed/fail. For a tool with 11 different mutation actions (create, update, merge, approve, etc.), this lack of behavioral context 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?
The description is a single, efficient sentence that packs substantial information by enumerating all 11 supported actions. It's appropriately front-loaded with the core concept ('unified tool covering all pull request operations') followed by the action list. While dense, every word earns its place by specifying scope.
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 complex tool with 11 different actions (many being mutations), no annotations, and no output schema, the description is incomplete. It doesn't address authentication needs, error handling, response formats, or the behavioral differences between actions like 'merge' versus 'decline'. The agent lacks crucial context to use this tool effectively across its varied operations.
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 all 16 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain parameter relationships, constraints, or usage patterns. The baseline of 3 is appropriate when the schema does all the parameter documentation work.
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 clearly states the tool's purpose as a 'unified tool covering all pull request operations' and enumerates the 11 specific actions it supports (list, get, create, update, merge, approve, unapprove, decline, diff, diffstat, commits). This provides a comprehensive verb+resource scope and distinguishes it from sibling tools like manage_pr_comments which would handle only comments.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, explain why one would choose this unified tool over more specialized siblings, or indicate which actions require specific permissions or conditions. The agent must infer usage entirely from the action parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_refsC
Unified tool for listing, creating, and deleting branches and tags
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Branch or tag name (required for create/delete) | |
| page | No | Page number (for list) | |
| sort | No | Sort field (for list-branches) | |
| query | No | Filter query (for list-branches) | |
| action | Yes | Action to perform: 'list-branches', 'create-branch', 'delete-branch', 'list-tags', 'create-tag' | |
| target | No | Target commit hash (required for create-tag) | |
| pagelen | No | Results per page (for list) | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | 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 burden of behavioral disclosure. It mentions the operations (list, create, delete) but doesn't specify permissions required, rate limits, side effects (e.g., if deletions are permanent), or response formats. This is inadequate for a tool with multiple actions including destructive ones like delete.
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 description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It directly states the unified nature and key actions, making it easy to parse quickly.
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?
Given the tool's complexity (9 parameters, multiple actions including destructive ones), no annotations, and no output schema, the description is incomplete. It lacks behavioral details, usage context, and output information, leaving significant gaps for an agent to operate effectively.
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 fully documents all 9 parameters. The description adds no additional parameter semantics beyond implying that actions involve branches and tags, which is already covered by the schema's action descriptions. Baseline 3 is appropriate as the schema does the heavy lifting.
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 clearly states the tool's purpose as a 'unified tool for listing, creating, and deleting branches and tags', which specifies the verb ('list, create, delete') and resource ('branches and tags'). However, it doesn't differentiate from sibling tools like 'manage_commits' or 'manage_repositories' that might handle related operations, so it doesn't reach the highest score.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, exclusions, or compare it to sibling tools like 'manage_source' or 'manage_repositories', leaving the agent to infer usage from the action parameter alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_repositoriesC
Unified tool for listing, getting, creating, and deleting repositories
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| role | No | Filter by role: owner, admin, contributor, member | |
| sort | No | Sort field (e.g. -updated_on) | |
| query | No | Bitbucket query filter (e.g. name~'myrepo') | |
| action | Yes | Action to perform: 'list', 'get', 'create', 'delete' | |
| pagelen | No | Results per page (default 25) | |
| language | No | Primary programming language (for 'create') | |
| repo_slug | No | Repository slug (required for 'get', 'create', 'delete') | |
| workspace | Yes | Workspace slug | |
| is_private | No | Whether the repo is private (default true, for 'create') | |
| description | No | Repository description (for 'create') | |
| project_key | No | Project key to assign the repo to (for 'create') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but fails to do so adequately. It mentions actions like 'creating' and 'deleting' but doesn't clarify permissions needed, side effects, rate limits, or response formats. For a multi-action tool with potential mutations, this leaves critical gaps in understanding its behavior.
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 description is extremely concise and front-loaded, consisting of a single sentence that directly states the tool's purpose without any unnecessary words. It efficiently communicates the core functionality, making it easy to grasp at a glance.
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?
Given the tool's complexity with 12 parameters, multiple actions including mutations, and no annotations or output schema, the description is insufficient. It lacks details on behavioral traits, usage context, and output expectations, making it incomplete for safe and effective agent use.
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?
The description adds no parameter-specific information beyond what the input schema already provides, as schema description coverage is 100%. The baseline score of 3 reflects that the schema adequately documents parameters, but the description doesn't enhance understanding with additional context or examples.
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 clearly states the tool's purpose as a 'unified tool for listing, getting, creating, and deleting repositories,' which specifies the actions and resource. However, it doesn't differentiate from sibling tools like 'manage_workspaces' or 'manage_source' that might handle related resources, preventing a perfect score.
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 provides no guidance on when to use this tool versus alternatives, such as when to choose 'manage_repositories' over 'manage_workspaces' for repository-related tasks. It lacks context about prerequisites, exclusions, or specific scenarios, offering only a basic functional overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_sourceC
Unified tool for source code operations (read, list_directory, get_history, search, write, delete)
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Commit hash, branch, or tag (default: HEAD) | |
| page | No | Page number | |
| path | No | Path to the file or directory | |
| query | No | Search query | |
| action | Yes | Action to perform: 'read_file', 'list_directory', 'get_history', 'search', 'write_file', 'delete_file' | |
| author | No | Commit author in 'Name <email>' format | |
| branch | No | Branch to commit to | |
| content | No | Content to write to the file | |
| message | No | Commit message | |
| pagelen | No | Results per page | |
| max_depth | No | Maximum depth of recursion (for list_directory) | |
| repo_slug | Yes | Repository slug | |
| workspace | Yes | Workspace slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the operations available but doesn't describe their behavior: what 'read' returns, what 'write' commits to, whether 'delete' is permanent, authentication requirements, rate limits, or error conditions. The description is essentially a feature list without 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?
The description is extremely concise - a single sentence listing the available actions. While efficient, it may be too terse given the tool's complexity. The structure is front-loaded with the unified nature of the tool, but could benefit from more context about what 'source code operations' means.
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 complex tool with 13 parameters, 6 different actions, no annotations, and no output schema, the description is inadequate. It doesn't explain what the tool actually does with source code, how actions differ, what resources they operate on, or what to expect as results. The description fails to compensate for the lack of structured metadata.
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 all 13 parameters thoroughly. The description doesn't add any parameter semantics beyond what's in the schema - it doesn't explain how parameters interact with different actions, which parameters are required for which actions, or provide examples. Baseline 3 is appropriate when schema does the heavy lifting.
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 clearly states this is a 'unified tool for source code operations' and lists the specific actions available (read, list_directory, get_history, search, write, delete). It distinguishes itself from siblings by focusing on source code operations rather than commits, issues, pipelines, etc. However, it doesn't specify what resource it operates on (files/directories in repositories).
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 provides no guidance on when to use this tool versus the sibling tools. While it lists the available actions, it doesn't indicate when to choose this unified tool over more specialized ones like manage_commits or manage_repositories. There's no mention of prerequisites, constraints, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_workspacesC
Unified tool for getting and listing Bitbucket workspaces
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| action | Yes | Action to perform: 'list', 'get' | |
| pagelen | No | Number of results per page (default 25) | |
| workspace | No | Workspace slug or UUID (required for 'get') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'getting and listing' but fails to detail critical aspects like authentication requirements, rate limits, pagination behavior (beyond what the schema implies), or error handling. This leaves significant gaps for an agent to understand operational traits.
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 description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy for an agent to parse quickly and understand the core functionality.
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?
Given the tool's complexity (4 parameters, no output schema, and no annotations), the description is incomplete. It doesn't cover behavioral aspects like response format, error cases, or usage constraints, which are crucial for an agent to invoke the tool correctly in a Bitbucket context.
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 fully documents all parameters. The description adds no additional meaning beyond what the schema provides, such as explaining the relationship between 'action' values and other parameters. This meets the baseline for high schema coverage but doesn't enhance parameter understanding.
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 clearly states the tool's purpose as a 'unified tool for getting and listing Bitbucket workspaces,' specifying both verbs ('getting' and 'listing') and the resource ('Bitbucket workspaces'). However, it doesn't explicitly differentiate from sibling tools like 'manage_repositories,' which might handle similar operations on different resources, leaving room for minor ambiguity.
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 provides no guidance on when to use this tool versus alternatives, such as other 'manage_' tools for different Bitbucket resources. It lacks context on prerequisites, exclusions, or specific scenarios where this tool is preferred, relying solely on the tool name and description for implied usage.
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. Dates show when Glama detected each change.
1 tool update
v0.1.11- Added
bitbucket_api
9 tool updates
v0.1.3- First observed
manage_commits - First observed
manage_issues - First observed
manage_pipelines - First observed
manage_pr_comments - First observed
manage_pull_requests - First observed
manage_refs - First observed
manage_repositories - First observed
manage_source - First observed
manage_workspaces
TDQS
Each manage_* tool targets a distinct Bitbucket resource (commits, issues, pipelines, etc.) with clear operation lists, and the catch-all bitbucket_api handles everything else, ensuring no overlap.
All manage_* tools follow a consistent verb_noun pattern, but the bitbucket_api tool breaks that pattern, causing a minor inconsistency.
With 10 tools covering workspaces, repos, issues, PRs, comments, commits, pipelines, source, and refs, the count is well-scoped for a Bitbucket integration server.
The tool set provides CRUD or lifecycle operations for all major Bitbucket resources, and the bitbucket_api tool covers any remaining endpoints, leaving no obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for siGit (sigit.si): browse repos, search code, manage PRs/issues, web search.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceAccess all major Bitbucket Cloud features—repositories, pull requests, issues, branches, pipelines, deployments, and more—using a modern Rust codebase. Expose Bitbucket as Model Context Protocol (MCP) tools, ideal for bots, CI/CD, and workflow automation.-
- AlicenseAqualityBmaintenanceA fast, lightweight MCP server and CLI for Obsidian vaults built in Go. 16 multiplexed tools covering 72 actions for notes, search, templates, tasks, links, frontmatter, and vault analysis. Single binary, no plugins required.154Apache 2.0
- AlicenseBqualityCmaintenanceJira CLI & MCP Server — dual-mode Go binary for Jira Cloud with 9 tools, 4 prompts, permission introspection, and dev-status API.101Apache 2.0
- AlicenseBqualityCmaintenanceConfluence CLI & MCP Server — dual-mode Go binary for Confluence Cloud with 7 tools, folder CRUD, page diff, and write gating.81Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/zach-snell/bbkt'
If you have feedback or need assistance with the MCP directory API, please join our Discord server