Skip to main content
Glama

create_branch_restriction

Create branch protection rules in Bitbucket to restrict pushes, merges, deletions, or enforce requirements like CI passes and approvals.

Instructions

Create a branch restriction (protection rule).

Args:
    repo_slug: Repository slug
    kind: Type of restriction. Common values:
          - "push" - Restrict who can push
          - "force" - Restrict force push
          - "delete" - Restrict branch deletion
          - "restrict_merges" - Restrict who can merge
          - "require_passing_builds_to_merge" - Require CI to pass
          - "require_approvals_to_merge" - Require PR approvals
          - "require_default_reviewer_approvals_to_merge"
          - "require_no_changes_requested"
          - "require_tasks_to_be_completed"
    pattern: Branch pattern (e.g., "main", "release/*"). Required for glob match.
    branch_match_kind: How to match branches - "glob" (pattern) or "branching_model" (development/production)
    branch_type: Branch type when using branching_model - "development", "production", or specific category
    value: Numeric value for restrictions that need it (e.g., number of required approvals)

Returns:
    Created restriction info with ID

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repo_slugYes
kindYes
patternNo
branch_match_kindNoglob
branch_typeNo
valueNo

Implementation Reference

  • MCP tool handler that creates a branch restriction using the Bitbucket client.
    @mcp.tool()
    @handle_bitbucket_error
    @formatted
    def create_branch_restriction(
        repo_slug: str,
        kind: str,
        pattern: str = "",
        branch_match_kind: str = "glob",
        branch_type: str = "",
        value: int = 0,
    ) -> dict:
        """Create a branch restriction (protection rule).
    
        Args:
            repo_slug: Repository slug
            kind: Type of restriction. Common values:
                  - "push" - Restrict who can push
                  - "force" - Restrict force push
                  - "delete" - Restrict branch deletion
                  - "restrict_merges" - Restrict who can merge
                  - "require_passing_builds_to_merge" - Require CI to pass
                  - "require_approvals_to_merge" - Require PR approvals
                  - "require_default_reviewer_approvals_to_merge"
                  - "require_no_changes_requested"
                  - "require_tasks_to_be_completed"
            pattern: Branch pattern (e.g., "main", "release/*"). Required for glob match.
            branch_match_kind: How to match branches - "glob" (pattern) or "branching_model" (development/production)
            branch_type: Branch type when using branching_model - "development", "production", or specific category
            value: Numeric value for restrictions that need it (e.g., number of required approvals)
    
        Returns:
            Created restriction info with ID
        """
        client = get_client()
        result = client.create_branch_restriction(
            repo_slug,
            kind=kind,
            pattern=pattern,
            branch_match_kind=branch_match_kind,
            branch_type=branch_type if branch_type else None,
            value=value if value else None,
        )
        return {
            "id": result.get("id"),
            "kind": result.get("kind"),
        }
  • BitbucketClient helper method that performs the API POST request to create the branch restriction.
    def create_branch_restriction(
        self,
        repo_slug: str,
        kind: str,
        pattern: str = "",
        branch_match_kind: str = "glob",
        branch_type: Optional[str] = None,
        users: Optional[list[dict]] = None,
        groups: Optional[list[dict]] = None,
        value: Optional[int] = None,
    ) -> dict[str, Any]:
        """Create a branch restriction.
    
        Args:
            repo_slug: Repository slug
            kind: Restriction type. Options:
                  - require_passing_builds_to_merge
                  - require_approvals_to_merge
                  - require_default_reviewer_approvals_to_merge
                  - require_no_changes_requested
                  - require_tasks_to_be_completed
                  - require_commits_behind
                  - push, force, delete, restrict_merges
            pattern: Branch pattern (e.g., "main", "release/*")
            branch_match_kind: "glob" or "branching_model"
            branch_type: If branch_match_kind is "branching_model":
                         development, production, feature, bugfix, release, hotfix
            users: List of users exempt from restriction
            groups: List of groups exempt from restriction
            value: Number value (e.g., required approvals count)
    
        Returns:
            Created restriction info
        """
        payload: dict[str, Any] = {
            "kind": kind,
            "branch_match_kind": branch_match_kind,
        }
    
        if branch_match_kind == "glob" and pattern:
            payload["pattern"] = pattern
        if branch_match_kind == "branching_model" and branch_type:
            payload["branch_type"] = branch_type
        if users:
            payload["users"] = users
        if groups:
            payload["groups"] = groups
        if value is not None:
            payload["value"] = value
    
        result = self._request(
            "POST",
            self._repo_path(repo_slug, "branch-restrictions"),
            json=payload,
        )
        return self._require_result(result, "create branch restriction", kind)
  • Pydantic model defining the structure of branch restriction data, used for serialization in related tools.
    class BranchRestriction(BaseModel):
        """Branch restriction info."""
    
        id: int
        kind: str
        pattern: str = ""
        branch_match_kind: Optional[str] = None
        branch_type: Optional[str] = None
        value: Optional[int] = None
        users: list[str] = []
        groups: list[str] = []
    
        @classmethod
        def from_api(cls, data: dict) -> "BranchRestriction":
            return cls(
                id=data.get("id", 0),
                kind=data.get("kind", ""),
                pattern=data.get("pattern", ""),
                branch_match_kind=data.get("branch_match_kind"),
                branch_type=data.get("branch_type"),
                value=data.get("value"),
                users=[u.get("display_name", "") for u in data.get("users", [])],
                groups=[g.get("name", "") for g in data.get("groups", [])],
            )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JaviMaligno/mcp-server-bitbucket'

If you have feedback or need assistance with the MCP directory API, please join our Discord server