Source Integrations

Bitbucket

Connect a Bitbucket Cloud repository to an MCP server using either an OAuth consumer or an App Password. Bitbucket has two quirks worth front-loading: the composite username:app_password token shape and the two-hour OAuth access-token lifetime.

When to pick Bitbucket

Pick Bitbucket if your team already standardises on Atlassian. Repositories are addressed as workspace/repo_slug (for example myworkspace/app), and the credential model is App Password by default with OAuth available for one-shot human onboarding.

Option A — Connect with Bitbucket (OAuth)

Click Connect with Bitbucket on the integration form, complete the consent screen on Bitbucket, and you will land back on the integration's edit page. OAuth is great for developer onboarding and one-shot imports — see Access Token Lifetime below for why long-lived production integrations should currently prefer App Passwords.

Access token lifetime

Bitbucket OAuth access tokens live for two hours. Refresh-token handling is not yet wired in the integration. As a result, OAuth-sourced integrations stop authenticating two hours after connection. For long-lived production use, prefer App Passwords until refresh-token handling lands.

Option B — App Password

App Passwords are the long-lived option until refresh-token handling lands. Mint one at https://bitbucket.org/account/settings/app-passwords/ with the minimum scopes:

  • Account: Read — required by the validation call to GET /user.
  • Repositories: Read — required to list repositories, branches, trees, and fetch files.

Do NOT grant Repositories: Write or Repositories: Admin: The Vectoralix import pipeline is strictly read-only. The provider does not inspect the credential's actual scope set, so the stored token's blast radius is whatever you granted at issue time. If a write- or admin-scoped App Password is ever pasted in, revoke it on the Bitbucket side and issue a fresh read-only credential.

The composite token format

Bitbucket is the only provider whose Personal Access credential is two fields joined by a colon: username:app_password. The backend detects the colon and switches to HTTP Basic auth. If there is no colon, the value is treated as an OAuth bearer token.

Paste your App Password into the Access Token field in this exact format:

username:app_password

Repository addressing

Repository Name takes the workspace/repo_slug form, for example myworkspace/app. Both segments come straight from the Bitbucket URL.

API endpoints used

Method Endpoint Purpose
GET /user Authenticate token, capture identity
GET /repositories?role=member List accessible repositories (paginated)
GET /repositories/{workspace}/{repo}/refs/branches List branches (paginated)
GET /repositories/{workspace}/{repo}/src/{commit}/{path} List directory entries — walked breadth-first

Tree traversal cost vs GitHub

Bitbucket has no recursive-tree endpoint, so the integration walks one request per directory. To keep the worst case bounded, four caps apply:

Cap Value Meaning
Maximum depth 5 Subtrees deeper than 5 levels relative to the branch root are truncated.
Maximum files 10,000 Hard ceiling on files collected per call.
Maximum HTTP requests 200 Caps wide directory fan-outs.
Wall clock budget 30s Hard timeout enforced via a monotonic deadline.
Scenario GitHub Bitbucket
1 directory, 50 files 1 1
20 directories, 500 files 1 20
200 directories, 10,000 files 1 Up to 200 (capped)

Rate limits

Bitbucket allows roughly 1,000 requests per hour per user-workspace pair. The integration honours Retry-After when the provider sends it and otherwise backs off for 60 seconds.

Troubleshooting

Symptom What it means
401 or 403 on auth Bad credential or missing Account: Read. Verify your App Password format is exactly username:app_password.
429 Per-hour rate limit. Wait the suggested Retry-After interval and retry.
Tree truncated warning Repository exceeded one of the four traversal caps. Use a path filter to scope the import to the directory you actually need.