The README is unusually direct about the failure mode: `createInlineComment` needs the exact file path as it appears in the diff, case-sensitive, and a line number from the new version that the PR actually touched. So the working sequence is always fetch the changes, then comment — which is also the sequence you want for a review that says anything useful. Note that API tokens are not app passwords; using the wrong one authenticates as nobody.
A Quarkus-based server for Bitbucket Cloud, focused on the pull request review loop: list PRs, read one in detail, get its diffstat and its actual changed lines, then comment — either on the PR or pinned to a line in the diff. It ships as Docker images, including a GraalVM native build, and offers stdio, SSE and HTTP Stream transports.
- Reading PRs: `findAllPullRequest` for a repository, `findAPullRequest` for one by ID, `findDiffStatForPullRequest` for change statistics, `findListChangesInAPullRequest` for the added and removed lines
- Commenting: `createComment` posts a Markdown comment, `updateComment` edits one, `findAComment` and `findCommentList` read them back with pagination
- `createInlineComment` attaches a comment to a file and line number in the diff — the file path is case-sensitive and must match the diff exactly, and the line must be one the PR actually changed
- A tool that returns the authenticated user's Bitbucket profile
- Three transports: stdio via the `subrutin/bitbucket-mcp-server:stdio-0.0.2` image, or SSE at `GET /mcp/sse` and HTTP Stream at `POST /mcp/stream` from `subrutin/bitbucket-mcp-server:latest`
- A REST endpoint for listing repositories, and health endpoints, alongside the MCP surface
A Bitbucket API token created at your account's API token page, with Repositories: Read and Pull requests: Read and Write. Three environment variables: `BITBUCKET_EMAIL`, `BITBUCKET_API_TOKEN` and `BITBUCKET_WORKSPACE`. The simplest setup is Docker — your client runs the stdio image directly with those variables passed in. For the SSE and HTTP transports the container listens on port 8080. HTTPS for SSE is not supported yet, so those transports are plain HTTP.
One command plus a key — docker pull subrutin/bitbucket-mcp-server:stdio-0.0.2, then supply credentials
