Skip to main content
Glama
aserper

RTFD (Read The F*****g Docs)

by aserper

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
NameRequiredDescriptionDefault
ownerYes
package_typeYes
package_nameYes

Implementation Reference

  • 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}",
                }
            )
  • 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
  • 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,
    }

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/aserper/RTFD'

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