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

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

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

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

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