Native async Bitbucket Server/Data Center MCP server
23 tools with consistent naming (verb_noun pattern) and basic schemas. However, descriptions are generic (avg ~40 chars, well below 194-char baseline), parameter descriptions are sparse or missing, and output schemas are undocumented. No error handling guidance, no idempotency hints for write operations, and no permission/scope declarations. Tool definitions appear inferred from file paths rather than explicit registration code visible in the provided source. Critical gaps in LLM-facing documentation.
Add a comment to a pull request.
Browse repository files.
Create a pull request.
Decline a pull request.
List pull-request comments.
Get commit metadata.
Get a pull-request diff.
Descriptions are generic and too short (avg ~35 chars vs 194-char baseline). Examples: 'Get repository metadata' (24 chars), 'List Bitbucket projects' (23 chars). LLMs cannot distinguish when to call similar tools or understand prerequisites.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., does list_repositories return repository_id or repo_slug?). Breaks tool chaining.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Read a file at a branch, tag, or commit.
Get a project by key.
Retrieve pull-request details.
Get repository metadata.
Get pull-request activity and review history.
Get a Bitbucket user.
List repository branches.
List build statuses from Bitbucket Server's build-status API.
List commits, optionally from a branch.
List user permissions at the global, project, or repository scope.
List Bitbucket projects.
List pull requests by state.
List repositories globally or within a project.
Search or list Bitbucket users.
Merge a pull request.
Update pull-request title or description.
Irreversible operations (merge_pull_request, decline_pull_request) lack confirmation/dry-run patterns and no error recovery guidance. Agents cannot safely retry or undo.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints.
Parameter descriptions missing or trivial. Example: 'state' in list_pull_requests has no enum values or valid options documented. LLMs must guess valid inputs.