Repology MCP Server
The Repology MCP Server provides a standardized interface to access Repology package repository data, enabling comprehensive package management and monitoring capabilities.
Search for projects by name substring with optional filters for maintainer, category, and repository presence/absence
Get detailed project information including package details for specific projects, with optional repository filtering
List projects with extensive filtering options including maintainer, category, repository presence/absence, repository/family count, starting position, result limits, and status flags (newest, outdated, problematic)
Retrieve repository problems for specific repositories with pagination support
Get maintainer problems for specific maintainers with optional repository filtering and pagination
Provides access to Debian package repository data through Repology, enabling querying of package information, versions, and maintainer details across Debian repositories
Provides access to FreeBSD package repository data through Repology, enabling querying of package information, versions, and maintainer details across FreeBSD ports
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Repology MCP Servershow me details for the nginx package"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Repology MCP Server
A Model Context Protocol (MCP) server that provides access to the Repology package repository data through a standardized interface.
Features
This MCP server exposes the following tools:
search_projects: Search for projects by name
get_project: Get detailed information about a specific project
list_projects: List projects with optional filtering
get_repository_problems: Get problems reported for repositories
get_maintainer_problems: Get problems reported for specific maintainers
Related MCP server: Aptly MCP Server
Installation
Using uv (recommended)
# Install dependencies
uv sync
# Install in development mode
uv pip install -e .Using pip
pip install -e .Usage
As a standalone server
# Run with stdio transport (for Claude Desktop, etc.)
repology-mcp-server
# Run with HTTP transport
repology-mcp-server --transport http --port 8000With Claude Desktop
Add to your Claude Desktop configuration:
{
"mcpServers": {
"repology": {
"command": "uv",
"args": ["run", "repology-mcp-server"]
}
}
}Or using the pre-built Docker image:
{
"mcpServers": {
"repology": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/tschoonj/repology-mcp-server:latest"]
}
}
}With VS Code
Add to your VS Code settings (.vscode/settings.json or user settings):
{
"mcp.servers": {
"repology": {
"command": "uv",
"args": ["run", "repology-mcp-server"]
}
}
}Or using the pre-built Docker image:
{
"mcp.servers": {
"repology": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/tschoonj/repology-mcp-server:latest"]
}
}
}As a development server
# Run in development mode with MCP inspector
uv run mcp dev src/repology_mcp/server.pyUsing Docker
Pre-built images from GitHub Container Registry
# Pull the latest image
docker pull ghcr.io/tschoonj/repology-mcp-server:latest
# Run with stdio transport
docker run -i --rm ghcr.io/tschoonj/repology-mcp-server:latest
# Run with HTTP transport on port 8000
docker run --rm -p 8000:8000 ghcr.io/tschoonj/repology-mcp-server:latest --transport http --port 8000
# Use a specific version
docker pull ghcr.io/tschoonj/repology-mcp-server:1.0.0
docker run -i --rm ghcr.io/tschoonj/repology-mcp-server:1.0.0Local development with Docker
# Build the Docker image locally
docker build -t repology-mcp-server .
# Run with stdio transport
docker run -i --rm repology-mcp-server
# Run with HTTP transport on port 8000
docker run --rm -p 8000:8000 repology-mcp-server --transport http --port 8000Development
Setup
# Clone the repository
git clone <repository-url>
cd repology-mcp-server
# Install development dependencies
uv sync --extra devRunning tests
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov=repology_mcp --cov-report=html
# Run specific test file
uv run pytest tests/test_client.py -vCode formatting
# Format code
uv run black src tests
uv run isort src tests
# Type checking
uv run mypy srcAPI Reference
Tools
search_projects
Search for projects by name substring.
Parameters:
query(string): Search term to match against project nameslimit(integer, optional): Maximum number of results (default: 10, max: 100)
get_project
Get detailed package information for a specific project.
Parameters:
project_name(string): Exact name of the project to retrieve
list_projects
List projects with optional filtering.
Parameters:
start_from(string, optional): Project name to start listing fromlimit(integer, optional): Maximum number of results (default: 10, max: 200)maintainer(string, optional): Filter by maintainer emailcategory(string, optional): Filter by categoryinrepo(string, optional): Filter by repository presencenotinrepo(string, optional): Filter by repository absence
get_repository_problems
Get problems reported for a specific repository.
Parameters:
repository(string): Repository name (e.g., "freebsd", "debian")start_from(string, optional): Project name to start from for pagination
get_maintainer_problems
Get problems reported for packages maintained by a specific person.
Parameters:
maintainer(string): Maintainer email addressrepository(string, optional): Limit to specific repositorystart_from(string, optional): Project name to start from for pagination
License
MIT License - see LICENSE file for details.
Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests for new functionality
Run the test suite
Submit a pull request
Available Tools
5 toolsget_maintainer_problemsB
Get problems reported for packages maintained by a specific person.
Args:
maintainer: Maintainer email address
repository: Optional repository to limit results to
start_from: Project name to start from for pagination
Returns:
JSON formatted list of problems for the maintainer
| Name | Required | Description | Default |
|---|---|---|---|
| maintainer | Yes | ||
| repository | No | ||
| start_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the tool returns a 'JSON formatted list of problems' and implies pagination via 'start_from', but it doesn't cover critical aspects like whether this is a read-only operation (likely, but not stated), potential rate limits, authentication requirements, error handling, or what constitutes a 'problem'. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with zero wasted words. It starts with a clear purpose statement, followed by bullet-point-like sections for 'Args' and 'Returns' that are easy to parse. Every sentence adds value, and the information is front-loaded, making it efficient for an AI agent to understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no annotations, but with an output schema), the description is partially complete. It covers the purpose and parameters adequately, and the presence of an output schema means it doesn't need to detail return values. However, it lacks behavioral context (e.g., safety, limits) and usage guidelines relative to siblings, which are important for a tool with no annotations. This makes it minimally viable but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context beyond the input schema, which has 0% description coverage. It explains that 'maintainer' is an email address, 'repository' is optional to limit results, and 'start_from' is for pagination starting from a project name. This clarifies the purpose and usage of all three parameters, compensating well for the lack of schema descriptions. However, it doesn't specify formats (e.g., email validation) or pagination details, keeping it from a perfect score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get problems reported for packages maintained by a specific person.' It specifies the verb ('Get'), resource ('problems'), and scope ('for packages maintained by a specific person'), which is more specific than just restating the name. However, it doesn't explicitly differentiate from sibling tools like 'get_repository_problems' or 'search_projects', which might also retrieve problems in different contexts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_repository_problems' (which might fetch problems by repository instead of maintainer) or 'search_projects' (which could involve problem searches). There are no explicit when-to-use or when-not-to-use instructions, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectA
Get detailed information about a specific project.
Args:
project_name: Exact name of the project to retrieve
repository: Optional repository filter to show only packages from that repository
Returns:
JSON formatted list of packages for the project
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes | ||
| repository | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a read operation ('Get'), but doesn't mention authentication requirements, rate limits, error conditions, or whether this is a real-time query versus cached data. The description adds minimal behavioral context beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns) and front-loaded the core purpose. Every sentence earns its place, though the 'Returns' section could be slightly more detailed given there's an output schema. Overall efficient but not perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which handles return value documentation) and the description provides good parameter semantics, this is reasonably complete. However, for a tool with no annotations, it could benefit from more behavioral context about authentication, errors, or performance characteristics to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides excellent parameter semantics despite 0% schema description coverage. It clearly explains that 'project_name' requires an exact name and 'repository' is an optional filter to show only packages from that repository. This adds significant value beyond the bare schema, fully compensating for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with 'Get detailed information about a specific project' - a specific verb ('Get') and resource ('project'). It distinguishes from siblings like 'list_projects' (which likely lists multiple projects) and 'search_projects' (which searches rather than retrieves a specific one). However, it doesn't explicitly mention how it differs from 'get_maintainer_problems' or 'get_repository_problems'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the parameter descriptions - you need an exact project name and can optionally filter by repository. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like 'list_projects' or 'search_projects', nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repository_problemsB
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
| Name | Required | Description | Default |
|---|---|---|---|
| repository | Yes | ||
| start_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions pagination behavior ('start_from' for pagination) and the return format ('JSON formatted list'), but doesn't cover important aspects like whether this is a read-only operation, rate limits, authentication requirements, or error handling. For a tool with no annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with clear sections (purpose, args, returns) and every sentence adds value. The three-sentence format is front-loaded with the core purpose, followed by parameter explanations, then return format - all without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, 1 required), no annotations, but with an output schema present, the description provides adequate coverage. It explains the purpose, parameters, and return format, though it could benefit from more behavioral context (like pagination details or error cases) since annotations are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for both parameters beyond the schema's 0% coverage. It explains that 'repository' is a repository name with examples ('freebsd', 'debian'), and clarifies that 'start_from' is 'for pagination' with a project name. This compensates well for the schema's lack of descriptions, though it doesn't fully explain the pagination mechanism.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('problems reported for a specific repository'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_maintainer_problems' or 'search_projects', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_maintainer_problems' or 'search_projects'. It mentions pagination with 'start_from', but doesn't explain when pagination is needed or how this tool differs from other problem-related tools in the server.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List projects with optional filtering.
Args:
start_from: Project name to start listing from
limit: Maximum number of results (default: 10, max: 200)
maintainer: Filter by maintainer email
category: Filter by category
inrepo: Filter by repository presence
notinrepo: Filter by repository absence
repos: Filter by number of repositories (e.g., "1", "5-", "-5", "2-7")
families: Filter by number of repository families
newest: Show only newest projects
outdated: Show only outdated projects
problematic: Show only problematic projects
Returns:
JSON formatted dictionary of projects and their packages
| Name | Required | Description | Default |
|---|---|---|---|
| start_from | No | ||
| limit | No | ||
| maintainer | No | ||
| category | No | ||
| inrepo | No | ||
| notinrepo | No | ||
| repos | No | ||
| families | No | ||
| newest | No | ||
| outdated | No | ||
| problematic | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clarifies this is a listing operation with filtering, and specifies return format ('JSON formatted dictionary of projects and their packages'), which is helpful. However, it lacks details on pagination behavior (beyond the 'start_from' parameter), rate limits, authentication requirements, or whether this is a read-only operation—critical context for a tool with 11 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement followed by categorized parameter explanations and return format. While comprehensive for 11 parameters, it remains efficient—each sentence serves a purpose. Minor improvement could be front-loading more critical behavioral context before parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, 0% schema coverage, no annotations) and presence of an output schema (implied by 'Returns' section), the description does well. It explains all parameters semantically and specifies the return format. However, it lacks context on operational constraints (e.g., rate limits, side effects) which would be valuable for a filtering-heavy tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It provides clear semantic explanations for all 11 parameters, including examples for complex ones like 'repos' (e.g., '1', '5-', '-5', '2-7') and clarifying boolean filters like 'newest,' 'outdated,' and 'problematic.' This adds significant value beyond the bare schema, making parameter purposes understandable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List projects with optional filtering.' This specifies the verb ('List') and resource ('projects') with mention of filtering capability. However, it doesn't distinguish this tool from sibling tools like 'search_projects' or 'get_project,' which likely have different scopes or approaches to project retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'search_projects' or 'get_project.' It mentions filtering capabilities but doesn't specify scenarios where this listing approach is preferred over searching or direct retrieval, leaving the agent to guess based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_projectsA
Search for projects by name substring.
Args:
query: Search term to match against project names
limit: Maximum number of results (default: 10, max: 100)
maintainer: Optional maintainer email filter
category: Optional category filter
inrepo: Optional repository presence filter
notinrepo: Optional repository absence filter
Returns:
JSON formatted list of matching projects with their packages
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No | ||
| maintainer | No | ||
| category | No | ||
| inrepo | No | ||
| notinrepo | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the return format (JSON list with packages) and default/max values for 'limit', which is useful behavioral context. However, it doesn't mention pagination behavior, rate limits, authentication requirements, or error conditions that would be important for a search operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear purpose statement followed by organized parameter documentation and return format. Every sentence earns its place, with no redundant information. The description is appropriately sized for a 6-parameter search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (true), the description doesn't need to explain return values in detail. It provides adequate parameter documentation and behavioral context for a search operation. The main gap is lack of guidance on when to use versus sibling tools, but otherwise fairly complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides clear explanations for all 6 parameters, including the required 'query' parameter, default values, optional filters, and clarifies what 'inrepo' and 'notinrepo' mean. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for projects by name substring, providing a specific verb (search) and resource (projects). It distinguishes from siblings like 'list_projects' by specifying substring matching, but doesn't explicitly contrast with other search-related siblings like 'get_project'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list_projects' or 'get_project' is provided. The description only states what the tool does, not when it's appropriate versus other available tools on the server.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
- First observed
get_maintainer_problems - First observed
get_project - First observed
get_repository_problems - First observed
list_projects - First observed
search_projects
TDQS
Each tool has a clearly distinct purpose: get_maintainer_problems and get_repository_problems focus on problem reporting for different entities, get_project retrieves detailed project information, list_projects provides filtered listings, and search_projects enables name-based searching. There is no overlap in functionality that would cause confusion.
All tools follow a consistent verb_noun pattern with snake_case: get_maintainer_problems, get_project, get_repository_problems, list_projects, search_projects. The naming is predictable and follows the same convention throughout.
With 5 tools, this server is well-scoped for a Repology interface. Each tool serves a specific purpose in querying projects, problems, and repositories, making the count appropriate without being too sparse or bloated.
The toolset covers core Repology operations well: retrieving projects (get_project, list_projects, search_projects) and problem reporting (get_maintainer_problems, get_repository_problems). Minor gaps might include updating or managing data, but these are likely read-only operations for this domain, so coverage is good.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Repology cross-distro package version aggregator
Linux package, file, command, vulnerability, lifecycle, migration, and repository intelligence.
Dive into the world of npm with our NPM Package Info MCP. Access crucial metadata about any npm
Package intelligence for AI agents across npm, PyPI, crates.io and deps.dev. No API keys.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to search, analyze, and retrieve detailed information about Dart and Flutter packages from pub.dev. Supports package discovery, version management, dependency analysis, and documentation access.6225MIT
- -licenseAqualityNot gradedmaintenanceEnables AI assistants to manage Debian package repositories through natural language using the Aptly package management tool. Supports repository creation, package operations, snapshot management, publishing, and mirror synchronization.19111-
- AlicenseAqualityBmaintenanceEnables querying package ecosystem data from ecosyste.ms, including package metadata, versions, security advisories, dependencies, and repository information across 40+ package registries with fast local SQLite lookups and API fallback.10319MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search and retrieve detailed package information from multiple package registries (NPM, crates.io, NuGet, PyPI, Go).751MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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