Skip to main content
Glama
tschoonj

Repology MCP Server

by tschoonj

get_repository_problems

Retrieve reported issues for a specific package repository to identify problems across distributions and package managers.

Instructions

Get problems reported for a specific repository.

Args:
    repository: Repository name (e.g., "freebsd", "debian")
    start_from: Project name to start from for pagination

Returns:
    JSON formatted list of problems for the repository

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repositoryYes
start_fromNo

Implementation Reference

  • The main @mcp.tool()-decorated handler function that implements the core logic for the 'get_repository_problems' tool. It fetches problems from the Repology client, handles empty results, errors, and serializes to JSON.
    @mcp.tool()
    async def get_repository_problems(
        repository: str,
        start_from: Optional[str] = None,
        ctx: Context[ServerSession, AppContext] = None,
    ) -> str:
        """Get problems reported for a specific repository.
    
        Args:
            repository: Repository name (e.g., "freebsd", "debian")
            start_from: Project name to start from for pagination
    
        Returns:
            JSON formatted list of problems for the repository
        """
        try:
            client = ctx.request_context.lifespan_context.repology_client
            problems = await client.get_repository_problems(
                repository=repository, start_from=start_from
            )
    
            if not problems:
                return json.dumps(
                    {"message": f"No problems found for repository '{repository}'"}
                )
    
            return _problems_to_json(problems)
    
        except RepologyNotFoundError:
            return json.dumps({"error": f"Repository '{repository}' not found"})
        except RepologyAPIError as e:
            await ctx.error(f"Repology API error: {e}")
            return json.dumps({"error": str(e)})
        except Exception as e:
            await ctx.error(f"Unexpected error getting repository problems: {e}")
            return json.dumps({"error": f"Unexpected error: {e}"})
  • Pydantic model defining the structure and validation for Problem objects returned by the tool.
    class Problem(BaseModel):
        """A problem reported for a package."""
    
        type: str = Field(description="Problem type")
        data: Dict[str, Any] = Field(description="Additional problem details")
        project_name: str = Field(description="Repology project name")
        version: str = Field(description="Package version")
        srcname: Optional[str] = Field(None, description="Source package name")
        binname: Optional[str] = Field(None, description="Binary package name")
        rawversion: Optional[str] = Field(None, description="Raw package version")
  • Helper function used by the handler to serialize the list of Problem objects to a formatted JSON string.
    def _problems_to_json(problems: List[Problem]) -> str:
        """Convert problems list to formatted JSON string."""
        return json.dumps([prob.model_dump() for prob in problems], indent=2)
  • RepologyClient method that performs the actual HTTP API request to fetch repository problems and validates them using the Problem model.
    async def get_repository_problems(
        self, repository: str, start_from: Optional[str] = None
    ) -> ProblemsData:
        """Get problems for a specific repository.
    
        Args:
            repository: Repository name
            start_from: Project name to start from for pagination
    
        Returns:
            List of problems
        """
        endpoint = f"repository/{quote(repository)}/problems"
        params = {}
        if start_from:
            params["start"] = start_from
    
        try:
            data = await self._make_request(endpoint, params)
    
            if not isinstance(data, list):
                raise RepologyAPIError(f"Expected list, got {type(data)}")
    
            problems = []
            for item in data:
                try:
                    problems.append(Problem.model_validate(item))
                except ValidationError as e:
                    print(f"Warning: Failed to validate problem data: {e}")
                    continue
    
            return problems
    
        except Exception as e:
            raise RepologyAPIError(f"Failed to get repository problems: {e}")

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/tschoonj/repology-mcp-server'

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