Bitbucket MCP Server
The Bitbucket MCP Server provides comprehensive tools for interacting with Bitbucket API (both Cloud and Server), enabling efficient repository management through:
Pull Request Management: Create, retrieve, update, merge, and list pull requests with filtering and pagination options.
Branch Operations: List, delete, and get detailed information about branches, including associated pull requests and commits.
Code Review: Approve/unapprove pull requests, request/remove changes, add comments (inline, general, and replies), and view diffs.
File and Directory Access: List directory contents and retrieve file content with smart truncation for large files.
Collaboration Features: Add comments with code suggestions, configure merge strategies (merge-commit, squash, fast-forward), and customize commit messages.
These capabilities enable efficient workflow management for development teams using Bitbucket repositories.
Provides tools for interacting with the Bitbucket API, supporting both Bitbucket Cloud and Bitbucket Server. Enables management of pull requests (creating, updating, listing, approving, commenting), handling code reviews, working with branches, and viewing diffs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bitbucket MCP Serverlist my open pull requests in the web-app repository"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bitbucket MCP Server
MCP server for Bitbucket — built for AI coding agents that need to work with remote repositories as if they were local clones: grep-fast code search, windowed file reads, compact token-efficient responses, and a transport layer that never trips Bitbucket's rate limits.
Supports Bitbucket Server / Data Center (primary target) and Bitbucket Cloud.
Why v3
v2 | v3 | |
Content search in a repo | 1 listing + up to 3,000 file GETs | 1 archive call cold, 0–1 calls warm |
Search completeness | silently partial under server throttling | complete, with every cap reported |
PR diff tokens | per-line JSON (~4× larger) | raw unified diff |
Read a 100-line window | 2 calls, full file transferred | 1 call, window only |
Blame a window of a huge file | up to 100 calls | 1 call |
Rate-limit safety | none (burst → 429/403) | client-side pacing sized to DC's limiter |
Tools | 33 | 25 (~30% less definition context) |
Measured on a live Data Center instance: a repeated content search went from 519 API calls / ~7s (finding 1 of 8 real matches under burst throttling) to 0 API calls / 24ms finding all 8. Full design and verified API research: REVAMP_PLAN.md.
Related MCP server: bitbucket-mcp-server
Tools (25)
Search (search) — Server/DC only
grep— search file contents with full regex, any branch, like ripgrep on a local clone. Onearchivedownload per repo+commit, streamed in constant memory, cached in-process, freshness-checked every call (responses carryas_of <commit>). Omitqueryfor filename-only glob listing. Modes:content,files,count;glob,path,context,case_insensitive,max_results.search_code— index-backed exact-term search across a whole project in one call (default branch only, case-insensitive, no regex, files <512 KiB, ~1000-result window). Best for cross-repo identifier lookups; usegrepfor everything else.search_repositories— find repos by name/description.
Pull requests (pr_core)
get_pull_request— metadata + reviewer status + merge info in 1 call;include_comments/include_file_changes(default true),include_tasks,comment_limit. Returnsversionfor follow-up mutations.list_pull_requests— repo-scoped; omitrepository(Server) for your PRs across all repos in one call (rolefilter).create_pull_request,update_pull_request,merge_pull_request,decline_pull_request— all mutations acceptversionfrom a prior read (saves a fetch; auto-refetch + retry once on 409 conflicts).
Comments & tasks (pr_comments)
add_comment— general, threaded reply, inline (file_path+line_number, orcode_snippetauto-resolution), codesuggestion, or task (severity: "BLOCKER", Server). Attachments upload via theattachmentsparam (Server).manage_comment—edit/delete/resolve/reopen/to_task/to_commenton any comment or task, one call withversion.
Review (pr_review)
get_pull_request_diff— raw unified diff text; scope withfile_path(server-side),include_patterns/exclude_patterns,context_lines,ignore_whitespace.set_review_status—APPROVED/NEEDS_WORK/UNAPPROVED(mutually exclusive; one call).
Commits (commits)
list_pr_commits,list_branch_commits(server-sidesince-rev/mergesfilters; bounded page-walk for client-sideauthor/until/search),get_commit_detail(unified diff, ordetail: "files"for the changed-file list without bodies).
Branches (branches)
list_branches,get_branch(branch + its PRs),delete_branch(expected_headskips the lookup call).
Files (files)
get_file_content— windowed server-side:start_line/line_counttransfer only that window (≤5000 lines/call).full_content/ negativestart_linefor whole-file or tail reads.get_file_blame— commit-span blame for a line window in 1 call (Server).list_directory_content— paginated, compact.
Attachments (attachments, Server) / Discovery (discovery)
manage_attachments(downloadcapped,delete),list_projects,list_repositories.
Output conventions
Bulk content (diffs, files, grep results) is plain text, not JSON-escaped strings; lists are compact JSON without pretty-printing. Dates are ISO-8601.
Content-derived responses carry
as_of <commit>so the agent knows exactly which state it saw.Truncation is never silent — every cap produces an explicit warning with continuation guidance (
next_start, "narrow the glob", etc.).Mutable entities include
version, so mutations don't need a re-read.
Installation
Using npx (recommended)
{
"mcpServers": {
"bitbucket": {
"command": "npx",
"args": ["-y", "@nexus2520/bitbucket-mcp-server"],
"env": {
"BITBUCKET_USERNAME": "your.username",
"BITBUCKET_TOKEN": "your-http-access-token",
"BITBUCKET_BASE_URL": "https://bitbucket.yourcompany.com"
}
}
}
}For Bitbucket Cloud use BITBUCKET_APP_PASSWORD instead of BITBUCKET_TOKEN (and omit BITBUCKET_BASE_URL).
Credential walkthroughs: Cloud app password · Server/DC HTTP token.
From source
git clone https://github.com/pdogra1299/bitbucket-mcp-server.git
cd bitbucket-mcp-server
npm install && npm run build
# point your MCP config at: node <repo>/build/index.jsConfiguration
Every numeric policy is environment-tunable — nothing is hard-coded. The full table lives in src/config/index.ts (CONFIG_REFERENCE). The ones that matter most:
Variable | Default | Purpose |
|
| Client-side sustained request rate (DC's per-user refill is 5/s). |
|
| Burst capacity (DC's server bucket is 60) |
|
| Max in-flight requests across all tools |
|
| In-memory grep cache budget. |
|
| Files larger than this are scanned but not cached |
|
| Branch→SHA freshness memo; |
|
| Abort archive scans past this many extracted MB (falls back to bounded per-file scan) |
|
| Per-request timeout |
| all | Comma-separated groups to expose (validated, enforced at dispatch, fails closed) |
The grep engine's guarantees
Memory-bounded: the archive is streamed, never buffered whole; the cache is a hard byte budget with LRU eviction and content-hash dedup across branches. Worst case = budget + a few MB transient.
Fresh: every query re-resolves the branch head; a moved branch can never serve stale results. Merges/deletes made through this server invalidate immediately.
Complete: cache limits never reduce scan coverage — oversized files are still scanned; only true binaries are skipped, and they're counted in the output.
Rate limiting
All requests flow through a token bucket sized to Bitbucket DC's per-user limiter, so 429s are avoided rather than retried-after. If your instance throttles hard anyway, the error message says exactly what to do — the durable fix is asking a Bitbucket admin for a rate-limit exemption for the service account (Admin → Rate limiting → Exemptions), then setting BITBUCKET_RATE_LIMIT_RPS=0.
Migrating from v2
Removed tools and their v3 equivalents (same capabilities, fewer tools):
v2 | v3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Update Claude Code permission allowlists (mcp__bitbucket__*) accordingly. Diff tools now return unified diff text instead of per-line JSON — line numbers come from @@ headers. Full details in CHANGELOG.md.
Development
npm run build # tsc → build/
npm test # build + node --test (unit + snapshot-engine tests)Architecture: src/config (all policy) · src/core (transport, snapshot engine, caches) · src/handlers (tool logic) · src/tools (definitions, guards, registry) · src/formatting (compact output) · src/types (single barrel).
License
MIT
Available Tools
20 toolsadd_commentA
Add a PR comment: general, threaded reply (parent_comment_id), inline (file_path + line_number), code suggestion (suggestion), or task (severity BLOCKER, Server only). code_snippet auto-resolves line_number from exact diff text when line_number is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| severity | No | BLOCKER creates a task (Server only) | |
| file_path | No | Inline comment file | |
| line_type | No | Default CONTEXT | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| suggestion | No | Replacement code block; needs file_path + line_number | |
| attachments | No | Local files to upload & embed (Server/DC only). Item: path string or {file_path, alt_text?, render?: image|link|auto} | |
| line_number | No | Inline comment line (or use code_snippet) | |
| code_snippet | No | Exact diff line text to locate (whitespace-sensitive) | |
| comment_text | Yes | ||
| match_strategy | No | On multiple snippet matches (default strict) | |
| search_context | No | Disambiguates repeated code_snippet | |
| pull_request_id | Yes | Pull request ID | |
| parent_comment_id | No | Reply to this comment | |
| suggestion_end_line | No | Multi-line suggestion end |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses platform limitations (task/attachments are 'Server only') and the auto-resolution behavior of code_snippet, which are real behavioral traits. But it omits permissions, idempotency, and whether the operation is reversible, leaving meaningful gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences front-load the mode enumeration, which is the most decision-relevant information, then add the code_snippet fallback. No filler and no repetition of structured data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with nested objects and no output schema, the description covers the essential mode-selection logic and the notable code_snippet behavior. It is largely complete, though the unaddressed manage_comment relationship and mutation side-effects are minor omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 93%, so the schema already documents most parameters (baseline 3). The description goes beyond it by mapping parameter combinations to comment modes and explaining that code_snippet auto-resolves line_number when it is unknown, adding genuine semantic glue the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Add a PR comment') and enumerates the comment modes it supports (general, threaded reply, inline, suggestion, task). The agent knows precisely what operation is performed. It does not, however, distinguish itself from the sibling manage_comment, leaving ambiguity about which tool owns comment mutations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mode enumeration effectively doubles as usage guidance by mapping each comment type to its triggering parameters (parent_comment_id for reply, file_path+line_number for inline, suggestion for suggestions, severity BLOCKER for tasks). It gives clear selection conditions among modes but offers no when-not-to-use guidance and never references the manage_comment alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pull_requestD
Create a pull request.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| reviewers | No | Reviewer usernames | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| attachments | No | Local files to upload & embed (Server/DC only). Item: path string or {file_path, alt_text?, render?: image|link|auto} | |
| description | No | ||
| source_branch | Yes | ||
| destination_branch | Yes | ||
| close_source_branch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a mutation tool, and it discloses none of it. It does not state auth/permission requirements, whether the created PR is a draft, how branch conflicts are handled, or whether the operation is reversible. This is a serious gap for a 9-parameter write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but that brevity reflects under-specification rather than tight writing. There is no front-loaded structure or prioritization of information because there is almost no information at all.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity mutation tool with 9 parameters, 5 required, 44% schema coverage, no annotations, and no output schema, the description is completely inadequate. An agent has no way to know the return value, side effects, or how to correctly populate several fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 44%, and the description adds no parameter meaning at all. Key parameters like source_branch, destination_branch, title, and close_source_branch are bare strings/booleans in the schema with no explanation in either place, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Create a pull request'), so an agent knows the basic operation. However, it adds nothing beyond the tool name and provides no differentiation from siblings like update_pull_request, merge_pull_request, or decline_pull_request. It is the minimum viable statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the other PR-related siblings, no prerequisites (e.g., branches must exist), and no exclusions. The single sentence offers nothing about selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decline_pull_requestC
Decline a pull request, optionally with a comment. Pass version to save a fetch (Server).
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Reason for declining | |
| version | No | Entity version from a prior read; supplying it saves a fetch AND makes the write conditional — it fails on concurrent modification instead of overwriting. Omit to write against the latest state (auto-retried once). | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| pull_request_id | Yes | Pull request ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but says nothing about the consequences of declining (state transition, reversibility, notifications) or auth requirements. The version note hints at server-side concurrency handling, but that nuance is already elaborated in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded and no filler. The parenthetical '(Server)' is slightly cryptic, but overall it is efficiently sized for the tool's scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is too thin: it omits what declining actually does, whether it is reversible, and any permission or state preconditions. The rich schema compensates on parameters, but the behavioral picture remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the comment and version semantics are already fully documented in the schema. The description adds no meaning beyond it, and 100% coverage establishes the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (decline) and resource (pull request), plus the optional comment capability. It is distinguishable from merge_pull_request or set_review_status, though it does not explicitly contrast itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to decline versus merge, close, or update a PR, and no stated prerequisites (e.g., PR must be open, required permissions). The only hint at usage is the passing mention of the optional comment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_branchC
Delete a branch. Pass expected_head (commit SHA) to skip the lookup call (Server).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| branch_name | Yes | ||
| expected_head | No | Known head SHA (compare-and-swap) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure burden. It notes that expected_head skips a server lookup, which is useful context. However, it does not state that deleting a branch is destructive, irreversible, or permission-sensitive, nor what happens on a SHA mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and immediately followed by the most useful optional-parameter hint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no annotations and no output schema, the definition is too thin. It omits permissions, irreversibility, side effects, error behavior when expected_head mismatches, and any return information an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents workspace, repository, and expected_head. The description adds meaning for expected_head by explaining that passing it avoids a lookup call. It does nothing for branch_name, which lacks a schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Delete a branch.' That is clear and unambiguous. It does not explicitly distinguish itself from siblings like get_branch or list_branches, though the verb makes the distinction obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance given is a performance tip for expected_head: pass it to skip a lookup call. There is no indication of when to use this tool versus alternatives, no prerequisites, and no exclusions or warnings about branch deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_branchB
Get a branch with its latest commit and open PRs (include_merged_prs adds merged ones).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| branch_name | Yes | ||
| include_merged_prs | No | Default false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It does add real behavioral context: the default response includes open PRs only, and merged PRs are pulled in when include_merged_prs is set. However, it says nothing about read-only nature, permissions needed, or behavior when the branch does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clause-dense sentence with the core action front-loaded and the modifier explained inline in parentheses. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does the important work of stating what is returned (branch, latest commit, open/merged PRs), which is what an agent most needs here. It stops short of failure modes or ordering guarantees.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description's parenthetical is what actually explains what include_merged_prs toggles (merged PRs are added to the result), which the schema's bare 'Default false' does not. The undocumented branch_name parameter and the workspace/repository params get no additional meaning from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Get a branch') and enumerates the payload (latest commit, open PRs). It implicitly separates itself from list_branches and list_branch_commits by being a single-branch detail fetch, but it never names a sibling to make the boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as list_branches or list_branch_commits. The agent must infer the use case from the word 'Get' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commit_detailA
Get a commit diff as raw unified diff text, or detail:"files" for just the changed-file list (no diff bodies).
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | Default diff | |
| commit_id | Yes | Commit SHA | |
| file_path | No | Diff one file only | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| context_lines | No | Default 3 | |
| exclude_patterns | No | ||
| include_patterns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the return format (raw unified diff text) and what the "files" mode omits, which is genuinely useful. However, it says nothing about permissions, diff-size limits/truncation for large commits, or how include/exclude patterns interact with file_path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence, front-loaded with the primary output format and then the alternate mode. Minor awkwardness in the quoted "detail:"files"" fragment, but no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no annotations and no output schema, the description covers the two output shapes but omits how context_lines, file_path, and include/exclude_patterns affect the result, and says nothing about limits on large diffs. Adequate but with clear gaps given the parameter count.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already high at 75%, so the baseline is 3, and the description earns a bump by explaining the meaning of the detail enum: "files" yields the changed-file list without diff bodies while the default produces the full diff. That adds behavioral meaning to the enum beyond the terse schema text "Default diff".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Get a commit diff") and immediately distinguishes its two output modes (raw unified diff vs. file-only list). It is clearly the commit-level counterpart to the sibling get_pull_request_diff, though it never names that sibling explicitly to complete the differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the condition for the "files" mode ("no diff bodies"), which is useful selection guidance, but gives no direction on when to prefer this over get_pull_request_diff, get_file_content, or list_branch_commits. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_contentA
Read a file. Windowed by default (start_line/line_count fetch ONLY that window server-side; ≤5000 lines per call). full_content=true or negative start_line (tail) fetches the whole file — prefer windows.
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | Branch (default: default branch) | |
| file_path | Yes | ||
| workspace | Yes | Project key (e.g., PROJ) | |
| line_count | No | ||
| repository | Yes | Repository slug | |
| start_line | No | 1-based; negative = from end | |
| full_content | No | Entire file regardless of size |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that windows are applied server-side, the 5000-line-per-call cap, and that negative start_line triggers a tail fetch of the whole file. It omits error behavior, defaults for line_count, and auth/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the default behavior and the 5000-line limit front-loaded, followed by the exception and a preference hint. Dense but not wasteful; the parenthetical tail note is slightly compressed but readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param read tool with no annotations and no output schema, the description covers the important fetch-mode semantics and limits. Remaining gaps (return format, error cases, line_count defaults) are minor relative to what is disclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, and the description adds real meaning beyond it: the server-side nature of start_line/line_count, the 5000-line ceiling per call, and the tail semantics of negative start_line. It still doesn't clarify how line_count behaves without start_line or default values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read a file') and immediately frames the core behavioral model: windowed reads by default with a full-content escape hatch. It is clearly distinguishable from siblings like list_directory_content or get_pull_request_diff, though it doesn't explicitly name what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear guidance on mode selection ('prefer windows', use full_content or negative start_line only when the whole file is needed). It lacks explicit when-not guidance or named alternatives, but the default-mode guidance is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestA
Get a pull request: metadata, reviewer status, merge info, comments and changed files. Set include_comments/include_file_changes false for a 1-call metadata read; include_tasks lists open/resolved tasks. Response carries version for follow-up mutations.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| comment_limit | No | Max comments embedded (default 20) | |
| include_tasks | No | Embed PR tasks (Server only, default false) | |
| pull_request_id | Yes | Pull request ID | |
| include_comments | No | Embed active comments (default true) | |
| include_file_changes | No | Embed changed-file list (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses that the response carries `version` for follow-up mutations and explains the flag-driven payload options, but omits permissions/auth requirements, pagination behavior, and comment_limit semantics already hinted at only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the core purpose, then the flag/behavior notes and the version field. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description adequately covers the returned payload categories, the key toggles, and the version field needed for mutation follow-ups. Minor gaps around auth and pagination keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real interpretive value: it explains the effect of include_comments/include_file_changes (a lean 1-call metadata read) and what include_tasks surfaces. Only comment_limit is left unexplained in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Get) + resource (pull request) with an enumeration of the returned data (metadata, reviewer status, merge info, comments, changed files). This distinguishes it from list_pull_requests and get_pull_request_diff without naming them, so it stops just short of explicit sibling routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use guidance: set include_comments/include_file_changes false for a 1-call metadata read. It does not, however, explicitly name alternative tools (e.g., get_pull_request_diff for diffs) or state exclusions, so it lacks full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_request_diffA
Get a PR diff as raw unified diff text (line numbers derive from @@ headers; +/- prefixes mark ADDED/REMOVED). Scope with file_path (server-side) or include/exclude glob patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | Diff one file only | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| context_lines | No | Default 3; 0 = minimal | |
| pull_request_id | Yes | Pull request ID | |
| exclude_patterns | No | Globs to exclude | |
| include_patterns | No | Globs to include | |
| ignore_whitespace | No | Server only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does add genuine behavioral context: the output is unified diff text, line numbers come from @@ headers, and +/- prefixes mean added/removed. It also flags that file_path filtering and ignore_whitespace happen server-side. It omits large-diff/truncation behavior, binary file handling, and whether the raw text is paginated, which are notable gaps for a diff-returning read tool but not disqualifying.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the verb, resource, and output format, then scoping options. No filler, no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter read tool with no annotations and no output schema, the description covers the essentials: what is returned and how to scope it. The absence of output schema is largely compensated by the explicit format description, though size/truncation behavior on large diffs remains unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by framing file_path as the server-side single-file scope versus include/exclude globs, clarifying how the three scoping parameters relate. It does not explain precedence when file_path and patterns are combined, so it falls short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a PR diff') plus the exact return format ('raw unified diff text'), which cleanly separates it from siblings like get_pull_request or get_file_content. An agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how to narrow results ('Scope with file_path (server-side) or include/exclude glob patterns'), which is real usage guidance, but it never states when to prefer this tool over get_pull_request or get_file_content, nor any exclusions or preconditions. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_branch_commitsA
List commits on a branch. since (as a rev) and include_merge_commits filter server-side; author/until/search and date-valued since filter client-side over a bounded page walk (noted when more pages exist).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 25) | |
| since | No | ISO date lower bound, or a commit SHA/ref (exclusive) for a server-side range | |
| start | No | Pagination start (default 0) | |
| until | No | ISO date upper bound | |
| author | No | ||
| search | No | Substring in commit message | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| branch_name | Yes | ||
| include_build_status | No | Server only | |
| include_merge_commits | No | Default true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose non-obvious behavior: since-as-rev and include_merge_commits are filtered server-side, while author/until/search and date-valued since are filtered client-side over a bounded page walk. It also notes when more pages exist, which sets pagination expectations. It stops short of describing result shape or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the core purpose front-loaded and no filler. The second sentence is information-packed but slightly compressed, packing four filter behaviors into one clause chain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter read tool with no output schema, the description covers the filtering semantics that matter most and signals pagination. It could say more about the returned commit fields, but the operational behavior an agent needs to call it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 82%, so the schema supplies most parameter meaning. The description still adds real value by clarifying the dual nature of `since` (rev means server-side, date means client-side) and the server-side treatment of include_merge_commits, resolving an ambiguity the schema leaves implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List commits on a branch"), which separates it from get_commit_detail and list_pr_commits by scope. However, it never explicitly contrasts itself with those siblings, so the differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains which filters run server-side vs client-side, which implicitly tells the agent when a filter is cheap, but it offers no explicit when-to-use guidance or exclusions relative to siblings like list_pr_commits or get_commit_detail. Usage is implied by the branch-scoped framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_branchesC
List branches (most recently modified first on Server).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 25) | |
| start | No | Pagination start (default 0) | |
| filter | No | Name filter | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does note the sort order ('most recently modified first on Server'), which is genuine behavioral context, but the cryptic 'on Server' qualifier is unexplained and it says nothing about read-only nature, pagination behavior, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource front-loaded and no padding. The parenthetical ordering hint is arguably worth keeping, though 'on Server' is vague enough to verge on noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list tool with full schema coverage and no output schema, the description covers the essentials minimally. It omits any mention of pagination semantics or how branch listing relates to the sibling branch tools, leaving a real gap given the tool's role in a large PR-management suite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with limit, start, filter, workspace, and repository all self-documented, so the schema already does the heavy lifting. The description adds no parameter-level meaning beyond what the schema provides, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List branches') and adds an ordering note, so an agent knows it returns a collection rather than a single branch. It does not explicitly differentiate itself from siblings like get_branch or list_branch_commits, but the verb choice makes the distinction reasonably inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: no indication of when to prefer this over get_branch (single branch) or list_branch_commits (commits within a branch). The workspace/repository scoping it requires is only discoverable from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_directory_contentB
List files and directories at a repository path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Default: root | |
| branch | No | Branch (default: default branch) | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'List' implies a read, but it says nothing about whether the listing is recursive, how results are ordered or paginated, permission requirements, or output size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Parameters are fully covered by the schema and the operation is a simple read, but with no annotations or output schema the description should disclose recursion behavior, result ordering, and the shape of the listing. It is minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters (path, branch, workspace, repository) are already documented in the schema, including defaults. The description adds no format or syntax detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (files and directories) scoped to a repository path. It is implicitly distinguishable from siblings like get_file_content or list_branches, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no pointer to alternatives such as get_file_content for reading a specific file. The agent must infer context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pr_commitsC
List commits in a pull request.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 25) | |
| start | No | Pagination start (default 0) | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| pull_request_id | Yes | Pull request ID | |
| include_build_status | No | CI status per commit (Server only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. 'List' implies a read-only, non-destructive operation, but nothing is said about pagination defaults, result ordering, permissions, or the server-only nature of include_build_status beyond what the schema already notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler, which is appropriately efficient. It is arguably under-specified for a six-parameter tool, but not verbose or wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only place return shape and pagination behavior could be explained, and it says nothing about them. The 100% schema coverage compensates for the parameter side, keeping this at a minimum-viable 3.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (including limit, start, and include_build_status) are already documented in the schema. The description adds no syntax or format meaning beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List), resource (commits), and scope (in a pull request), so an agent can distinguish it from get_commit_detail or list_branch_commits. It is clear but does not explicitly name or contrast the nearest sibling (list_branch_commits), leaving that inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, prerequisites, or alternatives. It does not tell the agent when to prefer this over list_branch_commits or get_pull_request_diff, so selection relies entirely on the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsC
List accessible projects/workspaces.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name filter | |
| limit | No | Max results (default 25) | |
| start | No | Pagination start (default 0) | |
| permission | No | e.g. PROJECT_READ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only, permission-scoped listing via 'accessible' but says nothing about pagination behavior, result counts, ordering, or what happens with the permission filter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. However, the extreme brevity edges into under-specification rather than optimal conciseness for a 4-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four optional parameters, no required params, and no output schema, the description omits pagination guidance, the meaning of the permission filter, and any result shape hints. It is too thin to fully guide invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the four parameters (name, limit, start, permission) are already documented in the schema. The description adds no extra meaning such as filter matching semantics or how permission interacts with 'accessible'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('List') and resource ('projects/workspaces') with the scope qualifier 'accessible'. It does not distinguish itself from the nearest sibling (list_repositories) or explain how projects differ from workspaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool versus list_repositories or any other listing tool, nor any mention of prerequisites or when the result would be empty. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pull_requestsA
List pull requests in a repository. Omit repository (Server only) to list YOUR PRs across all repos in one call (filter with role).
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Cross-repo mode only | |
| limit | No | Max results (default 25) | |
| start | No | Pagination start (default 0) | |
| state | No | Default OPEN | |
| author | No | Filter by author username | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | No | Repository slug; omit for cross-repo dashboard (Server) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the dual-mode behavior (cross-repo aggregation gated on omitting repository, which is Server-only), but says nothing about return format, pagination, ordering, or auth requirements for a 7-param list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with strong front-loading: the primary action leads, and the conditional cross-repo mode follows. Dense but no wasted words; could be marginally clearer about defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage and 7 params, the schema handles parameter mechanics. The description covers the key mode split but omits return shape and result ordering; for a moderately complex list tool with no output schema, an agent still lacks some context on what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented in the schema (including `role` as 'Cross-repo mode only' and `repository` omission). The description mostly restates the schema's cross-repo interaction, adding emphasis rather than new semantics — baseline 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List pull requests') plus a scope variant (repo-scoped vs cross-repo dashboard), which cleanly separates it from get_pull_request. It never names a sibling explicitly, but the resource and mode distinction make its role obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real when-to-use guidance: omit `repository` to aggregate YOUR PRs across all repos and refine with `role`. It does not name alternative tools (e.g., get_pull_request for a single PR) or state exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_repositoriesC
List repositories in a project (or all accessible on Server).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name filter | |
| limit | No | Max results (default 25) | |
| start | No | Pagination start (default 0) | |
| workspace | No | Project key (required on Cloud) | |
| permission | No | e.g. REPO_READ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds one useful trait (host-dependent scoping: project-scoped or all accessible on Server), but says nothing about pagination behavior, permission requirements, result ordering, or authentication. For a 5-parameter listing tool with zero annotation coverage, this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the core purpose arrives immediately. The parenthetical is slightly compressed but still earns its place by conveying the Server-scope behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All parameters are optional and there is no output schema, so the description need not explain returns. However, with no annotations and a Cloud/Server distinction that changes required parameters, the definition should say more about defaults, pagination, and platform-dependent behavior than one clause.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema, and the description adds no parameter-level meaning beyond the host qualifier. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (repositories) with a scope qualifier distinguishing project-scoped from all-accessible-on-Server. No sibling tool shares this resource, so differentiation is largely unnecessary, but the description never says how it relates to list_projects. Clear and specific, just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives no when-to-use guidance, no alternatives, and no prerequisites. The parenthetical hints that behavior differs by host, but it never states which condition (project vs Server-wide) the caller should choose or that `workspace` is required on Cloud. The agent must infer all of this from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_commentA
Edit/delete/resolve/reopen a PR comment or task, or convert between comment and task (to_task/to_comment are Server-only). Pass version (from get_pull_request output) to save a fetch (Server).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | New text (edit only) | |
| action | Yes | ||
| version | No | Entity version from a prior read; supplying it saves a fetch AND makes the write conditional — it fails on concurrent modification instead of overwriting. Omit to write against the latest state (auto-retried once). | |
| workspace | Yes | Project key (e.g., PROJ) | |
| comment_id | Yes | ||
| repository | Yes | Repository slug | |
| pull_request_id | Yes | Pull request ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and it partially delivers: it discloses the Server-only restriction on to_task/to_comment and hints that version makes writes faster. However, it omits whether delete is reversible, what permissions are required, and what happens to concurrent edits beyond the schema note. Adequate but incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences that front-load the action set before the constraint and version note. No obvious filler, though the parenthetical Server annotations are slightly terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action mutation tool with no output schema, the description covers the operation set and the version/Server constraints but leaves return values, error behavior, and permission requirements unaddressed. It is minimally sufficient rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so most parameters are self-documented. The description adds the source of version ('from get_pull_request output'), which the schema does not state, but contributes nothing else beyond the schema for text/action/workspace. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the specific operations (edit, delete, resolve, reopen, convert) applied to a concrete resource (PR comment or task). This cleanly separates it from siblings like add_comment (which creates) and the update_pull_request family. An agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The action list implies when to use each operation, and the '(Server-only)' note scopes to_task/to_comment, but there is no explicit guidance on when to choose this over add_comment or how a caller decides between action values. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_pull_requestC
Merge a pull request. Pass version to save a fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Entity version from a prior read; supplying it saves a fetch AND makes the write conditional — it fails on concurrent modification instead of overwriting. Omit to write against the latest state (auto-retried once). | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| commit_message | No | ||
| merge_strategy | No | Cloud only | |
| pull_request_id | Yes | Pull request ID | |
| close_source_branch | No | Cloud only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose that merging is an irreversible state change, what permissions are required, what happens to the source branch by default, or how merge conflicts/strategy defaults are handled. The 'Pass version to save a fetch' line merely restates schema content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action, with no wasted words. The brevity is efficient, though the second sentence spends space duplicating schema detail instead of covering the gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, annotation-free mutation with no output schema, the description is too thin: it omits merge prerequisites, failure modes, and the effect of merge_strategy/close_source_branch defaults. An agent could call it, but without knowing the consequences or preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the schema already documents `version`, `merge_strategy`, `close_source_branch`, and the identifier parameters thoroughly. The description's `version` sentence is redundant with the schema's own (richer) explanation, so it adds no meaning — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Merge a pull request'), which cleanly separates it from siblings like decline_pull_request, update_pull_request, and create_pull_request. It stops short of naming any sibling or stating scope (e.g., required approvals), but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to merge versus decline or update, nor any prerequisites such as the PR being approved or conflict-free. The only contextual sentence is about the `version` parameter, which is invocation advice rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_review_statusA
Set YOUR reviewer status on a PR: APPROVED, NEEDS_WORK (request changes), or UNAPPROVED (clear). One call; the three states are mutually exclusive.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| comment | No | Optional explanatory comment | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| pull_request_id | Yes | Pull request ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It usefully discloses that this applies to the calling user ("YOUR") and that the states are mutually exclusive, implying a single overwritten state. However it omits permissions required, whether an existing review is overwritten, reversibility, and notification side effects for what is a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and target, then the state enumeration. Every clause carries information; no filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema or annotations, so the description must cover enough for a mutation call. It handles the core state semantics well but leaves gaps: whether review state is overwritten, auth/permission requirements, and what the call returns. Adequate but with clear holes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is 3, but the description adds real meaning to the enum: NEEDS_WORK is glossed as "request changes" and UNAPPROVED as "clear," which the bare enum values do not convey. It does not explain the optional comment parameter's role beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Set) plus resource (YOUR reviewer status on a PR) and enumerates the three mutually exclusive target states. No sibling tool in the list sets review status, so the scope is unambiguous and an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"One call; the three states are mutually exclusive" gives implicit usage guidance about how the tool is invoked, but there is no explicit when-to-use/when-not or routing to alternatives (e.g., add_comment for discussion versus NEEDS_WORK for blocking). Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pull_requestA
Update a pull request. Reviewers/approvals are preserved unless reviewers is passed. Pass version (from get/list) to save a fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| version | No | Entity version from a prior read; supplying it saves a fetch AND makes the write conditional — it fails on concurrent modification instead of overwriting. Omit to write against the latest state (auto-retried once). | |
| reviewers | No | Replaces reviewer list; approvals preserved | |
| workspace | Yes | Project key (e.g., PROJ) | |
| repository | Yes | Repository slug | |
| attachments | No | Local files to upload & embed (Server/DC only). Item: path string or {file_path, alt_text?, render?: image|link|auto} | |
| description | No | ||
| pull_request_id | Yes | Pull request ID | |
| destination_branch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does so well: it explains that reviewers/approvals are preserved unless `reviewers` is passed, and that supplying `version` makes the write conditional and fails on concurrent modification. It still omits permission requirements and whether all fields are optional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose and followed by the two highest-value behavioral caveats. No filler and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations and no output schema, the description covers the trickiest fields (reviewers, version) but never mentions that title/description/destination_branch can be changed, nor whether the write is partial or full-replacement. It is adequate but leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the schema already documents `version`, `reviewers`, `attachments`, and the required identifiers. The description adds genuine cross-cutting meaning about the reviewer/approval interaction and the version fetch-save behavior, though title, description, and destination_branch remain unexplained in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Update a pull request'), making it immediately distinguishable from create/merge/decline siblings. It does not explicitly name those siblings, but the mutation scope is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives conditional guidance on the `version` parameter (pass to save a fetch, or omit for auto-retry), which implies when each mode is appropriate. However, there is no explicit statement of when to use this tool versus alternatives like merge or set_review_status, and no prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
25 tool updates
v3.0.1- Changed
add_comment16 fields changed- added
Input schema / properties / attachmentsAdded value: +{ + "description": "Local files to upload & embed (Server/DC only). Item: path string or {file_path, alt_text?, render?: image|link|auto}", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "properties": { + "alt_text": { + "type": "string" + }, + "file_path": { + "type": "string" + }, + "render": { + "enum": [ + "image", + "link", + "auto" + ], + "type": "string" + } + }, + "required": [ + "file_path" + ], + "type": "object" + } + ] + }, + "type": "array" +} - changed
Input schema / properties / code_snippet / descriptionPrevious value: -"Exact code text from the diff to find and comment on. Use this instead of line_number for auto-detection. Must match exactly including whitespace (optional)"New value: +"Exact diff line text to locate (whitespace-sensitive)" - removed
Input schema / properties / comment_text / descriptionRemoved value: -"The main comment text. For suggestions, this is the explanation before the code suggestion." - changed
Input schema / properties / file_path / descriptionPrevious value: -"File path for inline comment. Required for inline comments. Example: \"src/components/Button.js\" (optional)"New value: +"Inline comment file" - changed
Input schema / properties / line_number / descriptionPrevious value: -"Exact line number in the file. Use this OR code_snippet, not both. Required with file_path unless using code_snippet (optional)"New value: +"Inline comment line (or use code_snippet)" - changed
Input schema / properties / line_type / descriptionPrevious value: -"Type of line: ADDED (green/new lines), REMOVED (red/deleted lines), or CONTEXT (unchanged lines). Default: CONTEXT"New value: +"Default CONTEXT" - changed
Input schema / properties / match_strategy / descriptionPrevious value: -"How to handle multiple matches when using code_snippet. \"strict\": fail with detailed error showing all matches. \"best\": automatically pick the highest confidence match. Default: \"strict\""New value: +"On multiple snippet matches (default strict)" - changed
Input schema / properties / parent_comment_id / descriptionPrevious value: -"ID of comment to reply to. Use this to create threaded conversations (optional)"New value: +"Reply to this comment" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / search_context / descriptionPrevious value: -"Additional context lines to help locate the exact position when using code_snippet. Useful when the same code appears multiple times (optional)"New value: +"Disambiguates repeated code_snippet" - removed
Input schema / properties / search_context / properties / after / descriptionRemoved value: -"Array of code lines that appear AFTER the target line. Helps disambiguate when code_snippet appears multiple times" - removed
Input schema / properties / search_context / properties / before / descriptionRemoved value: -"Array of code lines that appear BEFORE the target line. Helps disambiguate when code_snippet appears multiple times" - added
Input schema / properties / severityAdded value: +{ + "description": "BLOCKER creates a task (Server only)", + "enum": [ + "NORMAL", + "BLOCKER" + ], + "type": "string" +} - changed
Input schema / properties / suggestion / descriptionPrevious value: -"Replacement code for a suggestion. Creates a suggestion block that can be applied in Bitbucket UI. Requires file_path and line_number. For multi-line, include newlines in the string (optional)"New value: +"Replacement code block; needs file_path + line_number" - changed
Input schema / properties / suggestion_end_line / descriptionPrevious value: -"For multi-line suggestions: the last line number to replace. If not provided, only replaces the single line at line_number (optional)"New value: +"Multi-line suggestion end" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Removed
approve_pull_request - Changed
create_pull_request9 fields changed- added
Input schema / properties / attachmentsAdded value: +{ + "description": "Local files to upload & embed (Server/DC only). Item: path string or {file_path, alt_text?, render?: image|link|auto}", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "properties": { + "alt_text": { + "type": "string" + }, + "file_path": { + "type": "string" + }, + "render": { + "enum": [ + "image", + "link", + "auto" + ], + "type": "string" + } + }, + "required": [ + "file_path" + ], + "type": "object" + } + ] + }, + "type": "array" +} - removed
Input schema / properties / close_source_branch / descriptionRemoved value: -"Whether to close source branch after merge (optional, default: false)" - removed
Input schema / properties / description / descriptionRemoved value: -"Description of the pull request (optional)" - removed
Input schema / properties / destination_branch / descriptionRemoved value: -"Destination branch name (e.g., \"main\", \"master\")" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / reviewers / descriptionPrevious value: -"Array of reviewer usernames/emails (optional)"New value: +"Reviewer usernames" - removed
Input schema / properties / source_branch / descriptionRemoved value: -"Source branch name" - removed
Input schema / properties / title / descriptionRemoved value: -"Title of the pull request" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Added
decline_pull_request - Changed
delete_branch5 fields changed- removed
Input schema / properties / branch_name / descriptionRemoved value: -"Branch name to delete" - added
Input schema / properties / expected_headAdded value: +{ + "description": "Known head SHA (compare-and-swap)", + "type": "string" +} - removed
Input schema / properties / forceRemoved value: -{ - "description": "Force delete even if branch is not merged (optional, default: false)", - "type": "boolean" -} - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Changed
get_branch4 fields changed- removed
Input schema / properties / branch_name / descriptionRemoved value: -"Branch name to get details for" - changed
Input schema / properties / include_merged_prs / descriptionPrevious value: -"Include merged PRs from this branch (default: false)"New value: +"Default false" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Added
get_commit_detail - Changed
get_file_content7 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Branch name (optional, defaults to default branch)"New value: +"Branch (default: default branch)" - removed
Input schema / properties / file_path / descriptionRemoved value: -"Path to the file (e.g., \"src/index.ts\")" - changed
Input schema / properties / full_content / descriptionPrevious value: -"Force return full content regardless of size (optional, default: false)"New value: +"Entire file regardless of size" - removed
Input schema / properties / line_count / descriptionRemoved value: -"Number of lines to return (optional, default varies by file size)" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / start_line / descriptionPrevious value: -"Starting line number (1-based). Use negative for lines from end (optional)"New value: +"1-based; negative = from end" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Changed
get_pull_request6 fields changed- added
Input schema / properties / comment_limitAdded value: +{ + "description": "Max comments embedded (default 20)", + "type": "number" +} - added
Input schema / properties / include_commentsAdded value: +{ + "description": "Embed active comments (default true)", + "type": "boolean" +} - added
Input schema / properties / include_file_changesAdded value: +{ + "description": "Embed changed-file list (default true)", + "type": "boolean" +} - added
Input schema / properties / include_tasksAdded value: +{ + "description": "Embed PR tasks (Server only, default false)", + "type": "boolean" +} - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Changed
get_pull_request_diff7 fields changed- changed
Input schema / properties / context_lines / descriptionPrevious value: -"Number of context lines around changes (optional, default: 3)"New value: +"Default 3; 0 = minimal" - changed
Input schema / properties / exclude_patterns / descriptionPrevious value: -"Array of glob patterns to exclude (e.g., [\"*.lock\", \"*.svg\"]) (optional)"New value: +"Globs to exclude" - changed
Input schema / properties / file_path / descriptionPrevious value: -"Specific file path to get diff for (e.g., \"src/index.ts\") (optional)"New value: +"Diff one file only" - added
Input schema / properties / ignore_whitespaceAdded value: +{ + "description": "Server only", + "type": "boolean" +} - changed
Input schema / properties / include_patterns / descriptionPrevious value: -"Array of glob patterns to include (e.g., [\"*.res\", \"src/**/*.js\"]) (optional)"New value: +"Globs to include" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Changed
list_branch_commits11 fields changed- removed
Input schema / properties / author / descriptionRemoved value: -"Filter by author email/username (optional)" - removed
Input schema / properties / branch_name / descriptionRemoved value: -"Branch name to get commits from" - added
Input schema / properties / include_build_statusAdded value: +{ + "description": "Server only", + "type": "boolean" +} - changed
Input schema / properties / include_merge_commits / descriptionPrevious value: -"Include merge commits in results (default: true)"New value: +"Default true" - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of commits to return (default: 25)"New value: +"Max results (default 25)" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / search / descriptionPrevious value: -"Search for text in commit messages (optional)"New value: +"Substring in commit message" - changed
Input schema / properties / since / descriptionPrevious value: -"ISO date string - only show commits after this date (optional)"New value: +"ISO date lower bound, or a commit SHA/ref (exclusive) for a server-side range" - changed
Input schema / properties / start / descriptionPrevious value: -"Start index for pagination (default: 0)"New value: +"Pagination start (default 0)" - changed
Input schema / properties / until / descriptionPrevious value: -"ISO date string - only show commits before this date (optional)"New value: +"ISO date upper bound" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Changed
list_branches5 fields changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter branches by name pattern (optional)"New value: +"Name filter" - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of branches to return (default: 25)"New value: +"Max results (default 25)" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / start / descriptionPrevious value: -"Start index for pagination (default: 0)"New value: +"Pagination start (default 0)" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Changed
list_directory_content4 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Branch name (optional, defaults to default branch)"New value: +"Branch (default: default branch)" - changed
Input schema / properties / path / descriptionPrevious value: -"Directory path (optional, defaults to root, e.g., \"src/components\")"New value: +"Default: root" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Changed
list_pr_commits5 fields changed- added
Input schema / properties / include_build_statusAdded value: +{ + "description": "CI status per commit (Server only)", + "type": "boolean" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of commits to return (default: 25)"New value: +"Max results (default 25)" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / start / descriptionPrevious value: -"Start index for pagination (default: 0)"New value: +"Pagination start (default 0)" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Added
list_projects - Changed
list_pull_requests7 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of PRs to return (default: 25)"New value: +"Max results (default 25)" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug; omit for cross-repo dashboard (Server)" - added
Input schema / properties / roleAdded value: +{ + "description": "Cross-repo mode only", + "enum": [ + "AUTHOR", + "REVIEWER", + "PARTICIPANT" + ], + "type": "string" +} - changed
Input schema / properties / start / descriptionPrevious value: -"Start index for pagination (default: 0)"New value: +"Pagination start (default 0)" - changed
Input schema / properties / state / descriptionPrevious value: -"Filter by PR state: OPEN, MERGED, DECLINED, ALL (default: OPEN)"New value: +"Default OPEN" - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)" - changed
Input schema / requiredPrevious value: -[ - "workspace", - "repository" -]New value: +[ + "workspace" +]
- Added
list_repositories - Added
manage_comment - Changed
merge_pull_request6 fields changed- changed
Input schema / properties / close_source_branch / descriptionPrevious value: -"Whether to close source branch after merge (optional)"New value: +"Cloud only" - removed
Input schema / properties / commit_message / descriptionRemoved value: -"Custom merge commit message (optional)" - changed
Input schema / properties / merge_strategy / descriptionPrevious value: -"Merge strategy: merge-commit, squash, fast-forward (optional)"New value: +"Cloud only" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - added
Input schema / properties / versionAdded value: +{ + "description": "Entity version from a prior read; supplying it saves a fetch AND makes the write conditional — it fails on concurrent modification instead of overwriting. Omit to write against the latest state (auto-retried once).", + "type": "number" +} - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
- Removed
remove_requested_changes - Removed
request_changes - Removed
search_code - Added
set_review_status - Removed
unapprove_pull_request - Changed
update_pull_request8 fields changed- added
Input schema / properties / attachmentsAdded value: +{ + "description": "Local files to upload & embed (Server/DC only). Item: path string or {file_path, alt_text?, render?: image|link|auto}", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "properties": { + "alt_text": { + "type": "string" + }, + "file_path": { + "type": "string" + }, + "render": { + "enum": [ + "image", + "link", + "auto" + ], + "type": "string" + } + }, + "required": [ + "file_path" + ], + "type": "object" + } + ] + }, + "type": "array" +} - removed
Input schema / properties / description / descriptionRemoved value: -"New description (optional)" - removed
Input schema / properties / destination_branch / descriptionRemoved value: -"New destination branch (optional)" - changed
Input schema / properties / repository / descriptionPrevious value: -"Repository slug (e.g., \"my-repo\")"New value: +"Repository slug" - changed
Input schema / properties / reviewers / descriptionPrevious value: -"New list of reviewer usernames/emails. If provided, replaces the reviewer list (preserving approval status for existing reviewers). If omitted, existing reviewers are preserved. (optional)"New value: +"Replaces reviewer list; approvals preserved" - removed
Input schema / properties / title / descriptionRemoved value: -"New title (optional)" - added
Input schema / properties / versionAdded value: +{ + "description": "Entity version from a prior read; supplying it saves a fetch AND makes the write conditional — it fails on concurrent modification instead of overwriting. Omit to write against the latest state (auto-retried once).", + "type": "number" +} - changed
Input schema / properties / workspace / descriptionPrevious value: -"Bitbucket workspace/project key (e.g., \"PROJ\")"New value: +"Project key (e.g., PROJ)"
19 tool updates
v1.0.0- First observed
add_comment - First observed
approve_pull_request - First observed
create_pull_request - First observed
delete_branch - First observed
get_branch - First observed
get_file_content - First observed
get_pull_request - First observed
get_pull_request_diff - First observed
list_branch_commits - First observed
list_branches - First observed
list_directory_content - First observed
list_pr_commits - First observed
list_pull_requests - First observed
merge_pull_request - First observed
remove_requested_changes - First observed
request_changes - First observed
search_code - First observed
unapprove_pull_request - First observed
update_pull_request
TDQS
Scored across 20 tools
Most tools target clearly distinct resources or actions (PRs, comments, branches, commits, files, projects/repos). Minor overlap exists between list_pr_commits and list_branch_commits, and between get_pull_request_diff and get_commit_detail, but descriptions make the boundaries usable.
Predominantly consistent snake_case verb_noun naming across the set. Minor deviations include 'pr' in list_pr_commits versus 'pull_request' elsewhere, and manage_comment is less operation-specific than neighboring names.
20 tools is on the heavy side for a PR-centric Bitbucket server; the rubric treats 16-25 tools as borderline. Most operations are useful, but the set could likely be consolidated without losing important capability.
Core PR lifecycle coverage is strong: list/get/create/update/merge/decline, comments and tasks, review status, diffs, commits, branches, file/directory reads, and project/repository listing. Missing write operations outside PRs (create_branch, create_repository, file write) and some repository-level get/update operations are minor gaps.
Maintenance
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
A Model Context Protocol (MCP) application for automated GitHub PR analysis and issue management.…
MCP Server for JFrog, providing tools for development and artifact management.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that provides tools for interacting with the Bitbucket API, supporting both Bitbucket Cloud and Bitbucket Server, enabling pull request, branch, file, code review, and search operations.199,040 npmMIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides tools for interacting with Bitbucket repositories, pull requests, issues, and more.58 npmISC
- AlicenseBqualityCmaintenanceAn MCP server for Bitbucket Cloud that enables managing pull requests, branches, and repositories in natural language from any MCP-capable client.23164 npm4MIT
- AlicenseBqualityBmaintenanceMCP server for Bitbucket Server integration, enabling project, repository, pull request, source code, branch, and code review operations via the Bitbucket Server APIs.2717 npmMIT