A side-by-side look at the MCP Server Atlassian Bitbucket and Git MCP Server MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose MCP Server Atlassian Bitbucket for version control work as a local process; choose Git MCP Server for version control as a local process. You can also run both side by side in one mcpServers block.
ATLASSIAN_USER_EMAIL, ATLASSIAN_API_TOKEN, ATLASSIAN_BITBUCKET_USERNAME, ATLASSIAN_BITBUCKET_APP_PASSWORD, BITBUCKET_DEFAULT_WORKSPACE.bb_get, bb_post, bb_put.MCP_TRANSPORT_TYPE, MCP_LOG_LEVEL, MCP_HTTP_PORT, GIT_BASE_DIR, LOGS_DIR, GIT_USERNAME, GIT_EMAIL, GIT_SIGN_COMMITS.git_add, git_blame, git_branch.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Version Control | Version Control |
| Quality signal | 65/100 · Great | 67/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | API key required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | ATLASSIAN_USER_EMAILATLASSIAN_API_TOKENATLASSIAN_BITBUCKET_USERNAMEATLASSIAN_BITBUCKET_APP_PASSWORDBITBUCKET_DEFAULT_WORKSPACE | MCP_TRANSPORT_TYPEMCP_LOG_LEVELMCP_HTTP_PORTGIT_BASE_DIRLOGS_DIRGIT_USERNAMEGIT_EMAILGIT_SIGN_COMMITS |
| Verified owner | Community listing | Community listing |
| GitHub stars | 163 | 242 |
| Directory activity | 5 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 6 | 28 |
| Full listing | View MCP Server Atlassian Bitbucket | View Git MCP Server |
bb_getRead any Bitbucket data. Returns TOON format by default (30-60% fewer tokens than JSON).
**IMPORTANT - Cost Optimization:**
- ALWAYS use `jq` param to filter response fields. Unfiltered responses are very expensive!
- Use `pagelen` query param to restrict result count (e.g., `pagelen: "5"`)
- If unsure about available fields, first fetch ONE item with `pagelen: "1"` and NO jq filter to explore the schema, then use jq in subsequent calls
**Schema Discovery Pattern:**
1. First call: `path: "/workspaces", queryParams: {"pagelen": "1"}` (no jq) - explore available fields
2. Then use: `jq: "values[*].{slug: slug, name: name, uuid: uuid}"` - extract only what you need
**Output format:** TOON (default, token-efficient) or JSON (`outputFormat: "json"`)
**Common paths:**
- `/workspaces` - list workspaces
- `/repositories/{workspace}` - list repos in workspace
- `/repositories/{workspace}/{repo}` - get repo details
- `/repositories/{workspace}/{repo}/pullrequests` - list PRs
- `/repositories/{workspace}/{repo}/pullrequests/{id}` - get PR details
- `/repositories/{workspace}/{repo}/pullrequests/{id}/comments` - list PR comments
- `/repositories/{workspace}/{repo}/pullrequests/{id}/diff` - get PR diff
- `/repositories/{workspace}/{repo}/refs/branches` - list branches
- `/repositories/{workspace}/{repo}/commits` - list commits
- `/repositories/{workspace}/{repo}/src/{commit}/{filepath}` - get file content
- `/repositories/{workspace}/{repo}/diff/{source}..{destination}` - compare branches/commits
**Query params:** `pagelen` (page size), `page` (page number), `q` (filter), `sort` (order), `fields` (sparse response)
**Example filters (q param):** `state="OPEN"`, `source.branch.name="feature"`, `title~"bug"`
**JQ examples:** `values[*].slug`, `values[0]`, `values[*].{name: name, uuid: uuid}`
The `/2.0` prefix is added automatically. API reference: https://developer.atlassian.com/cloud/bitbucket/rest/bb_postCreate Bitbucket resources. Returns TOON format by default (token-efficient).
**IMPORTANT - Cost Optimization:**
- Use `jq` param to extract only needed fields from response (e.g., `jq: "{id: id, title: title}"`)
- Unfiltered responses include all metadata and are expensive!
**Output format:** TOON (default) or JSON (`outputFormat: "json"`)
**Common operations:**
1. **Create PR:** `/repositories/{workspace}/{repo}/pullrequests`
body: `{"title": "...", "source": {"branch": {"name": "feature"}}, "destination": {"branch": {"name": "main"}}}`
2. **Add PR comment:** `/repositories/{workspace}/{repo}/pullrequests/{id}/comments`
body: `{"content": {"raw": "Comment text"}}`
3. **Approve PR:** `/repositories/{workspace}/{repo}/pullrequests/{id}/approve`
body: `{}`
4. **Request changes:** `/repositories/{workspace}/{repo}/pullrequests/{id}/request-changes`
body: `{}`
5. **Merge PR:** `/repositories/{workspace}/{repo}/pullrequests/{id}/merge`
body: `{"merge_strategy": "squash"}` (strategies: merge_commit, squash, fast_forward)
The `/2.0` prefix is added automatically. API reference: https://developer.atlassian.com/cloud/bitbucket/rest/bb_putReplace Bitbucket resources (full update). Returns TOON format by default.
**IMPORTANT - Cost Optimization:**
- Use `jq` param to extract only needed fields from response
- Example: `jq: "{uuid: uuid, name: name}"`
**Output format:** TOON (default) or JSON (`outputFormat: "json"`)
**Common operations:**
1. **Update repository:** `/repositories/{workspace}/{repo}`
body: `{"description": "...", "is_private": true, "has_issues": true}`
2. **Create/update file:** `/repositories/{workspace}/{repo}/src`
Note: Use multipart form data for file uploads (complex - prefer PATCH for metadata)
3. **Update branch restriction:** `/repositories/{workspace}/{repo}/branch-restrictions/{id}`
body: `{"kind": "push", "pattern": "main", "users": [{"uuid": "..."}]}`
The `/2.0` prefix is added automatically. API reference: https://developer.atlassian.com/cloud/bitbucket/rest/bb_patchPartially update Bitbucket resources. Returns TOON format by default.
**IMPORTANT - Cost Optimization:** Use `jq` param to filter response fields.
**Output format:** TOON (default) or JSON (`outputFormat: "json"`)
**Common operations:**
1. **Update PR title/description:** `/repositories/{workspace}/{repo}/pullrequests/{id}`
body: `{"title": "New title", "description": "Updated description"}`
2. **Update PR reviewers:** `/repositories/{workspace}/{repo}/pullrequests/{id}`
body: `{"reviewers": [{"uuid": "{user-uuid}"}]}`
3. **Update repository properties:** `/repositories/{workspace}/{repo}`
body: `{"description": "New description"}`
4. **Update comment:** `/repositories/{workspace}/{repo}/pullrequests/{pr_id}/comments/{comment_id}`
body: `{"content": {"raw": "Updated comment"}}`
The `/2.0` prefix is added automatically. API reference: https://developer.atlassian.com/cloud/bitbucket/rest/bb_deleteDelete Bitbucket resources. Returns TOON format by default.
**Output format:** TOON (default) or JSON (`outputFormat: "json"`)
**Common operations:**
1. **Delete branch:** `/repositories/{workspace}/{repo}/refs/branches/{branch_name}`
2. **Delete PR comment:** `/repositories/{workspace}/{repo}/pullrequests/{pr_id}/comments/{comment_id}`
3. **Decline PR:** `/repositories/{workspace}/{repo}/pullrequests/{id}/decline`
4. **Remove PR approval:** `/repositories/{workspace}/{repo}/pullrequests/{id}/approve`
5. **Delete repository:** `/repositories/{workspace}/{repo}` (caution: irreversible)
Note: Most DELETE endpoints return 204 No Content on success.
The `/2.0` prefix is added automatically. API reference: https://developer.atlassian.com/cloud/bitbucket/rest/bb_cloneClone a Bitbucket repository to your local filesystem using SSH (preferred) or HTTPS.
Provide `repoSlug` and `targetPath` (absolute path). Clones into `targetPath/repoSlug`. SSH keys must be configured; falls back to HTTPS if unavailable.git_addStage files for commit. Add file contents to the staging area (index) to prepare for the next commit.git_blameShow line-by-line authorship information for a file, displaying who last modified each line and when. For large files, use startLine/endLine to limit output.git_branchManage branches: list all branches, show current branch, create a new branch, delete a branch, or rename a branch.git_changelog_analyzeGather git history context (commits, tags) and structured review instructions to support LLM-driven changelog analysis. Changelog file should be read separately; this tool provides the supporting git data and analysis framework. Pass one or more review types to control what kind of analysis to perform.git_checkoutSwitch branches or restore working tree files. Can checkout an existing branch, create a new branch, or restore specific files.git_cherry_pickCherry-pick commits from other branches. Apply specific commits to the current branch without merging entire branches.git_cleanRemove untracked files from the working directory. Requires force flag for safety. Use dry-run to preview files that would be removed.git_clear_working_dirClear the session working directory setting. This resets the context without restarting the server. Subsequent git operations will require an explicit path parameter unless git_set_working_dir is called again.git_cloneClone a repository from a remote URL or local path. Accepts HTTP(S), SSH, git://, file://, and bare filesystem paths, with optional shallow cloning.git_commitCreate a new commit with staged changes in the repository. Records a snapshot of the staging area with a commit message.
**Commit Message Format:**
Pass commit messages as JSON string parameters. Multi-line messages are supported using standard JSON string escaping.
**Examples:**
- Single line: { "message": "feat: add user authentication" }
- Multi-line: { "message": "feat: add user authentication\n\nImplemented OAuth2 flow with JWT tokens.\nAdded tests for login and logout." }
Note: Do not use bash heredoc syntax. Literal escape sequences (\n, \t) in the message string are automatically normalized to their actual characters.git_diffView differences between commits, branches, or working tree. Shows changes in unified diff format.git_fetchFetch updates from a remote repository. Downloads objects and refs without merging them.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"aashari-mcp-server-atlassian-bitbucket": {
"command": "npx",
"args": [
"-y",
"@aashari/mcp-server-atlassian-bitbucket"
],
"env": {
"ATLASSIAN_USER_EMAIL": "YOUR_ATLASSIAN_USER_EMAIL_HERE",
"ATLASSIAN_API_TOKEN": "YOUR_ATLASSIAN_API_TOKEN_HERE",
"ATLASSIAN_BITBUCKET_USERNAME": "YOUR_ATLASSIAN_BITBUCKET_USERNAME_HERE",
"ATLASSIAN_BITBUCKET_APP_PASSWORD": "YOUR_ATLASSIAN_BITBUCKET_APP_PASSWORD_HERE",
"BITBUCKET_DEFAULT_WORKSPACE": "YOUR_BITBUCKET_DEFAULT_WORKSPACE_HERE"
}
}
}
}
{
"mcpServers": {
"git-mcp-server-2": {
"command": "npx",
"args": [
"-y",
"@cyanheads/git-mcp-server@latest"
],
"env": {
"MCP_TRANSPORT_TYPE": "YOUR_MCP_TRANSPORT_TYPE_HERE",
"MCP_LOG_LEVEL": "YOUR_MCP_LOG_LEVEL_HERE",
"MCP_HTTP_PORT": "YOUR_MCP_HTTP_PORT_HERE",
"GIT_BASE_DIR": "YOUR_GIT_BASE_DIR_HERE",
"LOGS_DIR": "YOUR_LOGS_DIR_HERE",
"GIT_USERNAME": "YOUR_GIT_USERNAME_HERE",
"GIT_EMAIL": "YOUR_GIT_EMAIL_HERE",
"GIT_SIGN_COMMITS": "YOUR_GIT_SIGN_COMMITS_HERE"
}
}
}
}