MCP 레지스트리 지원 패키지 유형

MCP 레지스트리 지원 패키지 유형 (Supported Package Types)

MCP 레지스트리는 여러 패키지 유형을 지원하고, 각 패키지 유형은 고유한 검증 방법을 가져요. 이 글은 지원되는 패키지 유형(npm, PyPI, NuGet, Cargo, Docker/OCI, MCPB)과 각각의 소유권 검증 방식을 정리해요.

출처: MCP 공식 문서 - MCP Registry Supported Package Types

💡 MCP 레지스트리는 현재 프리뷰 단계예요. 일반 공개 전에 파괴적 변경이나 데이터 리셋이 있을 수 있습니다. 이슈가 있으면 GitHub에 보고해 주세요.

npm 패키지

npm 패키지의 경우 MCP 레지스트리는 현재 npm 공개 레지스트리(https://registry.npmjs.org)만 지원해요.

npm 패키지는 server.json에서 "registryType": "npm"을 사용합니다. 예를 들어:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.username/email-integration-mcp",
  "title": "Email Integration",
  "description": "Send emails and manage email accounts",
  "version": "1.0.0",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@username/email-integration-mcp",
      "version": "1.0.0",
      "transport": {
        "type": "stdio"
      }
    }
  ]
}

소유권 검증

MCP 레지스트리는 package.jsonmcpName을 확인해 npm 패키지의 소유권을 검증해요. mcpName 속성은 server.json의 서버 이름과 MUST 일치해야 합니다. 예를 들어:

{
  "name": "@username/email-integration-mcp",
  "version": "1.0.0",
  "mcpName": "io.github.username/email-integration-mcp"
}

PyPI 패키지

PyPI 패키지의 경우 MCP 레지스트리는 현재 공식 PyPI 레지스트리(https://pypi.org)만 지원해요.

PyPI 패키지는 server.json에서 "registryType": "pypi"를 사용합니다. 예를 들어:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.username/database-query-mcp",
  "title": "Database Query",
  "description": "Execute SQL queries and manage database connections",
  "version": "1.0.0",
  "packages": [
    {
      "registryType": "pypi",
      "identifier": "database-query-mcp",
      "version": "1.0.0",
      "transport": {
        "type": "stdio"
      }
    }
  ]
}

소유권 검증

MCP 레지스트리는 패키지 README(PyPI에서 패키지 설명이 되는)에 mcp-name: $SERVER_NAME 문자열이 존재하는지 확인해 PyPI 패키지의 소유권을 검증해요. 그 문자열은 주석에 숨겨져 있어도 되지만, $SERVER_NAME 부분은 server.json의 서버 이름과 MUST 일치해야 합니다. 예를 들어:

# Database Query MCP Server

This MCP server executes SQL queries and manages database connections.

<!-- mcp-name: io.github.username/database-query-mcp -->

NuGet 패키지

NuGet 패키지의 경우 MCP 레지스트리는 현재 공식 NuGet 레지스트리(https://api.nuget.org/v3/index.json)만 지원해요.

NuGet 패키지는 server.json에서 "registryType": "nuget"을 사용합니다. 예를 들어:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.username/azure-devops-mcp",
  "title": "Azure DevOps",
  "description": "Manage Azure DevOps work items and pipelines",
  "version": "1.0.0",
  "packages": [
    {
      "registryType": "nuget",
      "identifier": "Username.AzureDevOpsMcp",
      "version": "1.0.0",
      "transport": {
        "type": "stdio"
      }
    }
  ]
}

소유권 검증

MCP 레지스트리는 패키지 README에 mcp-name: $SERVER_NAME 문자열이 존재하는지 확인해 NuGet 패키지의 소유권을 검증해요. 그 문자열은 주석에 숨겨져 있어도 되지만, $SERVER_NAME 부분은 server.json의 서버 이름과 MUST 일치해야 합니다. 예를 들어:

# Azure DevOps MCP Server

This MCP server manages Azure DevOps work items and pipelines.

<!-- mcp-name: io.github.username/azure-devops-mcp -->

Cargo(Rust) 패키지

Cargo 패키지의 경우 MCP 레지스트리는 현재 공식 crates.io 레지스트리(https://crates.io)만 지원해요.

Cargo 패키지는 server.json에서 "registryType": "cargo"를 사용합니다. 예를 들어:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.username/widget-mcp",
  "title": "Widget",
  "description": "Rust-native MCP server",
  "version": "0.3.0",
  "packages": [
    {
      "registryType": "cargo",
      "identifier": "widget-mcp",
      "version": "0.3.0",
      "transport": {
        "type": "stdio"
      }
    }
  ]
}

런타임 모델

Cargo의 런타임 모델은 npm/PyPI/NuGet과 달라요. cargo install <crate>는 컴파일된 바이너리를 ~/.cargo/bin의 PATH에 배치하며, 이후 MCP 클라이언트는 그 바이너리를 이름으로 직접 호출합니다. npx(npm), uvx(PyPI), dnx(NuGet, .NET 10 SDK Preview 6+)에 해당하는 호출별 러너가 없어요. 설치는 일회성이고, 실행은 바이너리 이름으로 이뤄져요. 위 Cargo 예제가 의도적으로 runtimeHint를 생략한 이유가 이것입니다.

Rust MCP 작성자에게는 두 가지 일급 배포 경로가 있어요.

  • Cargo(registryType: cargo) — crates.io를 통해 소스로 배포. 최종 사용자는 cargo install을 실행하려면 Rust 툴체인(rustup)이 필요해요. Rust 생태계에 관용적이고, Rust CLI가 보통 게시되는 방식과 일치해요.
  • MCPB(registryType: mcpb) — GitHub 또는 GitLab Releases를 통해 사전 빌드된 바이너리로 배포. 최종 사용자에게 툴체인이 필요 없어요. 우선순위가 "Rust 툴체인 불필요"라면 올바른 선택이에요.

두 경로 모두 지원됩니다. 선택은 작성자의 몫이에요. Cargo 네이티브 지원이 존재하는 것은 소스 배포를 선호하는 Rust 작성자가 MCPB 바이너리 패키징 우회책으로 몰리지 않게 하기 위함이에요.

소유권 검증

MCP 레지스트리는 패키지 README(crates.io의 정적 CDN이 HTML로 렌더링·서빙하는)에 mcp-name: $SERVER_NAME 문자열이 존재하는지 확인해 Cargo 패키지의 소유권을 검증해요. $SERVER_NAME 부분은 server.json의 서버 이름과 MUST 일치해야 합니다. 예를 들어:

# Widget MCP Server

A Rust-native MCP server for widget operations.

- MCP Registry name: `mcp-name: io.github.username/widget-mcp`

Cargo 전용 함정: PyPI와 NuGet(README 렌더링에서 HTML 주석을 보존)과 달리, crates.io는 markdown→HTML 변환 중 HTML 주석을 제거합니다. PyPI/NuGet에서 동작하는 <!-- mcp-name: ... --> 숨김 주석 형태는 cargo에서 동작하지 않아요. 토큰이 검증기가 검사하는 렌더링된 HTML에 나타나지 않기 때문이죠. Cargo 작성자는 mcp-name: 토큰을 보이는 markdown 텍스트로 포함해야 합니다. Links 섹션의 간단한 불릿이 권장 패턴이에요.

Docker/OCI 이미지

Docker/OCI 이미지의 경우 MCP 레지스트리는 현재 다음을 지원해요.

  • Docker Hub (docker.io)
  • GitHub Container Registry (ghcr.io)
  • Google Artifact Registry (모든 *.pkg.dev 도메인)
  • Azure Container Registry (*.azurecr.io)
  • Microsoft Container Registry (mcr.microsoft.com)

Docker/OCI 이미지는 server.json에서 "registryType": "oci"를 사용합니다. 예를 들어:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.username/kubernetes-manager-mcp",
  "title": "Kubernetes Manager",
  "description": "Deploy and manage Kubernetes resources",
  "version": "1.0.0",
  "packages": [
    {
      "registryType": "oci",
      "identifier": "docker.io/yourusername/kubernetes-manager-mcp:1.0.0",
      "transport": {
        "type": "stdio"
      }
    }
  ]
}

identifier의 형식은 registry/namespace/repository:tag입니다. 예를 들어 docker.io/user/app:1.0.0 또는 ghcr.io/user/app:1.0.0이에요. 태그는 다이제스트로도 지정할 수 있어요.

소유권 검증

MCP 레지스트리는 io.modelcontextprotocol.server.name 어노테이션을 확인해 Docker/OCI 이미지의 소유권을 검증해요. io.modelcontextprotocol.server.name 어노테이션 값은 server.json의 서버 이름과 MUST 일치해야 합니다. 예를 들어:

LABEL io.modelcontextprotocol.server.name="io.github.username/kubernetes-manager-mcp"

MCPB 패키지

MCPB 패키지의 경우 MCP 레지스트리는 현재 GitHub 또는 GitLab 릴리스를 통해 호스팅된 MCPB 아티팩트를 지원해요.

MCPB 패키지는 server.json에서 "registryType": "mcpb"를 사용합니다. 예를 들어:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.username/image-processor-mcp",
  "title": "Image Processor",
  "description": "Process and transform images with various filters",
  "version": "1.0.0",
  "packages": [
    {
      "registryType": "mcpb",
      "identifier": "https://github.com/username/image-processor-mcp/releases/download/v1.0.0/image-processor.mcpb",
      "fileSha256": "fe333e598595000ae021bd27117db32ec69af6987f507ba7a63c90638ff633ce",
      "transport": {
        "type": "stdio"
      }
    }
  ]
}

검증

MCPB 패키지 URL(server.jsonidentifier)은 MUST 문자열 "mcp"를 포함해야 합니다. .mcpb 파일 확장자의 일부이거나 저장소 이름의 일부일 수 있어요.

server.json의 패키지 메타데이터는 MCPB 아티팩트의 SHA-256 해시를 담은 fileSha256 속성을 MUST 포함해야 합니다. openssl 명령으로 계산할 수 있어요.

openssl dgst -sha256 image-processor.mcpb

MCP 레지스트리는 이 해시를 검증하지 않지만, MCP 클라이언트는 설치 전에 파일 무결성을 보장하기 위해 해시를 검증합니다. 다운스트림 레지스트리도 자체 검증을 구현할 수 있어요.

더 알아보기 (Learn more)