get_package_versions
Retrieve available versions and tags for a GitHub package to ensure compatibility and prevent outdated dependencies.
Instructions
Get versions for a specific GitHub package.
USE THIS WHEN: You found a package using list_github_packages and want to see available tags/versions.
Args:
owner: GitHub username or organization name
package_type: Type of package (e.g., "container")
package_name: Name of the package (e.g., "rtfd")
Returns:
JSON list of versions/tags.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | ||
| package_type | Yes | ||
| package_name | Yes |
Implementation Reference
- src/RTFD/providers/github.py:706-739 (handler)The primary tool handler function for 'get_package_versions'. It invokes the helper method, processes the data into a structured result, handles exceptions, and returns a serialized CallToolResult.async def get_package_versions( owner: str, package_type: str, package_name: str ) -> CallToolResult: """ Get versions for a specific GitHub package. USE THIS WHEN: You found a package using list_github_packages and want to see available tags/versions. Args: owner: GitHub username or organization name package_type: Type of package (e.g., "container") package_name: Name of the package (e.g., "rtfd") Returns: JSON list of versions/tags. """ try: data = await self._get_package_versions(owner, package_type, package_name) result = { "owner": owner, "package_name": package_name, "versions": data, "count": len(data), } return serialize_response_with_meta(result) except Exception as exc: return serialize_response_with_meta( { "owner": owner, "package_name": package_name, "error": f"Failed to get versions: {exc!s}", } )
- src/RTFD/providers/github.py:561-622 (helper)Private helper function that performs the core logic: constructs GitHub API endpoints for user/org packages, fetches versions data, parses tags and metadata, and returns a list of version dictionaries.async def _get_package_versions( self, owner: str, package_type: str, package_name: str ) -> list[dict[str, Any]]: """ Get versions of a specific package. """ try: headers = self._get_headers() # Similar strategy for orgs vs users # /users/{username}/packages/{package_type}/{package_name}/versions # /orgs/{org}/packages/{package_type}/{package_name}/versions endpoints = [ f"https://api.github.com/users/{owner}/packages/{package_type}/{package_name}/versions", f"https://api.github.com/orgs/{owner}/packages/{package_type}/{package_name}/versions", ] data = [] error = None async with await self._http_client() as client: for url in endpoints: try: resp = await client.get(url, headers=headers) if resp.status_code == 200: data = resp.json() error = None break elif resp.status_code == 404: continue else: resp.raise_for_status() except httpx.HTTPError as exc: error = exc continue if not data and error: raise error or Exception(f"Could not find versions for {package_name}") versions = [] for item in data: metadata = item.get("metadata", {}) container_metadata = metadata.get("container", {}) tags = container_metadata.get("tags", []) versions.append( { "id": item.get("id"), "name": item.get("name"), # SHA usually "url": item.get("html_url"), "created_at": item.get("created_at"), "updated_at": item.get("updated_at"), "tags": tags, } ) return versions except Exception as exc: raise exc
- src/RTFD/providers/github.py:928-933 (registration)The tool is registered in the dictionary returned by the get_tools() method, mapping the name 'get_package_versions' to its handler function.tools = { "github_repo_search": github_repo_search, "github_code_search": github_code_search, "list_github_packages": list_github_packages, "get_package_versions": get_package_versions, }