list_repo_labels
Retrieve available label names from a specified repository to organize and categorize issues effectively.
Instructions
list available labels for a repository
Args: repo: repository identifier in 'owner/repo' format
Returns: list of available label names for the repository
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | repository identifier in 'owner/repo' format (e.g., 'zzstoatzz/tangled-mcp') |
Implementation Reference
- src/tangled_mcp/server.py:207-228 (handler)MCP tool handler for list_repo_labels, including input schema via Annotated Field, decorated with @tangled_mcp.tool for registration and execution.@tangled_mcp.tool def list_repo_labels( repo: Annotated[ str, Field( description="repository identifier in 'owner/repo' format (e.g., 'zzstoatzz/tangled-mcp')" ), ], ) -> list[str]: """list available labels for a repository Args: repo: repository identifier in 'owner/repo' format Returns: list of available label names for the repository """ # resolve owner/repo to (knot, did/repo) _, repo_id = _tangled.resolve_repo_identifier(repo) # list_repo_labels doesn't need knot (queries atproto records, not XRPC) return _tangled.list_repo_labels(repo_id)
- The core helper function implementing the label listing logic by querying atproto repo records for subscribed label definitions.def list_repo_labels(repo_id: str) -> list[str]: """list available labels for a repository Args: repo_id: repository identifier in "did/repo" format Returns: list of available label names for the repo """ client = _get_authenticated_client() if not client.me: raise RuntimeError("client not authenticated") # parse repo_id to get owner_did and repo_name if "/" not in repo_id: raise ValueError(f"invalid repo_id format: {repo_id}") owner_did, repo_name = repo_id.split("/", 1) # get the repo's subscribed label definitions records = client.com.atproto.repo.list_records( models.ComAtprotoRepoListRecords.Params( repo=owner_did, collection="sh.tangled.repo", limit=100, ) ) repo_labels: list[str] = [] for record in records.records: if ( name := getattr(record.value, "name", None) ) is not None and name == repo_name: if (subscribed_labels := getattr(record.value, "labels", None)) is not None: # extract label names from URIs repo_labels = [uri.split("/")[-1] for uri in subscribed_labels] break if not repo_labels and not any( (name := getattr(r.value, "name", None)) and name == repo_name for r in records.records ): raise ValueError(f"repo not found: {repo_id}") return repo_labels