get_repository_problems
Retrieve reported issues for a repository to identify package problems, dependency conflicts, or maintenance issues in software distributions.
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
| Name | Required | Description | Default |
|---|---|---|---|
| repository | Yes | ||
| start_from | No |
Implementation Reference
- src/repology_mcp/server.py:270-305 (handler)Main MCP tool handler for get_repository_problems. Fetches problems via RepologyClient and returns formatted JSON response, handling errors appropriately.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}"})
- src/repology_mcp/models.py:36-46 (schema)Pydantic model for Problem used in output schema validation and serialization for the tool response.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")
- src/repology_mcp/server.py:45-47 (helper)Helper function to convert list of Problem objects to indented JSON string, used in the tool handler.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)
- src/repology_mcp/client.py:285-320 (helper)RepologyClient method that performs the actual API request to fetch repository problems and parses them into Problem models.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}")
- src/repology_mcp/server.py:37-37 (registration)Creation of the FastMCP server instance where tools are registered via decorators.mcp = FastMCP("Repology API Server", lifespan=app_lifespan)