MCP server for Bitbucket Cloud, focused on pull-request review workflows
Bitbucket MCP has well-structured tool definitions with consistent naming (verb_noun pattern), clear descriptions (avg ~120 chars), and complete input schemas with type constraints. All 11 tools are explicitly registered with descriptions and parameter schemas. However, output schemas are not documented, LLMs cannot predict response structure. Error handling returns readable messages but lacks recovery guidance (e.g., 'Try search_users() first'). Parameter descriptions are adequate but some lack format hints (e.g., 'commit' accepts 'hash or branch' but no example). No tool annotations (readOnlyHint/destructiveHint) despite clear read/write distinction. Composition is sound, tools chain well (get_pull_request returns source_commit for list_directory). Security: credentials injected via env vars, not parameters (correct). Overall: solid foundation, but missing output documentation and error recovery patterns.
WRITE — posts a comment on the PR. Provide `path` and `line` together for an inline comment.
WRITE — records the authenticated user's approval on the PR.
Reads a file's contents. If `commit` is omitted, uses the repository's default branch.
Returns full metadata for a PR (description, branches, reviewers, state).
Lists a PR's existing comments (general and inline).
Lists the commits that make up the PR.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Responses are returned as JSON but no schema is declared in tool definitions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked READ_ONLY or WRITE in metadata but not in MCP schema. LLMs cannot infer safety properties from tool definitions alone.
Error handling returns readable messages but lacks recovery guidance. E.g., BitbucketError returns status + body slice, but does not suggest next steps (retry, lookup, ask user). Pattern: 'User not found. Try search_users() with a partial name.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Returns the PR's full unified diff — the basis for a first-pass review.
Lists files and directories under a repository path at a commit/branch. Use it to explore the project structure while reviewing a PR. Empty `path` = root; `max_depth` > 1 lists recursively. To see the code as proposed in the PR, pass the `source_commit` returned by get_pull_request.
Lists a repository's PRs, filtered by state.
Lists repositories in a workspace, sorted by most recently updated.
WRITE — records that the authenticated user requests changes on the PR.
Parameter 'commit' in get_file and list_directory lacks format hint. Description says 'Commit hash or branch' but no example or regex pattern. LLMs may pass invalid values.
Destructive write tools (add_pull_request_comment, approve_pull_request, request_changes) lack confirmation or dry-run support. Agents cannot preview side effects before committing.