Skip to main content
Glama

bbkt (Bitbucket CLI & MCP Server)

Documentation Go Report Card License

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, so bbkt prs list Just Works inside a Bitbucket repo.

  • Multi-profile — Switch between personal and work Atlassian accounts with --profile or BBKT_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

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 -- --user

Fish 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/bbkt

Requires 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.md

For OAuth instead of an API token:

export BITBUCKET_OAUTH_CLIENT_ID=<consumer-key>
export BITBUCKET_OAUTH_CLIENT_SECRET=<consumer-secret>
bbkt auth --oauth

Authentication

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 profile

Important: 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:bitbucket

OAuth 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 --oauth

bbkt 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=9876

Multi-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 override

When 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 8080

This 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-auth

Environment Variables

Variable

Purpose

Required

BITBUCKET_USERNAME

Atlassian email (despite the legacy name) — used with BITBUCKET_API_TOKEN

Only for env-var API-token auth

BITBUCKET_API_TOKEN

Atlassian scoped API token

Only for env-var API-token auth

BITBUCKET_ACCESS_TOKEN

OAuth 2.0 bearer token (overrides stored profile)

Only for env-var OAuth

BITBUCKET_OAUTH_CLIENT_ID

OAuth consumer Key

Only for bbkt auth --oauth

BITBUCKET_OAUTH_CLIENT_SECRET

OAuth consumer Secret

Only for bbkt auth --oauth

BBKT_PROFILE

Profile name override (one-shot)

No

BBKT_OAUTH_CALLBACK_PORT

Local callback port for OAuth flow (default 8976)

No

BITBUCKET_DISABLED_TOOLS

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

manage_workspaces

list, get

manage_repositories

list, get, create, delete

repository

manage_refs

list, create, delete branches and tags

repository

manage_commits

list, get, diff, diffstat

repository

manage_source

read, list_directory, get_history, search, write, delete

repository

manage_pull_requests

list, get, create, update, merge, approve, unapprove, decline, diff, diffstat, commits

pullrequest

manage_pr_comments

list, create, update, delete, resolve, unresolve

pullrequest

manage_pipelines

list, get, trigger, stop, list-steps, get-step-log

pipeline

manage_issues

list, get, create, update

issue

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 tools
bitbucket_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRaw JSON request body for POST/PUT/PATCH
pathYesBitbucket API v2 path, e.g. '/repositories/{workspace}/{repo}/pipelines'. A leading /2.0 and the api.bitbucket.org host are optional.
methodNoHTTP method (default GET)
paginateNoFollow pagination and merge all 'values' (GET collections)
max_pagesNoMax pages when paginate is true (default 10; a cap is reported as truncated)

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
pathNoFilter diff/commits to this file path
specNoDiff spec: single commit hash or 'hash1..hash2' (required for 'diff', 'diffstat')
actionYesAction to perform: 'list', 'get', 'diff', 'diffstat'
commitNoCommit hash (required for 'get')
excludeNoExclude commits reachable from this ref (for 'list')
includeNoInclude commits reachable from this ref (for 'list')
pagelenNoResults per page
revisionNoBranch name or commit hash to list commits for
repo_slugYesRepository slug
workspaceYesWorkspace slug

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoIssue kind: bug, enhancement, proposal, task (for 'create', 'update')
pageNoPage number
queryNoFilter query (for 'list')
stateNoIssue state: new, open, resolved, on hold, invalid, duplicate, wontfix, closed (for 'list', 'create', 'update')
titleNoIssue title (for 'create', 'update')
actionYesAction to perform: 'list', 'get', 'create', 'update'
contentNoIssue description content (for 'create', 'update')
pagelenNoResults per page
assigneeNoAccount ID of the user assigned to the issue (for 'create', 'update')
issue_idNoIssue ID (for 'get', 'update')
priorityNoIssue priority: trivial, minor, major, critical, blocker (for 'create', 'update')
repo_slugYesRepository slug
workspaceYesWorkspace slug

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
sortNoSort field
actionYesAction to perform: 'list', 'get', 'trigger', 'stop', 'list-steps', 'get-step-log'
statusNoFilter by status
pagelenNoResults per page
patternNoCustom pipeline pattern name to trigger (for 'trigger')
ref_nameNoBranch or tag name to run pipeline on (for 'trigger')
ref_typeNoReference type: branch or tag (default branch) (for 'trigger')
repo_slugYesRepository slug
step_uuidNoStep UUID (for 'get-step-log')
workspaceYesWorkspace slug
pipeline_uuidNoPipeline UUID

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
pr_idYesPull request ID
actionYesAction to perform: 'list', 'create', 'update', 'delete', 'resolve', 'unresolve'
contentNoMarkdown content (for 'create', 'update')
line_toNoLine number the comment applies to for new/modified lines (for 'create')
pagelenNoResults per page (default 50)
file_pathNoFile path for inline comments (for 'create')
line_fromNoLine number the comment applies to for deleted lines (for 'create')
parent_idNoParent comment ID to reply to (for 'create')
repo_slugYesRepository slug
workspaceYesWorkspace slug
comment_idNoComment ID (for 'update', 'delete', 'resolve', 'unresolve')

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
draftNoCreate as a draft PR (for 'create')
pr_idNoPull request ID
queryNoFilter query (for 'list')
stateNoFilter by state (MERGED, SUPERSEDED, OPEN, DECLINED) (for 'list')
titleNoTitle of the pull request (for 'create', 'update')
actionYesAction to perform: 'list', 'get', 'create', 'update', 'merge', 'approve', 'unapprove', 'decline', 'get-diff', 'get-diffstat', 'get-commits'
messageNoCommit message (for 'merge')
pagelenNoResults per page
repo_slugYesRepository slug
workspaceYesWorkspace slug
descriptionNoDescription of the pull request (for 'create', 'update')
source_branchNoSource branch name (for 'create')
merge_strategyNoMerge strategy (e.g. merge_commit, squash, fast_forward) (for 'merge')
destination_branchNoDestination branch name (for 'create')
close_source_branchNoClose source branch (for 'create', 'merge')

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoBranch or tag name (required for create/delete)
pageNoPage number (for list)
sortNoSort field (for list-branches)
queryNoFilter query (for list-branches)
actionYesAction to perform: 'list-branches', 'create-branch', 'delete-branch', 'list-tags', 'create-tag'
targetNoTarget commit hash (required for create-tag)
pagelenNoResults per page (for list)
repo_slugYesRepository slug
workspaceYesWorkspace slug

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
roleNoFilter by role: owner, admin, contributor, member
sortNoSort field (e.g. -updated_on)
queryNoBitbucket query filter (e.g. name~'myrepo')
actionYesAction to perform: 'list', 'get', 'create', 'delete'
pagelenNoResults per page (default 25)
languageNoPrimary programming language (for 'create')
repo_slugNoRepository slug (required for 'get', 'create', 'delete')
workspaceYesWorkspace slug
is_privateNoWhether the repo is private (default true, for 'create')
descriptionNoRepository description (for 'create')
project_keyNoProject key to assign the repo to (for 'create')

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoCommit hash, branch, or tag (default: HEAD)
pageNoPage number
pathNoPath to the file or directory
queryNoSearch query
actionYesAction to perform: 'read_file', 'list_directory', 'get_history', 'search', 'write_file', 'delete_file'
authorNoCommit author in 'Name <email>' format
branchNoBranch to commit to
contentNoContent to write to the file
messageNoCommit message
pagelenNoResults per page
max_depthNoMaximum depth of recursion (for list_directory)
repo_slugYesRepository slug
workspaceYesWorkspace slug

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
actionYesAction to perform: 'list', 'get'
pagelenNoNumber of results per page (default 25)
workspaceNoWorkspace slug or UUID (required for 'get')

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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. 1 tool updatev0.1.11
    • Addedbitbucket_api
  2. 9 tool updatesv0.1.3
    • First observedmanage_commits
    • First observedmanage_issues
    • First observedmanage_pipelines
    • First observedmanage_pr_comments
    • First observedmanage_pull_requests
    • First observedmanage_refs
    • First observedmanage_repositories
    • First observedmanage_source
    • First observedmanage_workspaces

TDQS

A3.5/5.0
Disambiguation5/5

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.

Naming Consistency4/5

All manage_* tools follow a consistent verb_noun pattern, but the bitbucket_api tool breaks that pattern, causing a minor inconsistency.

Tool Count5/5

With 10 tools covering workspaces, repos, issues, PRs, comments, commits, pipelines, source, and refs, the count is well-scoped for a Bitbucket integration server.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Access 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.
    -
  • A
    license
    A
    quality
    B
    maintenance
    A 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.
    15
    4
    Apache 2.0

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zach-snell/bbkt'

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