Skip to main content

Model Context Protocol (MCP)

Unizo offers an MCP server that integrates package and container registries with any LLM provider supporting the MCP protocol. This enables your AI agent to manage artifacts, analyze dependencies, and automate registry operations across Docker Hub, npm, PyPI, Maven Central, and other registry platforms via a single MCP server.

Supported Tools & Use Cases

The following tools are available in the Packages and Container Registry (PCR) MCP Server:

Tool NameDescription
list_servicesGet list of available PCR services
list_integrationsGet integrations for a specific PCR service
list_organizationsBrowse and search organizations with filtering options
get_organization_detailsRetrieve comprehensive organization information
list_repositoriesBrowse repositories within an organization
get_repository_detailsRetrieve detailed repository information
list_artifactsBrowse artifacts within a repository
get_artifact_detailsRetrieve detailed artifact information
list_tagsBrowse tags within an artifact
get_tag_detailsRetrieve detailed tag information

list_services

Get list of available PCR services

Parameters: None

Returns: List of available PCR services

Example Response:

[
{ "name": "gitlab" },
{ "name": "docker" },
{ "name": "artifactory" }
]

list_integrations

Get integrations for a specific PCR service

Parameters:

  • service (string, required): Name of the PCR service (e.g., "gitlab", "docker", "artifactory")

Returns: List of integrations available for the specified service

Example Response:

[
{
"id": "integration-123",
"name": "Company Container Registry Integration"
},
{
"id": "integration-456",
"name": "Dev Environment Registry"
}
]

list_organizations

Browse and search organizations with filtering options

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • offset (integer, optional): Number of items to skip (default: 0)
  • limit (integer, optional): Maximum number of items to return (default: 20, max: 100)

Returns: Paginated list of organizations

Example Response:

{
"status": "success",
"message": "Retrieved 15 organizations",
"data": {
"organizations": [
{
"id": "org-123",
"login": "company-dev",
"fork": false,
"changeLog": {
"createdDateTime": "2024-01-15T10:30:00Z",
"lastUpdatedDateTime": "2024-09-01T14:20:00Z",
"createdBy": {
"id": "user-456",
"firstName": "John",
"lastName": "Doe"
}
}
}
],
"pagination": {
"total": 15,
"offset": 0,
"limit": 20
},
"total_count": 15
}
}

get_organization_details

Get detailed information about a specific organization

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • organization_id (string, required): Unique identifier of the organization

Returns: Comprehensive organization information

Example Response:

{
"status": "success",
"message": "Retrieved organization details for org-123",
"data": {
"organization": {
"id": "org-123",
"login": "company-dev",
"fork": false,
"changeLog": {
"createdDateTime": "2024-01-15T10:30:00Z",
"lastUpdatedDateTime": "2024-09-01T14:20:00Z",
"createdBy": {
"href": "/users/user-456",
"id": "user-456",
"firstName": "John",
"lastName": "Doe",
"avatar": {
"small": "/avatars/user-456-small.png"
}
}
}
}
}
}

list_repositories

Browse repositories within an organization

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • organization_id (string, required): Unique identifier of the organization
  • offset (integer, optional): Number of items to skip (default: 0)
  • limit (integer, optional): Maximum number of items to return (default: 20, max: 100)

Returns: Paginated list of repositories for the specified organization

Example Response:

{
"status": "success",
"message": "Retrieved 8 repositories for organization org-123",
"data": {
"repositories": [
{
"type": "container",
"id": "repo-789",
"name": "web-app",
"description": "Main web application container repository",
"fullName": "company-dev/web-app",
"fork": false,
"language": "Docker",
"changeLog": {
"createdDateTime": "2024-02-01T09:15:00Z",
"lastUpdatedDateTime": "2024-09-10T11:45:00Z"
}
}
],
"pagination": {
"total": 8,
"offset": 0,
"limit": 20
},
"organization_id": "org-123",
"total_count": 8
}
}

get_repository_details

Get detailed information about a specific repository

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • organization_id (string, required): Unique identifier of the organization
  • repository_id (string, required): Unique identifier of the repository

Returns: Comprehensive repository information

Example Response:

{
"status": "success",
"message": "Retrieved repository details for repo-789",
"data": {
"repository": {
"type": "container",
"id": "repo-789",
"name": "web-app",
"description": "Main web application container repository",
"fullName": "company-dev/web-app",
"fork": false,
"language": "Docker",
"additionalInfo": [
{"key": "size", "value": "2.3GB"},
{"key": "downloads", "value": "1,245"}
],
"links": [
{
"rel": "self",
"href": "/repositories/repo-789",
"method": "GET"
}
],
"changeLog": {
"createdDateTime": "2024-02-01T09:15:00Z",
"lastUpdatedDateTime": "2024-09-10T11:45:00Z"
}
},
"organization_id": "org-123"
}
}

list_artifacts

Browse artifacts within a repository

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • organization_id (string, required): Unique identifier of the organization
  • repository_id (string, required): Unique identifier of the repository
  • offset (integer, optional): Number of items to skip (default: 0)
  • limit (integer, optional): Maximum number of items to return (default: 20, max: 100)
  • sort (string, optional): Field to sort by and direction (e.g., 'name', '-createdDateTime')

Returns: Paginated list of artifacts for the specified repository

Example Response:

{
"status": "success",
"message": "Retrieved 12 artifacts for repository repo-789",
"data": {
"artifacts": [
{
"href": "/artifacts/artifact-101",
"id": "artifact-101",
"type": "container",
"name": "web-app-v2.1",
"description": "Web application version 2.1 container image",
"changeLog": {
"createdDateTime": "2024-09-05T16:30:00Z",
"lastUpdatedDateTime": "2024-09-05T16:30:00Z"
}
}
],
"pagination": {
"total": 12,
"offset": 0,
"limit": 20
},
"organization_id": "org-123",
"repository_id": "repo-789",
"total_count": 12
}
}

get_artifact_details

Get detailed information about a specific artifact

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • organization_id (string, required): Unique identifier of the organization
  • repository_id (string, required): Unique identifier of the repository
  • artifact_id (string, required): Unique identifier of the artifact

Returns: Comprehensive artifact information

Example Response:

{
"status": "success",
"message": "Retrieved artifact details for artifact-101",
"data": {
"artifact": {
"href": "/artifacts/artifact-101",
"id": "artifact-101",
"type": "container",
"name": "web-app-v2.1",
"description": "Web application version 2.1 container image",
"changeLog": {
"createdDateTime": "2024-09-05T16:30:00Z",
"lastUpdatedDateTime": "2024-09-05T16:30:00Z",
"createdBy": {
"id": "user-789",
"firstName": "Jane",
"lastName": "Smith"
}
}
},
"organization_id": "org-123",
"repository_id": "repo-789"
}
}

list_tags

Browse tags within an artifact

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • organization_id (string, required): Unique identifier of the organization
  • repository_id (string, required): Unique identifier of the repository
  • artifact_id (string, required): Unique identifier of the artifact
  • offset (integer, optional): Number of items to skip (default: 0)
  • limit (integer, optional): Maximum number of items to return (default: 20, max: 100)
  • sort (string, optional): Field to sort by and direction (e.g., 'name', '-createdDateTime')

Returns: Paginated list of tags for the specified artifact

Example Response:

{
"status": "success",
"message": "Retrieved 5 tags for artifact artifact-101",
"data": {
"tags": [
{
"href": "/tags/tag-201",
"id": "tag-201",
"type": "semantic",
"name": "v2.1.0",
"description": "Stable release version 2.1.0",
"changeLog": {
"createdDateTime": "2024-09-05T16:35:00Z",
"lastUpdatedDateTime": "2024-09-05T16:35:00Z"
}
},
{
"href": "/tags/tag-202",
"id": "tag-202",
"type": "tag",
"name": "latest",
"description": "Latest stable version",
"changeLog": {
"createdDateTime": "2024-09-05T16:40:00Z",
"lastUpdatedDateTime": "2024-09-05T16:40:00Z"
}
}
],
"pagination": {
"total": 5,
"offset": 0,
"limit": 20
},
"organization_id": "org-123",
"repository_id": "repo-789",
"artifact_id": "artifact-101",
"total_count": 5
}
}

get_tag_details

Get detailed information about a specific tag

Parameters:

  • integration_id (string, required): Unique identifier for the integration
  • organization_id (string, required): Unique identifier of the organization
  • repository_id (string, required): Unique identifier of the repository
  • artifact_id (string, required): Unique identifier of the artifact
  • tag_id (string, required): Unique identifier of the tag

Returns: Comprehensive tag information

Example Response:

{
"status": "success",
"message": "Retrieved tag details for tag-201",
"data": {
"tag": {
"href": "/tags/tag-201",
"id": "tag-201",
"type": "semantic",
"name": "v2.1.0",
"description": "Stable release version 2.1.0",
"changeLog": {
"createdDateTime": "2024-09-05T16:35:00Z",
"lastUpdatedDateTime": "2024-09-05T16:35:00Z",
"createdBy": {
"id": "user-789",
"firstName": "Jane",
"lastName": "Smith"
}
}
},
"organization_id": "org-123",
"repository_id": "repo-789",
"artifact_id": "artifact-101"
}
}

Installation

Prerequisites

  • A Unizo API key
  • An active PCR integration (Amazon ECR, Docker Hub, Google Artifact Registry, GitHub Container Registry, GitLab Container Registry, JFrog Artifactory, Microsoft ACR, Nexus)
  • Node.js v20 or higher

MCP Configuration

Here is an example configuration for setting up the Unizo Packages And Container Registry MCP Server:

{
"mcpServers": {
"unizo-pcr": {
"command": "npx",
"args": [
"mcp-remote",
"https://api.unizo.ai/mcp/pcr",
"--allow-http",
"--header",
"apikey:${UNIZO_API_KEY}"
],
"env": {
"UNIZO_API_KEY": "your_api_key"
}
}
}
}

Client Setup

For detailed setup instructions with specific AI clients:

Environment Variables

The following environment variables are required:

Error Handling

All tools return errors in a consistent format:

{
"error": {
"code": "REPOSITORY_NOT_FOUND",
"message": "Repository 'example/repo' not found"
}
}

Common error codes:

  • INTEGRATION_NOT_FOUND: Invalid integration ID
  • REPOSITORY_NOT_FOUND: Repository doesn't exist or no access
  • ARTIFACT_NOT_FOUND: The specified package or image was not found
  • TAG_NOT_FOUND: Tag not found in repository
  • VULNERABILITY_SCAN_FAILED: Issue during vulnerability scan
  • RATE_LIMIT_EXCEEDED: API rate limit reached
  • UNAUTHORIZED: Invalid API key or insufficient permissions