kubernetools MCP Server

공식

AI 에이전트가 최신 및 이전 세 개의 Kubernetes 버전에 걸쳐 공식 Kubernetes API 참조를 제공하여 종류, 필드 및 중첩 유형을 현재 사양으로 조회할 수 있도록 함으로써 정확하고 최신의 Kubernetes 매니페스트를 작성할 수 있도록 지원합니다.

문서

kubernetools/mcp-server

kubernetools MCP 서버용 컨테이너 이미지입니다.

레지스트리: ghcr.io/kubernetools/mcp-server

빠른 시작

익명 모드 (로컬 사용)

인증이 필요하지 않으며, 모든 연결은 무료 티어 제한에 따라 소스 IP별로 속도가 제한됩니다.

podman run -d \
  -p 3000:3000 \
  -e K8S_VERSIONS=v1.33 \
  ghcr.io/kubernetools/mcp-server:latest

API 키 인증 사용

# 1. Create a key store file
echo '[{"key":"mykey","tier":"free"}]' > keys.json

# 2. Start the server
podman run -d \
  -p 3000:3000 \
  -v "$(pwd)/keys.json:/keys.json:ro" \
  -e K8S_VERSIONS=v1.33,v1.34,v1.35,v1.36 \
  -e KEY_STORE_PATH=/keys.json \
  ghcr.io/kubernetools/mcp-server:latest

구성

매개변수환경 변수설명
Kubernetes 버전K8S_VERSIONS사전 로드할 버전의 쉼표로 구분된 목록 (예: v1.33,v1.34). 기본값은 v1.33입니다.
GitHub 토큰GITHUB_TOKEN개인 액세스 토큰 (추가 범위 불필요). 선택 사항이며, GitHub API 속도 제한을 시간당 60회에서 5,000회로 높여 여러 버전을 로드할 때 권장됩니다.
키 저장소KEY_STORE_PATHAPI 키 JSON 파일 경로 (컨테이너에 마운트). 생략하면 서버가 익명 모드로 실행되어 인증이 필요하지 않으며 모든 연결이 무료 티어 제한에 따라 소스 IP별로 속도가 제한됩니다.
허용된 호스트ALLOWED_HOSTS허용할 Host 헤더 값의 쉼표로 구분된 목록 (예: mcp.example.com,mcp.example.com:443). 생략하면 호스트 유효성 검사가 비활성화되어 로컬 개발에만 적합합니다. DNS 리바인딩 공격을 방지하려면 프로덕션 환경에서 항상 설정하십시오.
브라우저 리디렉션BROWSER_REDIRECT_URL일반 브라우저 GET 요청을 리디렉션할 URL. MCP 클라이언트는 Accept: text/event-stream로 감지되며, 브라우저는 대신 이 URL로 307을 받습니다. 생략하면 브라우저 GET 요청은 400을 반환합니다.
로그 레벨RUST_LOG로그 레벨 필터 (예: info, debug, mcp=debug).
포트--publish서버는 3000 포트에서 수신 대기합니다.

인증

API 키 저장소

키 저장소는 시작 시 한 번 로드되는 플랫 JSON 배열입니다:

[
  { "key": "free-key-abc", "tier": "free" },
  { "key": "paid-key-xyz", "tier": "paid" }
]

모든 요청은 Authorization 헤더에 키를 포함해야 합니다:

Authorization: Bearer free-key-abc

유효한 키가 없는 요청은 401 Unauthorized을 받습니다.

익명 모드

KEY_STORE_PATH이 설정되지 않은 경우 서버는 인증 없이 실행됩니다. 모든 연결이 허용되며 무료 티어 제한에 따라 소스 IP별로 속도가 제한됩니다. 로컬 사용에 편리하며, 공개적으로 노출하지 마십시오.

티어 및 속도 제한

티어제한
free분당 10회 요청, 버스트 10
paid초당 약 1,000회 요청, 버스트 1,000 (사실상 무제한)

제한을 초과하는 요청은 429 Too Many Requests을 받습니다. 제한은 IP가 아닌 API 키별로 추적됩니다.

MCP 클라이언트 연결

서버는 MCP Streamable HTTP 전송을 구현합니다. 엔드포인트는 다음과 같습니다:

http://<host>:<port>/[?version=<k8s-version>]

version 쿼리 매개변수는 세션에 사용할 Kubernetes 버전을 선택합니다. 생략하면 로드된 첫 번째 버전이 사용됩니다. 알 수 없는 버전은 400 Bad Request을 반환합니다.

Claude Desktop

claude_desktop_config.json에 다음을 추가하십시오:

{
  "mcpServers": {
    "kubernetools": {
      "url": "http://localhost:3000/?version=v1.36",
      "headers": {
        "Authorization": "Bearer mykey"
      }
    }
  }
}

사용 가능한 도구

list_resources

경량 검색 — 리소스당 하나의 항목을 (group, kind, api_version) 기준으로 정렬하여 반환합니다. 종류 이름을 찾으려면 먼저 이것을 사용하십시오.

선택적 필터: group (예: "apps", "core"), api_version (예: "v1").

get_resource

전체 리소스 세부 정보 — 필드, 사양, 상태 및 목록 필드 — 한 번의 호출로 매니페스트를 작성하기에 충분합니다. 필수: kind. 선택 사항: group, api_version (기본값은 가장 최근).

null이 아닌 type_ref와 빈 sub_fields가 있는 필드는 get_type로 드릴다운해야 합니다.

get_type

get_resource 출력에서 type_ref을 통해 참조된 단일 복합 유형으로 드릴다운합니다. 필수: type_name (예: "Container", "PodFailurePolicy").

일반적인 쿼리 흐름

list_resources                          → discover kind names and groups
  └─ get_resource(kind="Deployment")   → see all top-level fields + spec/status
       └─ get_type(type_name="...")    → drill into any complex type_ref

상태 확인

GET /healthz 포트 3000에서.

  • Kubernetes API 문서를 로드하는 동안 503 Service Unavailable (본문: loading)을 반환합니다.
  • 서버가 준비되면 200 OK (본문: ok)을 반환합니다.

이 엔드포인트는 인증 및 속도 제한을 우회합니다.

시작, 준비 상태 및 활성 상태 프로브에 사용하십시오:

startupProbe:
  httpGet:
    path: /healthz
    port: 3000
  failureThreshold: 30   # allow up to 5 min for version loading
  periodSeconds: 10
readinessProbe:
  httpGet:
    path: /healthz
    port: 3000
livenessProbe:
  httpGet:
    path: /healthz
    port: 3000
  initialDelaySeconds: 10

오류 응답

HTTP 상태원인
307 Temporary RedirectBROWSER_REDIRECT_URL이 설정된 경우의 브라우저 GET
400 Bad RequestBROWSER_REDIRECT_URL이 설정되지 않은 경우의 브라우저 GET 또는 version 매개변수가 시작 시 로드되지 않은 버전을 지정하는 경우
401 UnauthorizedAuthorization: Bearer <key> 헤더 누락 또는 유효하지 않음
429 Too Many Requests키의 티어에 대한 속도 제한 초과

MCP 수준 오류(알 수 없는 도구 이름, 필수 인수 누락, 종류를 찾을 수 없음)는 일반 200 응답 내에서 MCP 오류 콘텐츠로 반환됩니다.

예제

여러 Kubernetes 버전

podman run -d \
  -p 3000:3000 \
  -v "$(pwd)/keys.json:/keys.json:ro" \
  -e K8S_VERSIONS=v1.33,v1.34,v1.35,v1.36 \
  -e GITHUB_TOKEN=ghp_... \
  -e KEY_STORE_PATH=/keys.json \
  ghcr.io/kubernetools/mcp-server:latest

호스트 유효성 검사를 사용한 프로덕션 설정

podman run -d \
  -p 3000:3000 \
  -v "$(pwd)/keys.json:/keys.json:ro" \
  -e K8S_VERSIONS=v1.36 \
  -e KEY_STORE_PATH=/keys.json \
  -e ALLOWED_HOSTS=mcp.example.com,mcp.example.com:443 \
  -e BROWSER_REDIRECT_URL=https://example.com/docs \
  ghcr.io/kubernetools/mcp-server:latest

디버그 로깅

podman run -d \
  -p 3000:3000 \
  -e K8S_VERSIONS=v1.33 \
  -e RUST_LOG=debug \
  ghcr.io/kubernetools/mcp-server:latest

특정 릴리스에 고정

podman run -d \
  -p 3000:3000 \
  -e K8S_VERSIONS=v1.33 \
  ghcr.io/kubernetools/mcp-server:0.1.0

이미지

registry.access.redhat.com/hi/core-runtime:2.42-openssl을 기반으로 빌드되었습니다 — 최소한의 distroless glibc + OpenSSL 런타임입니다. 셸이나 패키지 관리자가 없습니다.