Skip to main content
Glama
Bitbucket MCP Server

Bitbucket MCP Server

by inceon

Bitbucket MCP Server

License: MIT CI Node.js MCP

Ein auf den Produktionseinsatz ausgerichteter Model Context Protocol-Server zum Abrufen von Pull-Request-Metadaten und Diffs aus Bitbucket Cloud und Bitbucket Server/Data Center, mit Pull-Request-Kommentaren als Opt-in-Funktion.

Funktionen

  • Unterstützt Bitbucket Cloud und selbst gehostetes Bitbucket Server/Data Center.

  • Stellt fokussierte Tools für Pull-Request-Metadaten, Diffs, Review-Diskussionen sowie allgemeine oder Inline-Kommentare bereit.

  • Unterstützt Bearer-Tokens und Basic-Authentifizierung.

  • Gibt rohe Diffs sowie strukturierte Daten zu geänderten Dateien zurück, sofern Bitbucket sie bereitstellt.

  • Schließt generierte Dateien, Ordner oder Dateitypen über konfigurierbare Glob-Muster aus.

  • Begrenzt große Diffs, ohne UTF-8-Zeichen zu beschädigen.

  • Verwendet stdio, ohne protokollverletzende Logs in stdout zu schreiben.

  • Lässt die Kommentarerstellung standardmäßig deaktiviert und genehmigt, merged oder verändert Pull Requests nicht.

Related MCP server: Atlassian Bitbucket MCP Server

Schnellstart

Erfordert eine unterstützte Node.js-LTS-Version (Node.js 22 oder neuer).

git clone https://github.com/inceon/bitbucket-mcp.git
cd bitbucket-mcp
npm install
npm run build
cp .env.example .env

Setzen Sie BITBUCKET_URL und BITBUCKET_TOKEN in Ihrer MCP-Client-Konfiguration und starten Sie dann den kompilierten Server mit node dist/index.js. Der Server lädt bewusst keine .env-Dateien selbst; MCP-Clients sollten Umgebungsvariablen direkt übergeben.

Authentifizierung

Die Bearer-Authentifizierung ist die Standardmethode und wird für persönliche Zugriffstokens von Bitbucket Server/Data Center empfohlen:

BITBUCKET_URL=https://bitbucket.example.com/bitbucket
BITBUCKET_TOKEN=your-personal-access-token
BITBUCKET_AUTH_TYPE=bearer

Für Bitbucket-Cloud-API-Tokens oder App-Passwörter, die eine Basic-Authentifizierung erfordern:

BITBUCKET_URL=https://api.bitbucket.org
BITBUCKET_TOKEN=your-api-token-or-app-password
BITBUCKET_AUTH_TYPE=basic
BITBUCKET_USERNAME=your-bitbucket-username

Gewähren Sie der Anmeldeinformation nur die Berechtigungen, die für die von Ihnen aktivierten Tools erforderlich sind. Die Kommentarerstellung erfordert die Berechtigung, Pull-Request-Kommentare zu erstellen. Committen Sie niemals Anmeldedaten und geben Sie keine echten Tokens in Issue-Meldungen an.

Umgebungsvariablen

Variable

Erforderlich

Standard

Beschreibung

BITBUCKET_URL

Ja

-

Basis-URL von Bitbucket, z. B. https://api.bitbucket.org oder https://bitbucket.example.com/bitbucket

BITBUCKET_TOKEN

Ja

-

API-Token, App-Passwort oder persönliches Zugriffstoken

BITBUCKET_AUTH_TYPE

Nein

bearer

bearer oder basic

BITBUCKET_USERNAME

Für Basic-Auth

-

Benutzername, der zusammen mit dem Token für die Basic-Auth verwendet wird

BITBUCKET_MAX_DIFF_BYTES

Nein

200000

Maximale UTF-8-Bytegröße, die in rawDiff zurückgegeben wird; für Clients mit ungewöhnlich großem Kontext explizit erhöhen

BITBUCKET_MAX_DIFF_INPUT_BYTES

Nein

10000000

Maximale Anzahl an Bytes, die aus einem vorgelagerten Raw-Diff gelesen werden, bevor abgebrochen wird

BITBUCKET_MAX_JSON_BYTES

Nein

10000000

Maximale Anzahl an Bytes, die aus einer beliebigen Bitbucket-JSON-Antwort gelesen werden

BITBUCKET_MAX_COMMENT_COUNT

Nein

5000

Maximale Anzahl an Pull-Request-Kommentaren, die über Seiten hinweg gesammelt werden

BITBUCKET_MAX_COMMENT_PAGES

Nein

100

Maximale Anzahl verfolgter Pull-Request-Kommentarseiten

BITBUCKET_MAX_COMMIT_COUNT

Nein

5000

Maximale Anzahl an Pull-Request-Commits, die über Seiten hinweg gesammelt werden

BITBUCKET_MAX_COMMIT_PAGES

Nein

100

Maximale Anzahl verfolgter Pull-Request-Commit-Seiten

BITBUCKET_MAX_DIFF_FILES

Nein

5000

Maximale Anzahl strukturierter Einträge zu geänderten Dateien, die über Seiten hinweg gesammelt werden

BITBUCKET_MAX_DIFF_PAGES

Nein

100

Maximale Anzahl verfolgter strukturierter Seiten zu geänderten Dateien

BITBUCKET_REQUEST_TIMEOUT_MS

Nein

30000

Frist in Millisekunden für jede Bitbucket-HTTP-Anfrage

BITBUCKET_IGNORE_PATTERNS

Nein

-

Durch Kommas getrennte Datei-Globs, die aus jedem PR-Diff ausgeschlossen werden

BITBUCKET_ENABLE_WRITE_TOOLS

Nein

false

Auf true setzen, um Tools zu erlauben, die Bitbucket verändern; derzeit die PR-Kommentarerstellung

Der Server schreibt Startfehler nur nach stderr und schwärzt konfigurierte Anmeldedaten in Bitbucket-HTTP-Fehlerausschnitten.

MCP-Konfiguration

Claude-Desktop-Konfiguration:

{
  "mcpServers": {
    "bitbucket": {
      "command": "node",
      "args": ["/absolute/path/to/my-bitbucket-mcp/dist/index.js"],
      "env": {
        "BITBUCKET_URL": "https://api.bitbucket.org",
        "BITBUCKET_TOKEN": "your-token"
      }
    }
  }
}

Codex-config.toml-Konfiguration:

[mcp_servers.bitbucket]
command = "node"
args = ["/absolute/path/to/my-bitbucket-mcp/dist/index.js"]

[mcp_servers.bitbucket.env]
BITBUCKET_URL = "https://api.bitbucket.org"
BITBUCKET_TOKEN = "your-token"

Verfügbare Tools

get_pull_request

Gibt Pull-Request-Metadaten zurück, einschließlich Beschreibung, Status, Autor, Reviewer, Branches, Zeitstempel und Links.

{
  "name": "get_pull_request",
  "arguments": {
    "workspace": "my-workspace",
    "repository": "my-repository",
    "pull_request_id": 123
  }
}

get_pull_request_comments

Gibt vorhandene allgemeine und Inline-Diskussionen als native Kommentarobjekte des Anbieters zurück. Nutzen Sie es, bevor Sie einen Review-Befund posten, um vorhandenes Feedback zu berücksichtigen. commentsStatus.complete ist false mit dem Grund max_comments oder max_pages, wenn die konfigurierten Abrufgrenzen erreicht sind.

get_pull_request_commits

Gibt die derzeit im Pull Request enthaltenen natives Commits des Anbieters zurück. Nutzen Sie es, um einen Befund bis zu seinem Ursprungs-Commit zurückzuverfolgen oder zu prüfen, ob spätere Arbeiten ihn aufgreifen. commitsStatus.complete ist false mit dem Grund max_commits oder max_pages, wenn die konfigurierten Abrufgrenzen erreicht sind.

get_pull_request_diff

Gibt einen Review-Diff im Git-Stil und, sofern verfügbar, strukturierte geänderte Dateien zurück.

{
  "name": "get_pull_request_diff",
  "arguments": {
    "workspace": "PROJECT_KEY",
    "repository": "my-repository",
    "pull_request_id": 123,
    "ignore_patterns": ["dist/**", "**/*.generated.ts", "package-lock.json"],
    "path": "src/service.ts",
    "context": 5,
    "ignore_whitespace": true,
    "renames": true
  }
}

Die Diff-Ausgabe ist sowohl als abwärtskompatibler JSON-Text als auch als MCP-structuredContent mit einem deklarierten Ausgabeschema verfügbar. Sie enthält:

  • provider, pull_request_id, rawDiff, rawDiffBytes und rawDiffSource. rawDiffSource ist provider_raw für Cloud oder server_structured für eine lokal normalisierte Antwort von Server/Data Center.

  • truncated plus truncationReason: input_limit, wenn das vorgelagerte Cloud-Leselimit erreicht wurde, output_limit, wenn das gefilterte Ergebnis BITBUCKET_MAX_DIFF_BYTES überschritt, oder provider_limit, wenn Server/Data Center seinen strukturierten Diff als abgeschnitten markiert hat.

  • Optionale kompakte files-Einträge enthalten nur path, normalisierten status und oldPath für Umbenennungen oder Kopien. Das erforderliche filesStatus meldet die Vollständigkeit; complete ist false mit dem Grund max_files, max_pages oder unsupported, und returned spiegelt die tatsächlich zurückgegebenen gefilterten Einträge wider.

  • Optionale ignored-Metadaten, wenn Ausschlüsse aktiv sind.

Vollständiges Ergebnis:

{
  "provider": "cloud",
  "pull_request_id": 123,
  "rawDiff": "diff --git ...",
  "rawDiffBytes": 128,
  "rawDiffSource": "provider_raw",
  "files": [],
  "filesStatus": { "available": true, "complete": true, "returned": 0 },
  "truncated": false
}

Begrenztes Teilergebnis:

{
  "provider": "cloud",
  "pull_request_id": 123,
  "rawDiff": "diff --git ...",
  "rawDiffBytes": 200000,
  "rawDiffSource": "provider_raw",
  "files": [{ "path": "src/service.ts", "status": "modified" }],
  "filesStatus": {
    "available": true,
    "complete": false,
    "returned": 1,
    "reason": "max_pages"
  },
  "truncated": true,
  "truncationReason": "output_limit"
}

Ein abgeschnittenes rawDiff ist ein UTF-8-sicheres Review-Präfix, nicht unbedingt eine vollständige Zeile, ein vollständiger Hunk oder ein anwendbarer Patch.

Strukturierte Dateiseiten werden verfolgt, bis sie vollständig sind oder bis eine konfigurierte Datei-/Seitengrenze erreicht ist, und dann zu kompakten Review-Metadaten normalisiert, anstatt Anbieter-Hashes, Links und doppelte Pfadstrukturen zurückzugeben. Ein nicht verfügbarer diffstat- oder changes-Endpunkt wird erst nach HTTP 404 gemeldet. Autorisierungs-, Rate-Limit-, Server-, Fehlantwort-, Timeout- und Transportfehler lassen den Tool-Aufruf fehlschlagen, anstatt Metadaten stillschweigend wegzulassen.

Cloud-rawDiff bewahrt die rohe Antwort des Anbieters. Server/Data Center verwendet die strukturierte /diff-Antwort und normalisiert deren Dateien, Hunks, Segmente und Zeilen zu Review-Text im Git-Stil; dies vermeidet versionsspezifische Fehler des separaten .diff-Exportwegs. rawDiffSource macht diese Unterscheidung explizit.

path wird für beide Anbieter unterstützt und ist der bevorzugte Weg, große Pull Requests dateiweise zu prüfen; die zurückgegebenen files-Metadaten sind auf denselben Pfad beschränkt. renames gibt es nur in Cloud. context wird auf Cloud-context und die contextLines von Server/Data Center abgebildet. ignore_whitespace wird auf Cloud-ignore_whitespace und whitespace=ignore-all von Server/Data Center abgebildet. Wenn diese Steuerelemente fehlen, ändern sie die Anbieterstandardwerte nicht.

Muster verwenden repository-relative Pfade und unterstützen *, ** und ?. Ein Muster ohne /, wie package-lock.json oder *.png, findet diesen Dateinamen überall. Ein abschließender Schrägstrich schließt ein Verzeichnis rekursiv aus. Wenn Ausschlüsse aktiv sind, enthält die Antwort ignored.patterns, ignored.files und ignored.rawDiffFiltered. Ein false-Wert bei rawDiffFiltered bedeutet, dass ein Cloud-Anbieter ein Nicht-Git-Diff-Format zurückgegeben hat, das nicht sicher gefiltert werden konnte; die Antwort wird beibehalten, anstatt Inhalte stillschweigend zu verwerfen.

add_pull_request_comment

Erstellt einen allgemeinen Kommentar, einen Kommentar auf Dateiebene oder einen Inline-Zeilenkommentar zu einem Pull Request. Dieser Schreibvorgang ist nur verfügbar, wenn BITBUCKET_ENABLE_WRITE_TOOLS=true in der MCP-Serverumgebung gesetzt ist.

Allgemeiner Kommentar:

{
  "name": "add_pull_request_comment",
  "arguments": {
    "workspace": "my-workspace",
    "repository": "my-repository",
    "pull_request_id": 123,
    "comment": "The implementation looks good. Please add a regression test for the empty input case."
  }
}

Inline-Kommentar zu einer hinzugefügten Zeile:

{
  "name": "add_pull_request_comment",
  "arguments": {
    "workspace": "my-workspace",
    "repository": "my-repository",
    "pull_request_id": 123,
    "comment": "Please handle an empty value here.",
    "file_path": "src/service.ts",
    "line": 42,
    "line_type": "added"
  }
}

Verwenden Sie die line_type-Werte added, removed oder context. Hinzugefügte Zeilen verwenden standardmäßig die new-Seite, entfernte Zeilen die old-Seite und Kontextzeilen new; setzen Sie line_side explizit, um einen Kontextkommentar auf old zu platzieren. Geben Sie file_path ohne Zeilenfelder für einen Kommentar auf Dateiebene an. Bei umbenannten Dateien in Server/Data Center kann source_file_path den vorherigen Pfad angeben.

Der authentifizierte Bitbucket-Benutzer wird zum Kommentarautor. Prüfen Sie den Ziel-Workspace, das Repository, die Pull-Request-ID und den Kommentartext, bevor Sie den Tool-Aufruf in Ihrem MCP-Client genehmigen.

Anbieterverhalten

Der URL-Host bestimmt den Anbieter. bitbucket.org und api.bitbucket.org verwenden Bitbucket Cloud; alle anderen Hosts verwenden Server/Data Center.

Cloud-URLs werden auf ein /2.0-API-Präfix normalisiert und verwenden:

  • /repositories/{workspace}/{repository}/pullrequests/{id}

  • /repositories/{workspace}/{repository}/pullrequests/{id}/diff

  • /repositories/{workspace}/{repository}/pullrequests/{id}/diffstat

  • /repositories/{workspace}/{repository}/pullrequests/{id}/comments (GET; POST, wenn aktiviert)

  • /repositories/{workspace}/{repository}/pullrequests/{id}/commits (GET)

Die URLs von Server/Data Center erhalten einen Kontextpfad wie /bitbucket, normalisieren auf ein /rest/api/1.0-Präfix und verwenden:

  • /projects/{project}/repos/{repository}/pull-requests/{id}

  • /projects/{project}/repos/{repository}/pull-requests/{id}/diff (strukturierter Diff, zu Review-Text im Git-Stil normalisiert)

  • /projects/{project}/repos/{repository}/pull-requests/{id}/diff/{path} (pfadbezogener strukturierter Diff)

  • /projects/{project}/repos/{repository}/pull-requests/{id}/changes

  • /projects/{project}/repos/{repository}/pull-requests/{id}/comments (GET; POST, wenn aktiviert)

  • /projects/{project}/repos/{repository}/pull-requests/{id}/commits (GET)

Die optionale diffstat- oder changes-Anfrage meldet nach HTTP 404 filesStatus.reason: "unsupported". Andere HTTP-, Timeout-, Transport- und Parsing-Fehler lassen den Tool-Aufruf fehlschlagen, sodass unvollständige Metadaten nicht für eine vollständige Antwort gehalten werden.

Atlassian Rovo MCP

Atlassian dokumentiert die nur in der Cloud verfügbare Aktion bitbucketPullRequest.diff, veröffentlicht aber weder das Argumentschema noch die Ausgabestruktur noch einen Vertrag über Paginierung, Filterung oder Kürzung. Dieser Server behandelt deshalb die direkten Bitbucket-APIs weiterhin als maßgeblich. Ein Rovo-Adapter sollte erst nach der Validierung eines live abgefragten tools/list-Schemas und einer kontrollierten diff-Antwort hinzugefügt werden; er muss weiterhin explizit konfiguriert sein und kann die Unterstützung von Server/Data Center nicht ersetzen. Siehe Atlassians Seite zu unterstützten Tools.

Roadmap

Geplante Bereiche für zukünftige Versionen:

  • Retry-Handling und klarere Rate-Limit-Diagnostik hinzufügen.

  • Normalisierte Pull-Request-Ausgabe liefern, wobei der Zugriff auf anbieterspezifische Felder erhalten bleibt.

  • Schreibgeschützte Tools zum Auflisten von Pull Requests und zum Abrufen der Build-Status hinzufügen.

  • Optionalen Streamable-HTTP-Transport anbieten, wobei stdio weiterhin Standard ist.

  • Versionierte Releases mit einfacheren Installations- und Upgrade-Pfaden veröffentlichen.

Schreiboperationen bleiben standardmäßig deaktiviert. Das Genehmigen, Zusammenführen und weitere Bitbucket-Operationen mit großer Auswirkung sind nicht geplant. Ideen und Implementierungsvorschläge sind über GitHub Issues willkommen.

Entwicklung

npm run dev        # Run directly from TypeScript
npm run build      # Compile to dist/
npm test           # Run the test suite once
npm run test:watch # Run tests in watch mode
npm run check      # Build and test, matching CI

Die Befehlsregistrierung hält jedes MCP-Tool unter src/tools isoliert. Siehe CONTRIBUTING.md, bevor du einen Pull Request eröffnest.

Sicherheit

Dieser Server verarbeitet Zugangsdaten und sendet sie ausschließlich an die konfigurierte BITBUCKET_URL. Prüfe diese URL sorgfältig, bevor du den Server startest. Wenn die Schreib-Tools aktiviert sind, können verbundene MCP-Clients PR-Kommentare als authentifizierter Bitbucket-Benutzer veröffentlichen. Um eine Sicherheitslücke vertraulich zu melden, folge den Anweisungen in SECURITY.md.

Lizenz

Veröffentlicht unter der MIT-Lizenz.

Available Tools

3 tools
add_pull_request_commentA

Creates a general, file, or inline line comment on a Bitbucket pull request. This is a write operation and requires BITBUCKET_ENABLE_WRITE_TOOLS=true.

NameRequiredDescriptionDefault
workspaceYesBitbucket Cloud workspace ID or Bitbucket Server/Data Center project key
repositoryYesRepository slug or repository name
pull_request_idYesPull request ID
commentYesComment text. Bitbucket Cloud renders supported Markdown.
file_pathNoOptional destination-side repository path for a file or line comment.
source_file_pathNoOptional previous path for a renamed or copied file. Used by Server/Data Center.
lineNoOptional 1-based diff line number. Requires file_path and line_type.
line_typeNoKind of diff line. Requires file_path and line.
line_sideNoDiff side. Defaults to old for removed lines and new otherwise.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description declares write operation and environment variable requirement, but omits details on side effects, permissions, rate limits, or comment management (editing/deletion).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one sentence plus a note on prerequisites. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing explanation of return values (no output schema), no guidance on combining file_path, line, line_type, line_side for inline comments. Given 9 parameters and write nature, more context needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; each parameter is documented in the schema. The description adds no extra semantic value beyond summarizing the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it creates a comment on a Bitbucket pull request, specifying three types: general, file, or inline line comment. Different from sibling read-only tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly identifies it as a write operation requiring BITBUCKET_ENABLE_WRITE_TOOLS=true. Does not explicitly state when to use versus siblings, but the read-only nature of siblings implies the writing use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pull_requestA

Retrieves metadata, description, state/status, author, reviewers, source branch, destination branch, timestamps, and links for a specific Bitbucket pull request.

NameRequiredDescriptionDefault
workspaceYesBitbucket Cloud workspace ID or Bitbucket Server/Data Center project key
repositoryYesRepository slug or repository name
pull_request_idYesPull request ID

TDQS

A3.8/5.0
Behavior3/5

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 describes what data is retrieved but does not mention any behavioral traits such as authentication requirements, rate limits, or potential performance implications. For a simple read operation, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently lists the retrieved data without any fluff. Every phrase adds value, and the structure is front-loaded with the verb and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does a good job of listing the expected return fields (metadata, description, state, author, reviewers, branches, timestamps, links). It is fairly comprehensive, though it could be improved by noting if any fields are nested or if there are pagination details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, meaning all parameters are described in the schema. The description adds no extra meaning beyond the schema; it simply restates that the tool retrieves for a specific pull request. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Retrieves' and clearly lists the resource ('metadata, description, state/status, author, reviewers, source branch, destination branch, timestamps, and links for a specific Bitbucket pull request'). It distinguishes from sibling tools (add_pull_request_comment and get_pull_request_diff) by focusing on retrieval of metadata, not adding comments or getting diffs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool vs alternatives. While the purpose is clear, there is no guidance on when not to use it or which sibling tool to choose for other tasks. The agent must rely on tool names and context, which is adequate but not explicit.

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

Retrieves the raw diff and, when available, a structured list of changed files for a specific Bitbucket pull request.

NameRequiredDescriptionDefault
workspaceYesBitbucket Cloud workspace ID or Bitbucket Server/Data Center project key
repositoryYesRepository slug or repository name
pull_request_idYesPull request ID

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description mentions return content (raw diff and structured files) but does not discuss side effects, authentication needs, or limitations such as file size constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is direct and waste-free, conveying the essential information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a retrieval tool with three fully described parameters and no output schema, the description adequately states what is returned. Slightly incomplete in not mentioning that diff may be large or truncated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all three parameters with descriptions (100% coverage). The tool description adds no extra meaning beyond the schema fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'retrieves' and resources 'raw diff' and 'structured list of changed files' for a specific Bitbucket pull request, distinguishing it from sibling tools like add_pull_request_comment and get_pull_request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs siblings; usage is implied by the name and description but not directly stated.

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.

  1. 3 tool updatesv1.0.0
    • First observedadd_pull_request_comment
    • First observedget_pull_request
    • First observedget_pull_request_diff

TDQS

A3.8/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct aspect of pull requests: commenting, metadata retrieval, and diff retrieval. No functional overlap, making selection clear.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (add_*, get_*, get_*), which is predictable and easy to follow.

Tool Count3/5

Three tools is minimal for a Bitbucket server; it covers only basic pull request read operations and commenting, missing core CRUD operations, but it is not extreme.

Completeness2/5

The toolset lacks essential operations like listing, creating, updating, or merging pull requests. Agents cannot perform a full workflow, leaving significant gaps.

Related MCP Connectors

Related MCP Servers