Bitbucket Dc
БесплатноНе проверенBitbucket Data Center MCP server, generated by mcpify.
Описание
Bitbucket Data Center MCP server, generated by mcpify.
README
Bitbucket Data Center MCP (Model Context Protocol) server, generated by mcpify.
Building and maintaining this took real ideation, time, design effort, and compute (including LLM usage) to get right. If it's useful to you, consider sponsoring its development — any amount helps keep it going. 💛
Exposes exactly 3 tools — search, get, call — backed by an embedded semantic database (mcp_store.db), so an LLM never needs the full API surface in context. The store ships with vectorized operations for several Bitbucket Data Center versions (10.3 down to 8.19); see docs/SCHEMA_VERSIONS.md for the full list and their upstream OpenAPI sources.
Install
cargo build --release
This builds three binaries into target/release/: bitbucket-dc-mcp (the CLI/server below), bitbucket-dc-mcp-populate-embeddings, and bitbucket-dc-mcp-healthcheck. Run cargo install --path . instead if you want bitbucket-dc-mcp on your PATH so the commands below work without a target/release/ prefix.
Prebuilt binaries for macOS, Linux, and Windows are attached to each GitHub Release, along with a shell/PowerShell installer script.
Or install the published crate directly:
cargo install bitbucket-dc-mcp
Setup
cargo run -- setup
Interactively collects the API URL and the credentials your chosen auth method needs, then lets you persist them as a .env file, a local (./bitbucket-dc-mcp.config.yml) or global (~/.bitbucket-dc-mcp/config.yml) YAML config file, or a ready-to-run CLI invocation.
Supported auth methods: basic (username/password), pat (personal access token, sent as a bearer token).
Configuration
| Env var | Purpose |
|---|---|
BITBUCKET_DC_MCP_URL |
Base URL of the target API. |
BITBUCKET_DC_MCP_TOKEN / BITBUCKET_DC_MCP_API_KEY |
Overrides any stored credential for token/API-key auth — set either to authenticate without running setup first (checked before the OS keychain/encrypted-file fallback). |
BITBUCKET_DC_MCP_USERNAME / BITBUCKET_DC_MCP_PASSWORD |
Overrides any stored credential for basic auth — set both to authenticate without running setup first (checked before the OS keychain/encrypted-file fallback). |
BITBUCKET_DC_MCP_LOG_LEVEL |
Log verbosity (trace/debug/info/warn/error). |
See .env.example for the full list of supported variables.
BITBUCKET_DC_MCP_URL must end in /rest (e.g. https://bitbucket.example.com/rest). Bitbucket Data Center's REST API is served under that path prefix; if requests 404, check that your base URL includes it.
Usage
Terminal Client (default)
# 1. Semantic search over all 566 operations in the default Bitbucket store
bitbucket-dc-mcp search "list open pull requests for a repository" --limit 5
# 2. Inspect the exact method, path, and input/output schemas before calling
bitbucket-dc-mcp get getPage
# method: GET
# path: /api/latest/projects/{projectKey}/repos/{repositorySlug}/pull-requests
# 3. Path and query parameters are fields in one --args JSON object
bitbucket-dc-mcp call getPage --args '{"projectKey":"PROJ","repositorySlug":"app","state":"OPEN","limit":25}'
# Request payloads are nested under body in that same object
bitbucket-dc-mcp call createBranch --args '{"projectKey":"PROJ","repositorySlug":"app","body":{"name":"feature/docs","startPoint":"refs/heads/main"}}'
call accepts one JSON object through --args (or -a), not arbitrary per-operation CLI flags. Use get <operationId> to see the accepted field names and which ones are required.
Other subcommands: bitbucket-dc-mcp test-connection (verify the configured API URL/credentials are reachable), bitbucket-dc-mcp config (print the resolved configuration, secrets redacted), bitbucket-dc-mcp version (print the installed version), and bitbucket-dc-mcp versions (list the API spec versions this project has a store for).
Harness Server
bitbucket-dc-mcp start # stdio transport (default)
bitbucket-dc-mcp http --host 127.0.0.1 --port 3000 # HTTP transport
Connect an MCP client
stdio: after running bitbucket-dc-mcp setup, configure an MCP host to spawn the server. Include the connection settings printed by the wizard:
{
"mcpServers": {
"bitbucket-dc-mcp": {
"command": "bitbucket-dc-mcp",
"args": ["start"],
"env": {
"BITBUCKET_DC_MCP_URL": "<your target API URL>",
"BITBUCKET_DC_MCP_AUTH_METHOD": "basic",
"BITBUCKET_DC_MCP_API_VERSION": "10.3",
"BITBUCKET_DC_MCP_TRANSPORT": "stdio"
}
}
}
}
Use the absolute executable path if bitbucket-dc-mcp is not on the MCP host's PATH. The stdio server reads the connection settings from this env block and uses the credentials saved by setup.
HTTP: every request must carry its own Authorization header — HTTP transport intentionally does not fall back to credentials stored on the server:
{
"mcpServers": {
"bitbucket-dc-mcp": {
"url": "http://127.0.0.1:3000/mcp",
"headers": {
"Authorization": "<credential value>"
}
}
}
}
Keep the listener on localhost unless you have added appropriate network access controls and TLS in front of it.
Guided workflow prompts
Beyond the 3 tools, the server exposes an MCP prompts capability:
bitbucket (a master menu) plus 13 guided sub-workflow prompts
that encode multi-step sequencing knowledge — what order to call
operations in, which steps gate on which — for common Bitbucket Data
Center management tasks. Fetch bitbucket first via
prompts/get to route to the right sub-workflow, or fetch any prompt
below directly by name.
| Prompt | Use when the user wants to... |
|---|---|
bitbucket |
Start here — routes to the right guided sub-workflow |
bitbucket-projects |
Manage a project's lifecycle, settings, permissions, or avatar |
bitbucket-repositories |
Manage a repository's lifecycle, browse its contents, or manage forks/settings |
bitbucket-pull-requests |
Create, review, or merge a pull request |
bitbucket-branches-commits |
Work with commits, branches, branch permissions, tags, or compare/diff |
bitbucket-webhooks |
Set up or manage project/repo webhooks |
bitbucket-access-tokens-keys |
Manage access tokens, SSH keys, GPG keys, or commit signing |
bitbucket-secret-scanning |
Configure or review secret scanning |
bitbucket-admin |
Manage users, groups, permissions, license, or cluster/global settings |
bitbucket-build-integration |
Report build status, manage required-build merge checks, or Jira dev-panel linkage |
bitbucket-pr-rules |
Configure standing PR automation rules — default reviewers, reviewer groups, default tasks, auto-merge, auto-decline |
bitbucket-mirroring |
Set up or manage Smart Mirroring (upstream servers, mirror servers) |
bitbucket-mesh |
Register a Bitbucket Mesh node and migrate repositories onto it |
bitbucket-monitoring-diagnostics |
Check a read-only signal: indexing status, audit log, insights, application properties |
Prompt content is written to be version-agnostic across all 6 supported
API versions, the same way the 3 tools are — see
docs/SCHEMA_VERSIONS.md; no prompt ever
names a fixed operationId, since some resolve to different endpoints
depending on version.
Docker
# Stdio: the MCP client launches this one-off process and owns its stdin/stdout pipes
docker compose run --rm -T bitbucket-dc-mcp
# HTTP: a long-running network endpoint published on http://localhost:3000
docker compose up bitbucket-dc-mcp-http
Run these commands from the repository root. Docker Compose automatically discovers docker-compose.yml; bitbucket-dc-mcp and bitbucket-dc-mcp-http are service names inside that file, not filenames. Writing docker compose -f docker-compose.yml ... is equivalent, but -f is only needed when the file has another name or location, or when combining multiple Compose files.
Both services read configuration from a local .env file (copy .env.example) and persist credentials and configuration under ~/.bitbucket-dc-mcp on the host. For stdio, -T disables pseudo-TTY allocation so MCP JSON-RPC stays on raw stdin/stdout, and --rm removes the one-off container when the client exits.
Stdio is a process transport, not a listening service: the MCP client must start the server and communicate through that exact child process's stdin/stdout. This is useful when an MCP client is configured to launch docker compose run --rm -T bitbucket-dc-mcp, in local scripts or CI that directly exchange MCP messages with the process, or in a custom image where your application launches the generated server's start subcommand as a child process. Merely putting the application and server in the same image—or starting the stdio container separately with docker compose up—does not connect their streams. One stdio server process normally serves one client. Use HTTP when independently started applications, multiple clients, another container, or a remote machine need to connect over the network.
Observability & Resilience
Logging
Structured logs go to stderr (never stdout, which is reserved for MCP JSON-RPC frames on stdio transport): JSON by default, pretty-printed automatically when stderr is an interactive TTY (auto-detected — there's no separate flag for this). Level is controlled by BITBUCKET_DC_MCP_LOG_LEVEL (default info), passed straight through to tracing_subscriber::EnvFilter, so directive syntax works too, e.g.:
BITBUCKET_DC_MCP_LOG_LEVEL="bitbucket_dc_mcp=debug,warn" bitbucket-dc-mcp start
Secret redaction exists as a helper (core::sanitizer::sanitize, case-insensitive substring match on keys containing password/token/secret/authorization/apikey/api_key/api-key/credential), but today its only caller is bitbucket-dc-mcp config (which prints the resolved config with those fields redacted). Request/response payloads aren't logged at all currently — the only tracing call sites are lifecycle/error events — so there's no in-flight redaction path exercised in normal operation yet.
OpenTelemetry tracing
An OTLP/HTTP trace exporter (core/otel.rs) is built unconditionally at startup; if it fails to build, tracing export is silently skipped — there's no dedicated on/off switch in this app. It's tracing only (no OTel metrics exporter is wired up — see "Metrics" below). Point it at a collector with the OTLP SDK's own standard env vars (not BITBUCKET_DC_MCP_-prefixed), which opentelemetry-otlp reads directly:
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318 bitbucket-dc-mcp start
Defaults to http://localhost:4318 if unset. OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS, _PROTOCOL, _TIMEOUT, and _COMPRESSION are also honored (standard OTLP conventions).
Metrics
Separate from OTel: GET /metrics (HTTP transport only — not available over stdio) serves a minimal hand-rolled Prometheus-text counter store (http/metrics.rs). Today it only tracks one counter, http_requests_total:
curl http://127.0.0.1:3000/metrics
# http_requests_total 4
Circuit breaker, retries, and rate limiting
Every outbound call to the target API (services/api_client.rs) passes through a rate limiter, then a circuit breaker, then the retry loop:
| Behavior | Configurable? | Knob | Default |
|---|---|---|---|
| Request timeout | Yes | BITBUCKET_DC_MCP_TIMEOUT_MS / timeout_ms |
30000 ms |
| Retry attempts on request failure | Yes | BITBUCKET_DC_MCP_RETRY_ATTEMPTS / retry_attempts |
3 (immediate retry, no backoff/jitter) |
| Rate limit | Partially | BITBUCKET_DC_MCP_RATE_LIMIT / rate_limit |
100 calls; window is hardcoded to 1 second, not configurable |
| Circuit breaker | No | — (CircuitBreaker::default()) |
opens after 5 consecutive failures, 30s before a half-open trial call |
("Knob" here means an env var or a matching key in bitbucket-dc-mcp.config.yml/~/.bitbucket-dc-mcp/config.yml//etc/bitbucket-dc-mcp/config.yml — see the config cascade in core/config_manager.rs.)
Health checks
GET /healthz (HTTP transport only) reports the status of a ComponentRegistry, refreshed every 30 seconds with a 5-second per-check timeout by a HealthCheckManager — both intervals are hardcoded, not configurable. Today exactly one check is registered, store (can the active mcp_store*.db file be opened), marked critical:
curl http://127.0.0.1:3000/healthz
# {"status":"Healthy","components":1} # 503 + "Unhealthy" if the critical check is failing
Two related but distinct checks exist:
bitbucket-dc-mcp-healthcheck— the standalone binary wired into the Dockerfile'sHEALTHCHECK; it only checks that the active store file exists and is readable on disk, and does not talk to a running server or/healthz.bitbucket-dc-mcp test-connection— an on-demand CLI check that the target API itself is reachable with the configured credentials; unrelated to the periodic/healthzchecks above.
Credential storage
bitbucket-dc-mcp setup writes credentials straight to the OS-native secret store via the keyring crate (macOS Keychain / Windows Credential Manager / Linux Secret Service), under service bitbucket-dc-mcp, account active-credentials. If no OS keychain backend is available (e.g. no D-Bus secret-service daemon in a minimal container), it falls back automatically to an AES-256-GCM-encrypted file at ~/.bitbucket-dc-mcp/credentials.enc (0600, parent dir 0700 on Unix); the key is derived from $HOME plus the service name, so that file isn't portable to another machine.
The BITBUCKET_DC_MCP_TOKEN/BITBUCKET_DC_MCP_API_KEY (for token/API-key auth) and BITBUCKET_DC_MCP_USERNAME/BITBUCKET_DC_MCP_PASSWORD (for basic auth) env vars documented in .env.example are read directly by AuthManager::credentials() and take priority over the stored keychain/file credentials — useful for supplying credentials purely via environment (e.g. in a container) without ever running setup.
Credentials are never persisted into the .env/config-file output of setup itself; those files only carry non-secret settings, with credentials always going through the keychain/encrypted-file path.
Testing
cargo test
Coverage
bash scripts/coverage.sh # generates HTML and fails below 85% production-line coverage
The 85% gate counts executable production lines under src/ and removes inline #[cfg(test)] module bodies from the LCOV denominator, so adding test code cannot inflate the result. The unfiltered annotated HTML remains useful for line-by-line analysis at target/coverage/html/index.html; the gate's machine-readable input is target/coverage/production-lcov.info. The command requires Python 3, cargo-llvm-cov, and the llvm-tools-preview Rust component.
Profiling
bash scripts/profile.sh # clean CPU profiling via samply
bash scripts/profile-heap.sh # steady-state heap profiling via dhat-rs
CPU and heap profiling use separate builds: scripts/profile.sh deliberately profiles normal release binaries so DHAT allocation tracking cannot distort CPU samples, while scripts/profile-heap.sh starts DHAT collection only after its warmup search. CPU profiling records profile/cold-start.json.gz from a one-shot CLI search, then attaches to an already-initialized search harness and records profile/warm-search.json.gz; this keeps model initialization from being mistaken for steady-state request cost. Heap profiling defaults to 1 warmup and 5 measured searches, configurable with PROFILE_HEAP_WARMUPS, PROFILE_HEAP_ITERATIONS, and PROFILE_QUERY. Both scripts supply harmless URL/auth defaults when a generated checkout has not been configured because catalog search never calls the generated API. profile/bottleneck-report.md ranks coverage gaps and shows separate cold and warm CPU summaries. Requires samply (cargo install samply).
License
MIT — see LICENSE.
Generated by mcpify — do not hand-edit generated files; re-run mcpify against an updated OpenAPI spec instead.
Установка Bitbucket Dc
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/guercheLE/bitbucket-dc-mcp-rsFAQ
Bitbucket Dc MCP бесплатный?
Да, Bitbucket Dc MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Bitbucket Dc?
Нет, Bitbucket Dc работает без API-ключей и переменных окружения.
Bitbucket Dc — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Bitbucket Dc в Claude Desktop, Claude Code или Cursor?
Открой Bitbucket Dc на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Bitbucket Dc with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
