bb_search_repositories
Search Bitbucket repositories by name, project key, language, or update date using Bitbucket's query syntax. Supports pagination and workspace-specific searches for efficient repository management.
Instructions
Search repositories in Bitbucket using Bitbucket's query syntax. Search by name (name ~ "pattern"), project key (project.key = "PROJ"), language (language = "python"), or dates (updated_on >= "2024-01-19"). NOTE: All dates must be in ISO 8601 format (YYYY-MM-DD). For searching files within repositories, use Bitbucket's code search in the web interface.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| pagelen | No | Number of results per page (max 100) | |
| query | Yes | Search query (e.g., 'name ~ "test"' or 'project.key = "PROJ"') | |
| workspace | No | Workspace to search in (defaults to kallows) | kallows |
Implementation Reference
- src/mcp_bitbucket/server.py:507-571 (handler)The handler function within handle_call_tool that executes the bb_search_repositories tool by querying the Bitbucket API with the provided search parameters, formatting and returning the repository results.elif name == "bb_search_repositories": workspace = arguments.get("workspace", "kallows") query = arguments.get("query") page = arguments.get("page", 1) pagelen = min(arguments.get("pagelen", 10), 100) # Cap at 100 url = f"https://api.bitbucket.org/2.0/repositories/{workspace}" params = { 'q': query, 'page': page, 'pagelen': pagelen } response = requests.get(url, params=params, auth=auth, headers=headers) if response.status_code == 200: repos = response.json() # Format the results nicely results = [] for repo in repos.get('values', []): repo_info = { 'name': repo.get('name'), 'full_name': repo.get('full_name'), 'description': repo.get('description', 'No description'), 'created_on': repo.get('created_on'), 'updated_on': repo.get('updated_on'), 'size': repo.get('size', 0), 'language': repo.get('language', 'Unknown'), 'has_wiki': repo.get('has_wiki', False), 'is_private': repo.get('is_private', True), 'url': repo.get('links', {}).get('html', {}).get('href', '') } results.append(repo_info) # Add pagination info pagination = { 'page': page, 'pagelen': pagelen, 'size': repos.get('size', 0), 'next': 'next' in repos.get('links', {}), 'previous': 'previous' in repos.get('links', {}) } return [types.TextContent( type="text", text=f"Found {len(results)} repositories:\n\n" + '\n\n'.join([ f"• {r['name']}\n" f" Description: {r['description']}\n" f" Language: {r['language']}\n" f" URL: {r['url']}" for r in results ]) + f"\n\nPage {pagination['page']} | " f"Total results: {pagination['size']} | " f"{'More results available' if pagination['next'] else 'End of results'}" )] else: return [types.TextContent( type="text", text=f"Failed to search repositories: {response.status_code}\n{format_permission_error(response.text)}", isError=True )]
- src/mcp_bitbucket/server.py:294-322 (registration)The tool registration in handle_list_tools, defining the name, description, and input schema for bb_search_repositories.types.Tool( name="bb_search_repositories", description="Search repositories in Bitbucket using Bitbucket's query syntax. Search by name (name ~ \"pattern\"), project key (project.key = \"PROJ\"), language (language = \"python\"), or dates (updated_on >= \"2024-01-19\"). NOTE: All dates must be in ISO 8601 format (YYYY-MM-DD). For searching files within repositories, use Bitbucket's code search in the web interface.", inputSchema={ "type": "object", "properties": { "workspace": { "type": "string", "description": "Workspace to search in (defaults to kallows)", "default": "kallows" }, "query": { "type": "string", "description": "Search query (e.g., 'name ~ \"test\"' or 'project.key = \"PROJ\"')" }, "page": { "type": "integer", "description": "Page number for pagination", "default": 1 }, "pagelen": { "type": "integer", "description": "Number of results per page (max 100)", "default": 10 } }, "required": ["query"] } ),