
Bitbucket
STDIOBitbucket服务器集成MCP服务
Bitbucket服务器集成MCP服务
A Node.js/TypeScript Model Context Protocol (MCP) server for Atlassian Bitbucket Server/Data Center.
This server enables AI systems (e.g., LLMs, AI coding assistants) to securely interact with your self-hosted Bitbucket repositories, pull requests, projects, and code in real time through both standard stdio and HTTP streaming transports.
Model Context Protocol (MCP) is an open standard for securely connecting AI systems to external tools and data sources. This server implements MCP for Bitbucket Server/Data Center, enabling AI assistants to interact with your Bitbucket data programmatically through standardized interfaces.
Pull and run the latest image:
# Pull the latest image from GitHub Container Registry docker pull ghcr.io/n11tech/mcp-bitbucket:latest # Run with environment variables docker run -i --rm \ -e BITBUCKET_URL="https://your-bitbucket-server.com" \ -e BITBUCKET_TOKEN="your_personal_access_token" \ ghcr.io/n11tech/mcp-bitbucket:latest
Clone the Repository:
git clone https://github.com/n11tech/mcp-bitbucket.git cd mcp-bitbucket
Build the Docker Image:
docker build -t mcp-bitbucket:latest .
Run with Docker:
docker run -i --rm \ -e BITBUCKET_URL="https://your-bitbucket-server.com" \ -e BITBUCKET_TOKEN="your_personal_access_token" \ mcp-bitbucket:latest
Clone and Install:
git clone https://github.com/n11tech/mcp-bitbucket.git cd mcp-bitbucket npm install
Build:
npm run build
Start:
npm start
You can use this Bitbucket MCP server locally with the Smithery CLI. This allows you to connect your AI tools or agents to your self-hosted Bitbucket Server/Data Center. This server is not hosted on Smithery AI cloud; you must run it yourself (locally or on your own server).
npm install -g @smithery/cli
You must run your own instance of the server (Docker recommended):
docker run -it --rm \ -e BITBUCKET_URL="https://your-bitbucket-server.com" \ -e BITBUCKET_TOKEN="your_personal_access_token" \ -e ENABLE_HTTP_TRANSPORT="true" \ -e MCP_HTTP_PORT="3001" \ -e MCP_HTTP_ENDPOINT="/mcp" \ -p 3001:3001 \ ghcr.io/n11tech/mcp-bitbucket:latest
Or, using npm:
npm run start:http
Once your server is running locally, connect to it using the local address:
npx @smithery/cli connect http://localhost:3001/mcp
Once connected, you can call tools (e.g., list repositories):
npx @smithery/cli call http://localhost:3001/mcp bitbucket_list_repositories --params '{"workspaceSlug": "your-workspace"}'
For more details, see the Smithery CLI documentation.
Note for Smithery Users:
When connecting to this MCP server via Smithery, you only need to provide:
- Bitbucket Server URL (e.g.,
<your-bitbucket-url>
)- Bitbucket Personal Access Token
All other environment variables (such as port, endpoint, API key) are managed by the server administrator or deployment and do not need to be set by end users.
If the server administrator has enabled API key authentication, you may be asked to provide an API key as well. In that case, enter the value provided by your admin.
Example:
When prompted by Smithery, enter:
bitbucketUrl: <your-bitbucket-url>
bitbucketToken: <your-bitbucket-token>
By default, this MCP server is configured for HTTP transport, which is recommended for most users and for Smithery CLI/web integrations.
Advanced users who want to run the MCP server as a local subprocess (STDIO transport) can use the following Smithery configuration:
startCommand: type: "stdio" configSchema: type: "object" required: ["bitbucketUrl", "bitbucketToken"] properties: bitbucketUrl: type: "string" description: "The base URL of your self-hosted Bitbucket instance (e.g., https://<your-bitbucket-url>)" bitbucketToken: type: "string" description: "Personal Access Token for Bitbucket Server/Data Center" commandFunction: |- (config) => ({ command: 'node', args: ['build/infrastructure/index.js'], env: { BITBUCKET_URL: config.bitbucketUrl, BITBUCKET_TOKEN: config.bitbucketToken } }) exampleConfig: bitbucketUrl: "https://<your-bitbucket-url>" bitbucketToken: "<your-bitbucket-token>"
This allows you to launch the MCP server as a subprocess and communicate via standard input/output, which may be useful for certain local agent or automation scenarios.
Variable | Description | Default | Required |
---|---|---|---|
BITBUCKET_URL | Your Bitbucket Server/Data Center URL | - | ✅ |
BITBUCKET_TOKEN | Personal Access Token | - | ✅ |
ENABLE_HTTP_TRANSPORT | Enable HTTP streaming transport | false | ❌ |
MCP_HTTP_PORT | HTTP server port | 3001 | ❌ |
MCP_HTTP_ENDPOINT | HTTP endpoint path | /stream | ❌ |
MCP_API_KEY | API key for authentication | - | ❌ |
Configure your MCP-compatible client to connect to this server. The configuration depends on your chosen transport method.
The default transport method uses standard input/output for communication. This is suitable for direct integration with AI systems that launch the server as a child process.
Example MCP Configuration:
{ "mcpServers": { "mcp-bitbucket": { "command": "docker", "args": [ "run", "-i", "--rm", "--network=host", "-e", "BITBUCKET_URL", "-e", "BITBUCKET_TOKEN", "ghcr.io/n11tech/mcp-bitbucket:latest" ], "env": { "BITBUCKET_URL": "https://your-bitbucket-server.com", "BITBUCKET_TOKEN": "your_personal_access_token" } } } }
For scenarios requiring remote connections or web-based integrations, the server supports HTTP streaming transport with Server-Sent Events (SSE).
Enable HTTP Transport:
# Using GHCR image docker run -i --rm \ -p 3001:3001 \ -e BITBUCKET_URL="https://your-bitbucket-server.com" \ -e BITBUCKET_TOKEN="your_personal_access_token" \ -e ENABLE_HTTP_TRANSPORT="true" \ -e MCP_HTTP_PORT="3001" \ -e MCP_HTTP_ENDPOINT="mcp" \ ghcr.io/n11tech/mcp-bitbucket:latest # Using npm script npm run start:http
Example MCP Configuration for HTTP Transport:
{ "mcpServers": { "mcp-bitbucket": { "command": "docker", "args": [ "run", "-i", "--rm", "-p", "3001:3001", "-e", "BITBUCKET_URL", "-e", "BITBUCKET_TOKEN", "-e", "ENABLE_HTTP_TRANSPORT", "-e", "MCP_HTTP_PORT", "-e", "MCP_HTTP_ENDPOINT", "ghcr.io/n11tech/mcp-bitbucket:latest" ], "env": { "BITBUCKET_URL": "https://your-bitbucket-server.com", "BITBUCKET_TOKEN": "your_personal_access_token", "ENABLE_HTTP_TRANSPORT": "true", "MCP_HTTP_PORT": "3001", "MCP_HTTP_ENDPOINT": "mcp" } } } }
HTTP Endpoints:
http://localhost:3001/mcp
- Send MCP requestshttp://localhost:3001/mcp
- Server-Sent Events streamhttp://localhost:3001/health
- Health check endpointFor HTTP transport, you can enable API key authentication to secure your server:
Setup API Key Authentication:
# Generate a secure API key (recommended: 32+ characters) export MCP_API_KEY="your-secure-api-key-here" # Run with authentication enabled docker run -i --rm \ -p 3001:3001 \ -e BITBUCKET_URL="https://your-bitbucket-server.com" \ -e BITBUCKET_TOKEN="your_personal_access_token" \ -e ENABLE_HTTP_TRANSPORT="true" \ -e MCP_API_KEY="your-secure-api-key-here" \ mcp-bitbucket:latest
Configuration with API Key:
{ "mcpServers": { "mcp-bitbucket": { "command": "docker", "args": [ "run", "-i", "--rm", "-p", "3001:3001", "-e", "BITBUCKET_URL", "-e", "BITBUCKET_TOKEN", "-e", "ENABLE_HTTP_TRANSPORT", "-e", "MCP_API_KEY", "mcp-bitbucket:latest" ], "env": { "BITBUCKET_URL": "https://your-bitbucket-server.com", "BITBUCKET_TOKEN": "your_personal_access_token", "ENABLE_HTTP_TRANSPORT": "true", "MCP_API_KEY": "your-secure-api-key-here" } } } }
When API key authentication is enabled, all HTTP requests must include the API key in the request headers or parameters.
// Create a pull request await callTool('bitbucket_create_pull_request', { repository: 'my-repo', title: 'Feature: Add new API endpoint', sourceBranch: 'feature/api-endpoint', targetBranch: 'main', description: 'This PR adds a new REST API endpoint for user management.' }); // Get pull request details await callTool('bitbucket_get_pull_request_details', { repository: 'my-repo', prId: 123 });
// Search repository content await callTool('bitbucket_search_content', { workspaceSlug: 'my-workspace', query: 'authentication', extension: 'js' }); // Get file content await callTool('bitbucket_get_file_content', { workspaceSlug: 'my-workspace', repoSlug: 'my-repo', filePath: 'src/auth/login.js' });
This server provides a comprehensive suite of tools for interacting with Bitbucket Server/Data Center:
bitbucket_create_pull_request
- Create new pull requestsbitbucket_get_pull_request_details
- Get PR details and metadatabitbucket_get_pull_request_diff
- Retrieve PR diffsbitbucket_get_pull_request_reviews
- Get PR review statusbitbucket_merge_pull_request
- Merge pull requestsbitbucket_decline_pull_request
- Decline pull requestsbitbucket_add_pull_request_comment
- Add general PR commentsbitbucket_list_workspaces
- List available workspacesbitbucket_list_repositories
- Browse repositoriesbitbucket_get_repository_details
- Get repository informationbitbucket_search_content
- Search within repositoriesbitbucket_get_file_content
- Read file contentsbitbucket_create_branch
- Create new branchesbitbucket_list_repository_branches
- List repository branchesbitbucket_get_user_profile
- Get user profile detailsFor detailed parameter information and usage examples, refer to the individual tool schemas in src/domain/contracts/schemas/
.
npm run build
- Compile TypeScript to JavaScriptnpm start
- Run the server with stdio transportnpm run start:http
- Run with HTTP streaming transportnpm run dev
- Watch mode for developmentnpm run lint
- Code quality checksnpm run test
- Run test suitenpm run inspector
- Debug MCP server interactions# Clone and setup git clone <repository_url> cd mcp-bitbucket npm install # Create environment file cp .env.example .env # Edit .env with your Bitbucket credentials # Development with watch mode npm run dev
The codebase follows clean architecture principles:
src/
├── application/ # Application layer
│ ├── facade/ # Client facades
│ └── use-cases/ # Business logic
├── domain/ # Domain layer
│ ├── contracts/ # Interfaces and schemas
│ ├── entity/ # Domain entities
│ └── repository/ # Repository interfaces
├── infrastructure/ # Infrastructure layer
│ ├── clients/ # External API clients
│ ├── config/ # Configuration management
│ ├── http/ # HTTP transport implementation
│ └── setup/ # Server setup and initialization
This project is licensed under the Apache License, Version 2.0.
See the LICENSE
file for more details.
Built with the Model Context Protocol