Bitbucket MCP server
Bitbucket Cloud repositories, pull requests, diffs, comments and pipelines, plus issue and branch lists, connected with an Atlassian API token.
How it connects
New to MCP? What is an MCP server?
- Runs on
- Statio's runtime
- Connects with
- Credentials you paste in once: Atlassian Email, API Token, Default Workspace
- May connect to
api.bitbucket.org- Category
- Developer Tools
What it does
This server lets an agent browse Bitbucket Cloud repositories, read and open pull requests, comment on them, read issues and commits, and read or start Pipelines runs. It is bitbucket-mcp-server, an ISC-licensed community package from WilliamLINWEN/bitbucket-mcp, and Atlassian does not maintain it. Statio runs version 3.2.0 with your Atlassian email and an API token. It talks only to api.bitbucket.org, so Bitbucket Data Center and Server are not covered.
Tools
Version 3.2.0 lists 17 tools. None of them set annotations, so the last column comes from what each tool calls in the package source. There is no tool that merges, approves or declines a pull request, deletes a branch, or changes an issue.
| Tool | What it does | Reads or changes |
|---|---|---|
repositories | Lists a workspace's repositories, or returns one when you pass repo_slug. | Reads |
pull-requests | Lists a repository's pull requests by state, or returns one when you pass pr_id. | Reads |
get-pr-diff | The full diff of a pull request. | Reads |
pr-comments | Lists a pull request's comments with their resolved state, or returns one. | Reads |
commits | Recent commits on a branch, or one commit by hash. | Reads |
list-branches | A repository's branches. | Reads |
list-issues | A repository's issues, filtered by state and kind. | Reads |
pipelines | A repository's Pipelines runs, or one run with its variables. Secured variables show as ***. | Reads |
pipeline-steps | Lists a run's steps, or with action: "log" returns one step's log output. | Reads |
search | Matches a query against names and descriptions of repositories, pull requests, issues and commit messages in one workspace. | Reads |
health-check | Calls the API to check the credentials and the workspace. | Reads |
get-metrics | Request counts and timings kept by the server process. Makes no Bitbucket call. | Reads |
create-pull-request | Opens a pull request from one branch to another, with reviewers and an option to close the source branch on merge. | Changes |
update-pr-description | Replaces a pull request's title, description or both. | Changes |
create-pr-comment | Posts a comment, an inline comment on a file and line, or a reply. | Changes |
resolve-pr-comment | Resolves or reopens a comment thread. | Changes |
trigger-pipeline | Starts a Pipelines run on a branch, tag or commit, optionally a custom pipeline by selector, with variables you pass. | Changes |
search is lighter than its name. It reads the first 100 repositories in the workspace and makes one list call per repository for pull requests and issues, then filters by substring. It does not search code, and repositories past the first 100 are skipped.
Set it up
Both setups need an API token. In Bitbucket, select your profile, then Account settings, the Security tab, Create and manage API tokens and Create API token with scopes. Give it a name and an expiry date, pick Bitbucket as the app, and choose scopes. Copy the token when it appears.
Scopes are where the real limit lives, because Bitbucket refuses any call the token isn't scoped for, whatever your MCP client allows. For an agent that only reads:
read:repository:bitbucketfor repositories, branches, commits and searchread:pullrequest:bitbucketfor pull requests, diffs and commentsread:issue:bitbucketfor issuesread:pipeline:bitbucketfor runs, steps and logsread:workspace:bitbucketandread:user:bitbucketfor the workspace and the health check
Add write:pullrequest:bitbucket only for an agent that should open pull requests or comment, and write:pipeline:bitbucket only for one that should start runs. Atlassian's docs say write:pullrequest:bitbucket also allows approving, declining and merging. This server has no tool for those, but the token can still do them for anything else that holds it. API tokens are the replacement for app passwords, and the server still accepts an app password if you set BITBUCKET_APP_PASSWORD instead.
The server signs in with your Atlassian account email and the token. A workspace or project access token also works on its own, without the email, and keeps the agent off your personal account.
Claude Code, directly:
claude mcp add bitbucket \
-e BITBUCKET_USERNAME=you@your-company.com \
-e BITBUCKET_API_TOKEN=your-token \
-e BITBUCKET_WORKSPACE=your-workspace \
-- npx -y -p bitbucket-mcp-server@3.2.0 bitbucket-mcpThe package ships two binaries, the server and a bb CLI, so -p and the bin name are both needed.
Cursor, directly, in ~/.cursor/mcp.json or .cursor/mcp.json:
{
"mcpServers": {
"bitbucket": {
"command": "npx",
"args": ["-y", "-p", "bitbucket-mcp-server@3.2.0", "bitbucket-mcp"],
"env": {
"BITBUCKET_USERNAME": "you@your-company.com",
"BITBUCKET_API_TOKEN": "${env:BITBUCKET_API_TOKEN}",
"BITBUCKET_WORKSPACE": "your-workspace"
}
}
}
}BITBUCKET_WORKSPACE is only a default for calls that don't name one. It doesn't stop a call from naming another workspace the token can reach.
The client tutorials, How to add MCP servers to Claude Code and How to set up MCP servers in Cursor, explain config scopes and how to keep the token out of files you commit.
Through Statio: install Bitbucket from the catalog, paste the email, token and default workspace under the server's Credentials, and grant tools under Permissions. A new server has no grants, so nobody can call it until you add some. The desktop app then writes your client configs. The manual entry is the local proxy URL with the server name from your dashboard, http://127.0.0.1:7777/bitbucket/mcp, added in Claude Code with claude mcp add --transport http bitbucket <url> or as a "url" in Cursor. Tools missing after that? Start a fresh session, then work through How to debug an MCP server that won't connect.
What to hold back
The missing tools help here. With no merge, approve or delete in the server, the worst an agent can do through it is open, comment and start runs. Each of those still lands under the token owner's name.
trigger-pipeline is the tool to think hardest about. With a selector it can start any custom pipeline in bitbucket-pipelines.yml, and in many repositories that includes the deploy. It also passes whatever variables the agent chooses into the run. Keep it, and the write:pipeline:bitbucket scope, away from any agent that isn't meant to deploy. An agent that reports on failed builds needs pipelines and pipeline-steps, which only read.
create-pr-comment and create-pull-request act in front of people. Reviewers you add are notified, and comments appear as yours on someone else's work. update-pr-description replaces the description a reviewer may already be reading, with no tool to see the old text. A coding agent that opens its own pull requests can reasonably have create-pull-request and create-pr-comment. Hold back resolve-pr-comment from it, since closing review threads on its own pull request is how feedback gets lost.
Pull request descriptions, comments, commit messages, issues and pipeline logs are text written by other people, and any of it can carry instructions aimed at the agent. An agent that reads diffs and comments and also holds trigger-pipeline is the setup where that text can start a deploy.
A personal API token reaches every repository you can, in every workspace you belong to, up to its scopes. A workspace or project access token narrows that to one workspace or project, which is usually the better fit for a shared agent.
With Statio you grant each tool separately, so a review agent can read diffs and post comments while a build agent reads pipelines and nothing else. MCP permissions covers how grants and denies combine, and How to give an AI agent read-only GitHub access walks through the same read-only approach on GitHub.
Questions
bitbucket-mcp-server, a community package that Atlassian does not maintain. It covers Bitbucket Cloud only.write:pullrequest:bitbucket can still merge through the API, so the scope is the limit that holds if the server changes.read: scopes and Bitbucket refuses every write. In Statio, granting only the reading tools also keeps the five write tools out of the agent's list.api.bitbucket.org.What Statio adds
- You choose which of its tools each agent may call. A tool you hold back is removed from that agent's tool list, and a call to it is refused.
- The credentials stay encrypted in Statio, so they never sit in an agent config file.
- Every call is recorded with the agent that made it, when, how long it took and whether it succeeded.
- The outbound list above is enforced outside the server's container, so it cannot reach any other host.
Lock down your first tool in minutes.
Three MCP servers, one of them hosted, and 10,000 calls a month, free and without a card. If you outgrow it the next plan is $19.
Two steps: create your account, then install the desktop app on each machine that runs an AI client.
- Keys encrypted at rest, never handed to an agent
- Cancel anytime, nothing is deleted
- How Statio handles credentials