Skip to main content
Glama
garc33

Bitbucket Server MCP

by garc33

Bitbucket Server MCP

MCP (Model Context Protocol) server for Bitbucket Server Pull Request management. This server provides tools and resources to interact with the Bitbucket Server API through the MCP protocol.

✨ New Features

  • 🔧 Custom HTTP Headers: Add custom headers to all requests via BITBUCKET_CUSTOM_HEADERS environment variable (useful for Zero Trust tokens or proxies)

  • 📋 PR Discovery: List and filter pull requests by state, author, or direction using list_pull_requests (fixes #14)

  • 🌿 Branch Management: List branches with default branch detection using list_branches, delete merged branches with delete_branch

  • 📝 Commit History: Browse commit history with branch and author filtering using list_commits

  • ✅ PR Approval: Approve and unapprove pull requests with approve_pull_request and unapprove_pull_request

  • 🔍 Advanced Search: Search code and files across repositories with project/repository filtering using the search tool

  • 📄 File Operations: Read file contents and browse repository directories with get_file_content and browse_repository

  • 💬 Comment Management: Extract and filter PR comments with get_comments tool

  • 🔍 Project Discovery: List all accessible Bitbucket projects with list_projects

  • 📁 Repository Browsing: Explore repositories across projects with list_repositories

  • 🔧 Flexible Project Support: Make the default project optional - specify per command or use BITBUCKET_DEFAULT_PROJECT

  • 📖 Enhanced Documentation: Improved README with usage examples and better configuration guidance

Related MCP server: Bitbucket MCP Server

Requirements

  • Node.js >= 16

Installation

Installing via Smithery

To install Bitbucket Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @garc33/bitbucket-server-mcp-server --client claude

Manual Installation

npm install

Build

npm run build

Features

The server provides the following tools for comprehensive Bitbucket Server integration:

list_projects

Discover and explore Bitbucket projects: Lists all accessible projects with their details. Essential for project discovery and finding the correct project keys to use in other operations.

Use cases:

  • Find available projects when you don't know the exact project key

  • Explore project structure and permissions

  • Discover new projects you have access to

Parameters:

  • limit: Number of projects to return (default: 25, max: 1000)

  • start: Start index for pagination (default: 0)

list_repositories

Browse and discover repositories: Explore repositories within specific projects or across all accessible projects. Returns comprehensive repository information including clone URLs and metadata.

Use cases:

  • Find repository slugs for other operations

  • Explore codebase structure across projects

  • Discover repositories you have access to

  • Browse a specific project's repositories

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • limit: Number of repositories to return (default: 25, max: 1000)

  • start: Start index for pagination (default: 0)

create_pull_request

Propose code changes for review: Creates a new pull request to submit code changes, request reviews, or merge feature branches. Automatically handles branch references and reviewer assignments.

Use cases:

  • Submit feature development for review

  • Propose bug fixes

  • Request code integration from feature branches

  • Collaborate on code changes

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • title (required): Clear, descriptive PR title

  • description: Detailed description with context (supports Markdown)

  • sourceBranch (required): Source branch containing changes

  • targetBranch (required): Target branch for merging

  • reviewers: Array of reviewer usernames

  • sourceProject: Project key of the source repository (for cross-repo PRs from forks)

  • sourceRepository: Slug of the source repository (for cross-repo PRs from forks)

  • includeDefaultReviewers: Automatically fetch and include default reviewers configured for the target branch (default: true)

update_pull_request

Safely update a pull request: Modify the title, description, or reviewers of an existing pull request without losing any metadata. Uses a read-modify-write pattern to preserve all fields not explicitly changed.

Use cases:

  • Fix PR title or description after creation

  • Add or replace reviewers without losing existing ones

  • Update PR metadata without affecting approval status

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID to update

  • title: New title (if omitted, current title is preserved)

  • description: New description (if omitted, current description is preserved)

  • reviewers: New reviewer list as array of usernames (if omitted, current reviewers are preserved)

get_pull_request

Comprehensive PR information: Retrieves detailed pull request information including status, reviewers, commits, and all metadata. Essential for understanding PR state before taking actions.

Use cases:

  • Check PR approval status

  • Review PR details and progress

  • Understand changes before merging

  • Monitor PR status

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

merge_pull_request

Integrate approved changes: Merges an approved pull request into the target branch. Supports different merge strategies based on your workflow preferences.

Use cases:

  • Complete the code review process

  • Integrate approved features

  • Apply bug fixes to main branches

  • Release code changes

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

  • message: Custom merge commit message

  • strategy: Merge strategy:

    • merge-commit (default): Creates merge commit preserving history

    • squash: Combines all commits into one

    • fast-forward: Moves branch pointer without merge commit

decline_pull_request

Reject unsuitable changes: Declines a pull request that should not be merged, providing feedback to the author.

Use cases:

  • Reject changes that don't meet standards

  • Close PRs that conflict with project direction

  • Request significant rework

  • Prevent unwanted code integration

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

  • message: Reason for declining (helpful for author feedback)

add_comment

Participate in code review: Adds comments to pull requests for review feedback, discussions, and collaboration. Supports threaded conversations.

Use cases:

  • Provide code review feedback

  • Ask questions about specific changes

  • Suggest improvements

  • Participate in technical discussions

  • Document review decisions

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

  • text (required): Comment content (supports Markdown)

  • parentId: Parent comment ID for threaded replies

  • state: Comment state: OPEN (default, published immediately) or PENDING (draft, visible only to you until review is published)

get_diff

Analyze code changes: Retrieves the code differences showing exactly what was added, removed, or modified in the pull request. Supports per-file truncation to manage large diffs effectively.

Use cases:

  • Review specific code changes

  • Understand scope of modifications

  • Analyze impact before merging

  • Inspect implementation details

  • Code quality assessment

  • Handle large files without overwhelming output

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

  • contextLines: Context lines around changes (default: 10)

  • maxLinesPerFile: Maximum lines to show per file (optional, uses BITBUCKET_DIFF_MAX_LINES_PER_FILE env var if not specified, set to 0 for no limit)

Large File Handling: When a file exceeds the maxLinesPerFile limit, it shows:

  • File headers and metadata (always preserved)

  • First 60% of allowed lines from the beginning

  • Truncation message with file statistics

  • Last 40% of allowed lines from the end

  • Clear indication of how to see the complete diff

get_reviews

Track review progress: Fetches review history, approval status, and reviewer feedback to understand the review state.

Use cases:

  • Check if PR is ready for merging

  • See who has reviewed the changes

  • Understand review feedback

  • Monitor approval requirements

  • Track review progress

get_activities

Retrieve pull request activities: Gets the complete activity timeline for a pull request including comments, reviews, commits, and other events.

Use cases:

  • Read comment discussions and feedback

  • Review the complete PR timeline

  • Track commits added/removed from PR

  • See approval and review history

  • Understand the full PR lifecycle

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

get_comments

Extract PR comments only: Filters pull request activities to return only the comments, making it easier to focus on discussion content without reviews or other activities.

Use cases:

  • Read PR discussion threads

  • Extract feedback and questions

  • Focus on comment content without noise

  • Analyze conversation flow

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

Advanced code and file search: Search across repositories using the Bitbucket search API with support for project/repository filtering and query optimization. Searches both file contents and filenames. Note: Search only works on the default branch of repositories.

Use cases:

  • Find specific code patterns across projects

  • Locate files by name or content

  • Search within specific projects or repositories

  • Filter by file extensions

Parameters:

  • query (required): Search query string

  • project: Bitbucket project key to limit search scope

  • repository: Repository slug for repository-specific search

  • type: Query optimization - "file" (wraps query in quotes for exact filename matching) or "code" (default search behavior)

  • limit: Number of results to return (default: 25, max: 100)

  • start: Start index for pagination (default: 0)

Query syntax examples:

  • "README.md" - Find exact filename

  • config ext:yml - Find config in YAML files

  • function project:MYPROJECT - Search for "function" in specific project

  • bug fix repo:PROJ/my-repo - Search in specific repository

get_file_content

Read file contents with pagination: Retrieve the content of specific files from repositories with support for large files through pagination.

Use cases:

  • Read source code files

  • View configuration files

  • Extract documentation content

  • Inspect specific file versions

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • filePath (required): Path to the file in the repository

  • branch: Branch or commit hash (optional, defaults to main/master)

  • limit: Maximum lines per request (default: 100, max: 1000)

  • start: Starting line number for pagination (default: 0)

browse_repository

Explore repository structure: Browse files and directories in repositories to understand project organization and locate specific files.

Use cases:

  • Explore repository structure

  • Navigate directory trees

  • Find files and folders

  • Understand project organization

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • path: Directory path to browse (optional, defaults to root)

  • branch: Branch or commit hash (optional, defaults to main/master)

  • limit: Maximum items to return (default: 50)

list_pull_requests

Discover and filter pull requests: List pull requests in a repository with filtering by state, author, and direction. Returns PR metadata including title, author, branches, reviewers, and status.

Use cases:

  • Find open PRs in a repository

  • List your own pull requests

  • See PRs awaiting review

  • Get an overview of merged or declined PRs

  • Monitor PR activity in a project

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • state: Filter by PR state — OPEN (default), MERGED, DECLINED, or ALL

  • author: Filter by author username (exact match)

  • direction: INCOMING (PRs targeting this repo, default) or OUTGOING (PRs from this repo)

  • limit: Number of PRs to return (default: 25, max: 1000)

  • start: Start index for pagination (default: 0)

list_branches

Explore repository branches: List branches in a repository with optional filtering. Identifies the default branch and shows latest commit information for each branch.

Use cases:

  • Find branch names for PR creation or checkout

  • Verify branch existence before operations

  • Identify the default branch

  • Search for branches by name

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • filterText: Filter branches by name (case-insensitive partial match)

  • limit: Number of branches to return (default: 25, max: 1000)

  • start: Start index for pagination (default: 0)

list_commits

Browse commit history: List commits in a repository with optional branch and author filtering. Use this to review changes, track contributions, or understand the evolution of a branch.

Use cases:

  • Review recent changes on a branch

  • Find commits by a specific author

  • Track commit history before merging

  • Understand branch evolution

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • branch: Branch name to list commits from (defaults to the repository's default branch)

  • author: Filter by author name or email (case-insensitive partial match, applied client-side)

  • limit: Number of commits to return (default: 25, max: 1000)

  • start: Start index for pagination (default: 0)

delete_branch

Clean up merged branches: Delete a branch from a repository. Includes a safety check to prevent deletion of the default branch.

Use cases:

  • Clean up feature branches after PR merge

  • Remove stale or abandoned branches

  • Repository maintenance and hygiene

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • branch (required): Branch name to delete

approve_pull_request

Approve code changes: Approve a pull request as the current authenticated user. Records your approval on the PR, signaling that changes are ready to merge.

Use cases:

  • Approve reviewed pull requests

  • Signal readiness for merge

  • Complete code review workflow

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID to approve

unapprove_pull_request

Retract approval: Remove your approval from a pull request. Use this when you need to retract a previous approval after discovering issues or when the PR has changed.

Use cases:

  • Retract approval after discovering issues

  • Remove approval when PR scope changes

  • Correct accidental approvals

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID to remove approval from

edit_comment

Edit an existing comment: Modify the text of a comment on a pull request. Works with both published and pending (draft) comments. Requires the comment version for optimistic locking.

Use cases:

  • Fix typos or formatting in review comments

  • Update information in an existing comment

  • Reformat comments (e.g., to Conventional Comments style)

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID the comment belongs to

  • commentId (required): ID of the comment to edit

  • text (required): New text content (supports Markdown)

  • version (required): Current version of the comment for optimistic locking (from get_comments or add_comment response)

delete_comment

Delete a comment: Remove a comment from a pull request. Requires the comment version for optimistic locking.

Use cases:

  • Remove incorrectly posted comments

  • Clean up draft comments that are no longer needed

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID the comment belongs to

  • commentId (required): ID of the comment to delete

  • version (required): Current version of the comment for optimistic locking

publish_review

Publish a batch review: Publish all pending (draft) comments at once, optionally setting your review status and adding an overview comment. This is the equivalent of clicking "Finish review" in the Bitbucket UI.

Use cases:

  • Publish all draft review comments in a single action

  • Approve a PR along with review comments

  • Request changes with a "needs work" status and feedback

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

  • commentText: Optional overview comment for the review

  • participantStatus: Optional review status: APPROVED (ready to merge) or NEEDS_WORK (changes required). Omit for general feedback.

get_code_insights

Retrieve CI/CD analysis results: Fetch Code Insights reports (SonarQube, security scans, etc.) and their annotations for a pull request.

Use cases:

  • Check SonarQube quality gate status

  • Review security scan findings

  • Inspect code coverage metrics

  • See CI/CD analysis annotations per file

Parameters:

  • project: Bitbucket project key (optional, uses BITBUCKET_DEFAULT_PROJECT if not provided)

  • repository (required): Repository slug

  • prId (required): Pull request ID

get_dashboard_pull_requests

Cross-repository PR dashboard: List pull requests across all repositories for the authenticated user. Use this to see PRs you need to review, PRs you authored, or PRs you are participating in, without needing to specify each project and repository.

Use cases:

  • See all PRs awaiting your review

  • List your own open PRs across all projects

  • Find recently merged PRs you participated in

  • Get an overview of your PR workload

Parameters:

  • state: Filter by PR state: OPEN (default), MERGED, DECLINED, or ALL

  • role: Filter by your role: AUTHOR, REVIEWER, or PARTICIPANT

  • participantStatus: Filter by your review status: APPROVED, UNAPPROVED, or NEEDS_WORK

  • order: Sort order: OLDEST or NEWEST (default)

  • closedSince: Only include closed PRs updated after this timestamp (epoch ms)

  • limit: Number of PRs to return (default: 25)

  • start: Start index for pagination (default: 0)

Usage Examples

Listing Projects and Repositories

# List all accessible projects
list_projects

# List repositories in the default project (if BITBUCKET_DEFAULT_PROJECT is set)
list_repositories

# List repositories in a specific project
list_repositories --project "MYPROJECT"

# List projects with pagination
list_projects --limit 10 --start 0

Search and File Operations

# Search for README files across all projects
search --query "README" --type "file" --limit 10

# Search for specific code patterns in a project
search --query "function getUserData" --type "code" --project "MYPROJECT"

# Search with file extension filter
search --query "config ext:yml" --project "MYPROJECT"

# Browse repository structure
browse_repository --project "MYPROJECT" --repository "my-repo"

# Browse specific directory
browse_repository --project "MYPROJECT" --repository "my-repo" --path "src/components"

# Read file contents
get_file_content --project "MYPROJECT" --repository "my-repo" --filePath "package.json" --limit 20

# Read specific lines from a large file
get_file_content --project "MYPROJECT" --repository "my-repo" --filePath "docs/CHANGELOG.md" --start 100 --limit 50

Working with Pull Requests

# Create a pull request (using default project)
create_pull_request --repository "my-repo" --title "Feature: New functionality" --sourceBranch "feature/new-feature" --targetBranch "main"

# Create a pull request with specific project
create_pull_request --project "MYPROJECT" --repository "my-repo" --title "Bugfix: Critical issue" --sourceBranch "bugfix/critical" --targetBranch "develop" --description "Fixes critical issue #123"

# Get pull request details
get_pull_request --repository "my-repo" --prId 123

# Get only comments from a PR (no reviews/commits)
get_comments --project "MYPROJECT" --repository "my-repo" --prId 123

# Get full PR activity timeline
get_activities --repository "my-repo" --prId 123

# Merge a pull request with squash strategy
merge_pull_request --repository "my-repo" --prId 123 --strategy "squash" --message "Feature: New functionality (#123)"

Discovering Pull Requests

# List open PRs in a repository (default state: OPEN)
list_pull_requests --repository "my-repo"

# List all PRs regardless of state
list_pull_requests --repository "my-repo" --state "ALL"

# Find PRs by a specific author
list_pull_requests --repository "my-repo" --author "john.doe"

# List merged PRs with pagination
list_pull_requests --repository "my-repo" --state "MERGED" --limit 10 --start 0

Branch Management

# List all branches in a repository
list_branches --repository "my-repo"

# Filter branches by name
list_branches --project "MYPROJECT" --repository "my-repo" --filterText "feature"

# Delete a merged branch
delete_branch --repository "my-repo" --branch "feature/completed-work"

Commit History

# List recent commits on the default branch
list_commits --repository "my-repo"

# List commits on a specific branch
list_commits --repository "my-repo" --branch "develop" --limit 10

# Filter commits by author
list_commits --repository "my-repo" --author "john.doe"

# Combine branch and author filters
list_commits --project "MYPROJECT" --repository "my-repo" --branch "main" --author "jane"

PR Approval Workflow

# Approve a pull request
approve_pull_request --repository "my-repo" --prId 123

# Remove your approval
unapprove_pull_request --repository "my-repo" --prId 123

# Full workflow: review diff, approve, merge
get_diff --repository "my-repo" --prId 123
approve_pull_request --repository "my-repo" --prId 123
merge_pull_request --repository "my-repo" --prId 123 --strategy "squash"

Dependencies

  • @modelcontextprotocol/sdk - SDK for MCP protocol implementation

  • axios - HTTP client for API requests

  • winston - Logging framework

Configuration

The server requires configuration in the VSCode MCP settings file. Here's a sample configuration:

{
  "mcpServers": {
    "bitbucket": {
      "command": "node",
      "args": ["/path/to/bitbucket-server/build/index.js"],
      "env": {
        "BITBUCKET_URL": "https://your-bitbucket-server.com",
        // Authentication (choose one):
        // Option 1: Personal Access Token
        "BITBUCKET_TOKEN": "your-access-token",
        // Option 2: Username/Password
        "BITBUCKET_USERNAME": "your-username",
        "BITBUCKET_PASSWORD": "your-password",
        // Optional: Default project
        "BITBUCKET_DEFAULT_PROJECT": "your-default-project"
      }
    }
  }
}

Environment Variables

  • BITBUCKET_URL (required): Base URL of your Bitbucket Server instance

  • Authentication (one of the following is required):

    • BITBUCKET_TOKEN: Personal access token

    • BITBUCKET_USERNAME and BITBUCKET_PASSWORD: Basic authentication credentials

  • BITBUCKET_DEFAULT_PROJECT (optional): Default project key to use when not specified in tool calls

  • BITBUCKET_DIFF_MAX_LINES_PER_FILE (optional): Default maximum lines to show per file in diffs. Set to prevent large files from overwhelming output. Can be overridden by the maxLinesPerFile parameter in get_diff calls.

  • BITBUCKET_LOG_PATH (optional): Custom path for the log file (default: ~/.bitbucket-server-mcp/bitbucket.log)

  • BITBUCKET_READ_ONLY (optional): Set to true to enable read-only mode

  • BITBUCKET_CUSTOM_HEADERS (optional): Comma-separated list of custom HTTP headers to add to all requests (format: Header-Name=value,Another-Header=value2). Useful for Zero Trust tokens or proxy headers

Note: With the new optional project support, you can now:

  • Set BITBUCKET_DEFAULT_PROJECT to work with a specific project by default

  • Use list_projects to discover available projects

  • Use list_repositories to browse repositories across projects

  • Override the default project by specifying the project parameter in any tool call

Read-Only Mode

The server supports a read-only mode for deployments where you want to prevent any modifications to your Bitbucket repositories. When enabled, only safe, non-modifying operations are available.

To enable read-only mode: Set the environment variable BITBUCKET_READ_ONLY=true

Available tools in read-only mode:

  • list_projects - Browse and list projects

  • list_repositories - Browse and list repositories

  • get_pull_request - View pull request details

  • list_pull_requests - List and filter pull requests

  • get_diff - View code changes and diffs

  • get_reviews - View review history and status

  • get_activities - View pull request timeline

  • get_comments - View pull request comments

  • search - Search code and files across repositories

  • get_file_content - Read file contents

  • browse_repository - Browse repository structure

  • list_branches - List repository branches

  • list_commits - Browse commit history

  • get_code_insights - Retrieve CI/CD analysis reports and annotations

  • get_dashboard_pull_requests - List PRs across all repositories for the authenticated user

Disabled tools in read-only mode:

  • create_pull_request - Creating new pull requests

  • update_pull_request - Updating pull request title, description, or reviewers

  • merge_pull_request - Merging pull requests

  • decline_pull_request - Declining pull requests

  • add_comment - Adding comments to pull requests

  • add_comment_inline - Adding inline comments to pull requests

  • edit_comment - Editing existing comments

  • delete_comment - Deleting comments

  • publish_review - Publishing batch reviews

  • delete_branch - Deleting branches

  • approve_pull_request - Approving pull requests

  • unapprove_pull_request - Removing PR approvals

Behavior:

  • When BITBUCKET_READ_ONLY is not set or set to any value other than true, all tools function normally (backward compatible)

  • When BITBUCKET_READ_ONLY=true, write operations are filtered out and will return an error if called

  • This is perfect for production deployments, CI/CD integration, or any scenario where you need safe, read-only Bitbucket access

Logging

The server logs all operations using Winston for debugging and monitoring purposes.

Log file location (in order of priority):

  1. BITBUCKET_LOG_PATH environment variable — custom path

  2. ~/.bitbucket-server-mcp/bitbucket.log — default location

The log directory is created automatically if it doesn't exist.

Example: Set a custom log path in your MCP configuration:

{
  "env": {
    "BITBUCKET_LOG_PATH": "/var/log/bitbucket-mcp/server.log"
  }
}

Custom HTTP Headers

You can add custom HTTP headers to all API requests using the BITBUCKET_CUSTOM_HEADERS environment variable. This is useful for Zero Trust security tokens, proxy headers, or any other headers required by your infrastructure.

Format: Comma-separated key-value pairs where values can contain equals signs:

Header-Name=value,Another-Header=value2

Single header example:

{
  "env": {
    "BITBUCKET_CUSTOM_HEADERS": "X-Zero-Trust-Token=your-token-here"
  }
}

Multiple headers example:

{
  "env": {
    "BITBUCKET_CUSTOM_HEADERS": "X-Custom-Header=value1,X-Proxy-Auth=token123"
  }
}

Available Tools

15 tools
add_commentA

Add a comment to a pull request for code review, feedback, questions, or discussion. Use this to provide review feedback, ask questions about specific changes, suggest improvements, or participate in code review discussions. Supports threaded conversations.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to comment on.
textYesComment text content. Supports Markdown formatting for code blocks, links, and emphasis.
parentIdNoID of parent comment to reply to. Omit for top-level comments.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool supports 'threaded conversations' (via parentId) and Markdown formatting, which is useful behavioral context. However, it lacks details on permissions, rate limits, or response format that would be important for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, followed by specific use cases and a key feature ('Supports threaded conversations'). Every sentence adds value with zero waste, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is moderately complete for a mutation tool. It covers the purpose and usage well but lacks details on behavioral aspects like authentication needs, error handling, or what the tool returns, which are gaps for a tool that modifies data.

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 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, such as explaining how 'parentId' enables threading or formatting details for 'text'. Baseline 3 is appropriate when the schema does the heavy lifting.

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 specific action ('Add a comment') and resource ('to a pull request'), with explicit purposes like 'code review, feedback, questions, or discussion'. It distinguishes from sibling tools like 'get_comments' (which retrieves) and 'add_comment_inline' (which likely adds inline comments).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('provide review feedback, ask questions about specific changes, suggest improvements, or participate in code review discussions'), but does not explicitly state when not to use it or name alternatives like 'add_comment_inline' for comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_comment_inlineA

Add an inline comment (to specific lines) to the diff of a pull request for code review, feedback, questions, or discussion. Use this to provide review feedback, ask questions about specific changes, suggest improvements, or participate in code review discussions. Supports threaded conversations.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to comment on.
textYesComment text content. Supports Markdown formatting for code blocks, links, and emphasis.
parentIdNoID of parent comment to reply to. Omit for top-level comments.
filePathYesPath to the file in the repository where the comment should be added (e.g., "src/main.py", "README.md").
lineYesLine number in the file to attach the comment to (1-based).
lineTypeYesType of change the comment is associated with: ADDED for additions, REMOVED for deletions.

TDQS

A3.9/5.0
Behavior3/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 that the tool 'supports threaded conversations' and implies mutation ('Add'), but does not disclose other behavioral traits such as required permissions, rate limits, or what happens on success/failure. This leaves gaps for a mutation tool, though the purpose is clear.

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 appropriately sized and front-loaded, with the first sentence covering the core purpose and the second adding usage context. Every sentence adds value without redundancy, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a mutation tool with 8 parameters and no annotations or output schema, the description is somewhat complete but lacks details on behavioral aspects like error handling or response format. It covers purpose and usage well but misses deeper contextual information needed for full agent understanding.

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 input schema fully documents all 8 parameters. The description does not add any parameter-specific details beyond what the schema provides, such as examples or edge cases. This meets the baseline of 3, as the schema handles the heavy lifting.

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 specific action ('Add an inline comment'), target resource ('to the diff of a pull request'), and purpose ('for code review, feedback, questions, or discussion'). It distinguishes from the sibling 'add_comment' by specifying 'inline comment (to specific lines)' and mentions threaded conversations, providing clear differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('to provide review feedback, ask questions about specific changes, suggest improvements, or participate in code review discussions'), which gives clear context. However, it does not mention when not to use it or explicitly name alternatives like 'add_comment' for non-inline comments, which prevents a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browse_repositoryA

Browse and list files and directories in a Bitbucket repository. Use this to explore repository structure, find files, or navigate directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug to browse.
pathNoDirectory path to browse (empty or "/" for root directory).
branchNoBranch or commit hash to browse (defaults to main/master branch if not specified).
limitNoMaximum number of items to return (default: 50).

TDQS

A3.7/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 the full burden of behavioral disclosure. While it mentions the tool's purpose, it lacks details on behavioral traits such as pagination behavior (implied by the 'limit' parameter but not explained), error handling, authentication requirements, or rate limits. This is a significant gap for a tool with multiple parameters and no annotations.

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 appropriately sized and front-loaded, with two concise sentences that directly state the tool's purpose and usage context. Every sentence earns its place without redundancy or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (5 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and usage but lacks behavioral details (e.g., output format, error cases) that would help an agent use it effectively. Without annotations or an output schema, more context is needed for full completeness.

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 schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description does not add any additional meaning or context beyond what the schema provides (e.g., it doesn't explain parameter interactions or default values beyond the schema). Baseline 3 is appropriate when the schema does the heavy lifting.

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 with specific verbs ('browse and list') and resources ('files and directories in a Bitbucket repository'). It distinguishes this from sibling tools like 'get_file_content' (which retrieves content) or 'search' (which searches across repositories) by focusing on structural exploration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('to explore repository structure, find files, or navigate directories'), but it does not explicitly state when not to use it or name specific alternatives. For example, it doesn't clarify that 'get_file_content' should be used for reading file contents instead of this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_pull_requestA

Create a new pull request to propose code changes, request reviews, or merge feature branches. Use this when you want to submit code for review, merge a feature branch, or contribute changes to a repository. Automatically sets up branch references and can assign reviewers.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable. Use list_projects to discover available projects.
repositoryYesRepository slug where the pull request will be created. Use list_repositories to find available repositories.
titleYesClear, descriptive title for the pull request that summarizes the changes.
descriptionNoDetailed description of changes, context, and any relevant information for reviewers. Supports Markdown formatting.
sourceBranchYesSource branch name containing the changes to be merged (e.g., "feature/new-login", "bugfix/security-patch").
targetBranchYesTarget branch where changes will be merged (e.g., "main", "develop", "release/v1.2").
reviewersNoArray of Bitbucket usernames to assign as reviewers for this pull request.

TDQS

A3.8/5.0
Behavior3/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 adds useful context about automatically setting up branch references and assigning reviewers, but lacks details on permissions required, error conditions, rate limits, or what happens on success/failure. For a mutation tool with zero annotation coverage, this leaves significant gaps.

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 efficiently structured in two sentences that front-load the core purpose and usage context. Every sentence adds value, though it could be slightly more concise by combining some clauses without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 7 parameters, no annotations, and no output schema, the description is moderately complete. It covers purpose and basic usage but lacks details on behavioral outcomes, error handling, or return values. Given the complexity and absence of structured safety/behavioral data, it should provide more guidance on what to expect after 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 7 parameters thoroughly. The description does not add any parameter-specific information beyond what's in the schema, such as formatting examples or constraints not captured in schema descriptions. 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.

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 with specific verbs ('create a new pull request') and resources ('code changes', 'feature branches'), distinguishing it from siblings like 'merge_pull_request' or 'decline_pull_request' by focusing on creation rather than modification or review actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool ('when you want to submit code for review, merge a feature branch, or contribute changes'), but does not explicitly state when NOT to use it or name specific alternatives among siblings like 'merge_pull_request' for merging without creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

decline_pull_requestA

Decline or reject a pull request that should not be merged. Use this when changes are not acceptable, conflicts with project direction, or when the PR needs significant rework. This closes the PR without merging.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to decline.
messageNoReason for declining the pull request. Helps the author understand why it was rejected.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the action 'declines or rejects' and 'closes the PR without merging,' which implies a destructive mutation. However, it lacks details on permissions required, whether the action is reversible, or any rate limits. It adds some behavioral context but is incomplete for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and usage guidelines in two concise sentences. Every sentence earns its place by clarifying purpose, when to use, and the outcome, with no wasted words. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is moderately complete. It covers purpose and usage well but lacks details on behavioral aspects like permissions or reversibility. For a mutation tool with 4 parameters and no structured safety hints, it should provide more context on risks or requirements, leaving some gaps.

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 parameters. The description does not add any additional meaning or syntax details beyond what the schema provides. It mentions a 'reason for declining' which aligns with the 'message' parameter but doesn't elaborate further. Baseline 3 is appropriate when the schema handles parameter documentation.

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 specific action ('decline or reject a pull request') and resource ('pull request'), distinguishing it from siblings like 'merge_pull_request' by specifying it 'closes the PR without merging.' It avoids tautology by explaining the outcome rather than just restating the name.

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 explicitly states when to use this tool: 'when changes are not acceptable, conflicts with project direction, or when the PR needs significant rework.' It also distinguishes from alternatives by noting it 'closes the PR without merging,' contrasting with 'merge_pull_request.' This provides clear context and exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_activitiesB

Retrieve all activities for a pull request including comments, reviews, commits, and other timeline events. Use this to get the complete activity history and timeline of the pull request.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to get activities for.

TDQS

B3.2/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 describes what the tool retrieves but doesn't disclose behavioral traits like whether this is a read-only operation (implied by 'retrieve'), potential rate limits, authentication requirements, pagination behavior, or what happens if parameters are invalid. For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.

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 two sentences that efficiently convey the purpose and usage without wasted words. It's front-loaded with the core functionality and follows with the intended use case. However, the second sentence could be slightly more concise by integrating with the first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description provides basic purpose and usage but lacks details on behavioral aspects (e.g., safety, performance) and output format. For a tool with 3 parameters and sibling tools offering overlapping functionality, more context on differentiation and operational traits would improve completeness.

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 three parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain relationships between parameters or provide usage examples). Baseline 3 is appropriate when 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 verb 'retrieve' and resource 'activities for a pull request' with specific examples of what's included (comments, reviews, commits, timeline events). It distinguishes from siblings like get_comments or get_reviews by mentioning it retrieves 'all activities' including those elements, but doesn't explicitly contrast with get_pull_request which might also provide some activity information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage guidance by stating 'Use this to get the complete activity history and timeline,' suggesting this is for comprehensive historical data rather than specific subsets. However, it doesn't explicitly state when to use this versus alternatives like get_comments (for just comments) or get_pull_request (which might include some activity data), nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_commentsA

Retrieve only the comments from a pull request. Use this when you specifically want to read the discussion and feedback comments without other activities like reviews or commits.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to get comments for.

TDQS

A4.1/5.0
Behavior3/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 correctly indicates this is a read operation ('retrieve'), but doesn't mention authentication requirements, rate limits, pagination behavior, or error conditions. The description is accurate but lacks comprehensive behavioral context needed for a read-only tool with no annotation coverage.

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 perfectly concise with two sentences that each earn their place. The first sentence states the core purpose, and the second provides essential usage guidance. There's zero waste or redundancy, and it's front-loaded with the most important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with 3 parameters, 100% schema coverage, but no output schema or annotations, the description provides adequate purpose and usage guidance but lacks information about return values, error handling, or authentication. The agent knows what the tool does and when to use it, but not what to expect from the operation or potential constraints.

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 all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what the schema provides about project, repository, and prId. It correctly implies these parameters are needed but doesn't elaborate on their semantics, format, or relationships.

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 specific verb ('retrieve') and resource ('comments from a pull request'), and distinguishes it from siblings by specifying 'only the comments' and contrasting with 'other activities like reviews or commits'. This provides precise differentiation from tools like get_activities or get_reviews.

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 explicitly states when to use this tool ('when you specifically want to read the discussion and feedback comments') and when not to use it ('without other activities like reviews or commits'), providing clear alternatives. This gives the agent perfect guidance on tool selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_diffA

Retrieve the code differences (diff) for a pull request showing what lines were added, removed, or modified. Use this to understand the scope of changes, review specific code modifications, or analyze the impact of proposed changes before merging.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to get diff for.
contextLinesNoNumber of context lines to show around changes (default: 10). Higher values provide more surrounding code context.
maxLinesPerFileNoMaximum number of lines to show per file (default: uses BITBUCKET_DIFF_MAX_LINES_PER_FILE env var). Set to 0 for no limit. Prevents large files from overwhelming the diff output.

TDQS

A3.9/5.0
Behavior3/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 describes what the tool returns ('code differences showing what lines were added, removed, or modified') and the purpose of those differences. However, it doesn't mention important behavioral aspects like whether this is a read-only operation (implied but not stated), potential rate limits, authentication requirements, or what format the diff is returned in (unified diff, JSON, etc.).

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 efficiently structured with two sentences. The first sentence states the core purpose, and the second provides usage context. Every sentence earns its place by adding value - no redundant or vague language. It's appropriately sized for a tool with 5 parameters and good schema documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, 100% schema coverage, but no annotations and no output schema, the description is adequate but has gaps. It explains the purpose and usage context well, but doesn't address the output format or behavioral constraints that would be important for an agent to use this tool effectively. The absence of output schema means the description should ideally mention what format the diff is returned in.

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 5 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. It mentions 'diff' generally but doesn't explain how parameters like contextLines or maxLinesPerFile affect the output format. Baseline 3 is appropriate when the schema does the heavy lifting.

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 with specific verbs ('retrieve', 'show') and resource ('code differences for a pull request'). It distinguishes this tool from siblings like get_pull_request (which likely returns metadata) or get_file_content (which retrieves file contents rather than diffs). The description explicitly mentions what the diff shows: 'lines were added, removed, or modified'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: 'to understand the scope of changes, review specific code modifications, or analyze the impact of proposed changes before merging.' This gives the agent specific scenarios for invocation. However, it doesn't explicitly state when NOT to use this tool or mention alternatives like get_pull_request for high-level information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_file_contentA

Retrieve the content of a specific file from a Bitbucket repository with pagination support. Use this to read source code, configuration files, documentation, or any text-based files. For large files, use start parameter to paginate through content.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the file.
filePathYesPath to the file in the repository (e.g., "src/main.py", "README.md", "config/settings.json").
branchNoBranch or commit hash to read from (defaults to main/master branch if not specified).
limitNoMaximum number of lines to return per request (default: 100, max: 1000).
startNoStarting line number for pagination (0-based, default: 0).

TDQS

A3.9/5.0
Behavior3/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 effectively describes the core functionality (retrieving file content) and mentions pagination behavior for large files, which is useful context. However, it doesn't cover other important behavioral aspects like error conditions (e.g., file not found), authentication requirements, rate limits, or response format details.

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 perfectly sized and front-loaded: the first sentence states the core purpose, the second provides usage context, and the third offers specific guidance for edge cases (large files). Every sentence earns its place with zero wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read operation with 6 parameters and no output schema, the description provides adequate but incomplete coverage. It explains the what and when-to-use well, but lacks details about return values, error handling, and authentication requirements that would be helpful given the tool's complexity and absence of both annotations and output schema.

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 schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description adds minimal value beyond the schema by mentioning the 'start' parameter for pagination and implying text-based file usage, but doesn't provide additional syntax, format, or constraint details that aren't already in the schema descriptions.

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 specific action ('Retrieve the content'), resource ('a specific file from a Bitbucket repository'), and scope ('with pagination support'). It distinguishes this tool from siblings like 'browse_repository' (which likely lists files) or 'get_diff' (which compares changes) by focusing on reading file contents directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool ('to read source code, configuration files, documentation, or any text-based files') and includes an explicit alternative for large files ('use start parameter to paginate'). However, it doesn't explicitly state when NOT to use it or compare it to all sibling tools (e.g., vs. 'get_diff' for file comparisons).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pull_requestA

Retrieve comprehensive details about a specific pull request including status, reviewers, commits, and metadata. Use this to check PR status, review progress, understand changes, or gather information before performing actions like merging or commenting.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesUnique pull request ID number (e.g., 123, 456).

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It implies a read-only operation through verbs like 'retrieve' and 'check,' but doesn't explicitly state permission requirements, rate limits, or error behaviors. It adds some context about the scope of returned data but lacks details on pagination or response format.

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 efficiently structured in two sentences: the first states the purpose and scope, the second provides usage guidelines. Every phrase adds value without redundancy, making it appropriately sized and front-loaded with essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read operation with 3 parameters, 100% schema coverage, and no output schema, the description provides adequate purpose and usage context. However, without annotations or output schema, it lacks details on return format, error handling, or authentication needs, leaving some gaps for the agent to infer.

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 three parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3 for adequate but not enhanced parameter documentation.

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 verb 'retrieve' and resource 'pull request' with specific details included ('comprehensive details about a specific pull request including status, reviewers, commits, and metadata'). It distinguishes from siblings like get_comments or get_diff by emphasizing comprehensive details rather than specific aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('to check PR status, review progress, understand changes, or gather information before performing actions like merging or commenting'), which helps differentiate it from write-oriented siblings like merge_pull_request. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_reviewsA

Fetch the review history and approval status of a pull request. Use this to check who has reviewed the PR, see approval status, understand review feedback, or determine if the PR is ready for merging based on review requirements.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to get reviews for.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the tool's purpose and what information it returns (review history, approval status, feedback, merge readiness), but lacks details on behavioral traits like error handling, rate limits, authentication needs, or response format. It's adequate but has gaps for a tool with no annotations.

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 front-loaded with the core purpose in the first sentence, followed by specific use cases. It uses two concise sentences with zero wasted words, efficiently covering key aspects without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description adequately explains the tool's purpose and usage context. However, it lacks details on return values (e.g., format of review data), error conditions, or prerequisites, which would be helpful for completeness in this 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 three parameters. The description does not add any parameter-specific information beyond what the schema provides, such as examples or constraints. Baseline 3 is appropriate when the schema handles parameter documentation.

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 specific action ('fetch') and resource ('review history and approval status of a pull request'), with explicit purposes like checking reviewers, approval status, feedback, and merge readiness. It distinguishes from siblings like get_pull_request (general PR info) or get_comments (comments only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('to check who has reviewed... see approval status... determine if ready for merging'), but does not explicitly state when not to use it or name alternatives. It implies usage for review-related queries rather than general PR info.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsA

Discover and list all Bitbucket projects you have access to. Use this first to explore available projects, find project keys, or when you need to work with a specific project but don't know its exact key. Returns project keys, names, descriptions and visibility settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of projects to return (default: 25, max: 1000)
startNoStart index for pagination (default: 0)

TDQS

A4.2/5.0
Behavior3/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 describes the return format ('Returns project keys, names, descriptions and visibility settings') which is valuable, but doesn't mention authentication requirements, rate limits, error conditions, or pagination behavior beyond what's implied by the parameters. It adequately covers the core behavior but lacks comprehensive operational details.

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 efficiently structured with two sentences that each serve distinct purposes: the first states the core functionality, the second provides usage guidance and return format. There's no wasted language, and key information is front-loaded appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list operation with 2 parameters, 100% schema coverage, and no output schema, the description provides good context about purpose, usage scenarios, and return format. However, without annotations or output schema, it could benefit from more detail about authentication, error handling, or pagination behavior to be fully complete.

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 fully documents both parameters (limit and start). The description doesn't add any parameter-specific information beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.

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 specific action ('Discover and list'), resource ('all Bitbucket projects'), and scope ('you have access to'), distinguishing it from sibling tools like list_repositories or search. It provides a comprehensive purpose statement that goes beyond a simple tautology.

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 explicitly states when to use this tool: 'Use this first to explore available projects, find project keys, or when you need to work with a specific project but don't know its exact key.' It provides clear context for usage scenarios, though it doesn't explicitly mention when NOT to use it or name specific alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_repositoriesB

Browse and discover repositories within a specific project or across all accessible projects. Use this to find repository slugs, explore codebases, or understand the repository structure. Returns repository names, slugs, clone URLs, and project associations.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key to list repositories from. If omitted, uses BITBUCKET_DEFAULT_PROJECT or lists all accessible repositories across projects.
limitNoNumber of repositories to return (default: 25, max: 1000)
startNoStart index for pagination (default: 0)

TDQS

B3.2/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 the full burden of behavioral disclosure. It mentions what the tool returns ('repository names, slugs, clone URLs, and project associations'), which is helpful. However, it doesn't disclose important behavioral traits such as whether this is a read-only operation (implied but not stated), pagination behavior (hinted at by 'limit' and 'start' parameters but not explained in description), authentication requirements, rate limits, or error conditions. For a tool with no annotations, this leaves significant gaps.

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 appropriately sized with three sentences that are front-loaded with the core purpose. Each sentence adds value: the first states what the tool does, the second provides usage context, and the third describes the return values. There's minimal waste, though it could be slightly more structured (e.g., separating purpose from usage more clearly).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is partially complete. It covers the purpose, usage hints, and return values, but lacks details on behavioral aspects like pagination, authentication, or error handling. With no output schema, the description's mention of return values is helpful, but it doesn't fully compensate for the missing annotations and behavioral context. It's adequate but has clear gaps.

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 input schema has 100% description coverage, providing clear documentation for all three parameters ('project', 'limit', 'start'). The description adds no additional parameter-specific information beyond what's in the schema. According to the rules, when schema_description_coverage is high (>80%), the baseline score is 3 even with no param info in the description, which applies here.

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: 'Browse and discover repositories within a specific project or across all accessible projects.' It specifies the verb ('browse and discover') and resource ('repositories'), and mentions the scope ('specific project or across all accessible projects'). However, it doesn't explicitly differentiate from sibling tools like 'browse_repository' or 'list_projects', which would be needed for a score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by stating 'Use this to find repository slugs, explore codebases, or understand the repository structure,' which suggests when this tool might be appropriate. However, it doesn't provide explicit guidance on when to use this versus alternatives like 'browse_repository' or 'list_projects', nor does it mention any exclusions or prerequisites. The guidance is present but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_pull_requestA

Merge an approved pull request into the target branch. Use this when a PR has been reviewed, approved, and is ready to be integrated. Choose the appropriate merge strategy based on your team's workflow and repository history preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoBitbucket project key. If omitted, uses BITBUCKET_DEFAULT_PROJECT environment variable.
repositoryYesRepository slug containing the pull request.
prIdYesPull request ID to merge.
messageNoCustom merge commit message. If not provided, uses default merge message format.
strategyNoMerge strategy: "merge-commit" creates a merge commit preserving branch history, "squash" combines all commits into one, "fast-forward" moves the branch pointer without creating a merge commit.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It clearly indicates this is a write/mutation operation ('merge'), but doesn't disclose permissions needed, whether the merge is reversible, rate limits, or what happens on failure. It mentions strategy selection but doesn't explain default behavior if strategy is omitted.

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?

Two well-structured sentences with zero waste. First sentence states purpose and prerequisites, second provides strategic guidance. Every word earns its place, and the most critical information (what it does and when to use it) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description does well on purpose and guidelines but lacks behavioral details about permissions, reversibility, error conditions, or return values. Given the complexity of merging code changes, more transparency about what happens during execution would be beneficial.

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 5 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, but doesn't need to since schema coverage is complete. 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('merge'), the resource ('an approved pull request'), and the outcome ('into the target branch'). It distinguishes this tool from siblings like 'decline_pull_request' or 'create_pull_request' by focusing on the final integration step after approval.

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?

Explicitly states when to use this tool: 'when a PR has been reviewed, approved, and is ready to be integrated.' It also provides guidance on choosing the merge strategy based on team workflow and repository history, offering contextual decision-making criteria.

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. 15 tool updatesv1.0.0
    • First observedadd_comment
    • First observedadd_comment_inline
    • First observedbrowse_repository
    • First observedcreate_pull_request
    • First observeddecline_pull_request
    • First observedget_activities
    • First observedget_comments
    • First observedget_diff
    • First observedget_file_content
    • First observedget_pull_request
    • First observedget_reviews
    • First observedlist_projects
    • First observedlist_repositories
    • First observedmerge_pull_request
    • First observedsearch

TDQS

A4/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between 'get_activities' and 'get_comments'/'get_reviews', as activities include comments and reviews. The descriptions clarify the differences, but an agent might initially confuse these for similar data retrieval tasks. Other tools like 'add_comment' vs. 'add_comment_inline' are well-differentiated by their inline specificity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, such as 'add_comment', 'create_pull_request', and 'list_repositories'. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming conventions across the 15 tools.

Tool Count5/5

With 15 tools, the count is well-scoped for a Bitbucket server, covering core operations like pull request management, repository browsing, commenting, and searching. Each tool serves a clear purpose without redundancy, aligning with the domain's typical needs for version control and collaboration.

Completeness5/5

The tool set provides comprehensive coverage for Bitbucket operations, including full CRUD/lifecycle for pull requests (create, get, merge, decline), repository exploration (browse, list, get content), commenting (add, get), and advanced features like diff viewing and search. No obvious gaps exist; agents can handle end-to-end workflows without dead ends.

Maintenance

ActivityStale
ResponsivenessSyncing

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

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that provides tools for interacting with the Bitbucket API, supporting both Bitbucket Cloud and Bitbucket Server, enabling pull request, branch, file, code review, and search operations.
    19
    5,234
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    MCP server for Bitbucket Server integration, enabling project, repository, pull request, source code, branch, and code review operations via the Bitbucket Server APIs.
    27
    13
    MIT

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/garc33/bitbucket-server-mcp-server'

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