Claude Platform Docs
MessagesMCP 터널

MCP 터널 레퍼런스

프록시 구성 필드, Tunnels REST API, 인증서 요구 사항 및 setup 컴포넌트에 대한 설명입니다.

프록시 구성

프록시/etc/mcp-gateway/config.yaml(Compose) 또는 렌더링된 ConfigMap(Helm, gateway.config.*에서 채워짐)에서 구성을 읽습니다.

필드설명기본값
listen_addr수신할 주소 및 포트입니다.필수
log_level로깅 상세 수준: debug, info, warn 또는 error.info
shutdown_timeout정상 종료(graceful shutdown) 중 진행 중인 요청을 기다리는 시간입니다.30s
tunnel_domain터널에 할당된 기본 도메인입니다. 설정된 경우, 라우트 조회 시 수신 호스트 이름에서 이 접미사를 제거하므로 routes 키를 단순 서브도메인(wiki)으로 지정할 수 있습니다. 비어 있는 경우, routes 키는 정확한 전체 호스트 이름이어야 합니다.routes 키가 단순 서브도메인인 경우 필수
tls.cert_file서버 TLS 인증서 경로입니다.필수
tls.key_file서버 TLS 개인 키 경로입니다.필수
routes서브도메인 또는 전체 호스트 이름을 업스트림 URL에 매핑하는 맵입니다. 라우트 매칭을 참조하세요.필수
upstream.allowed_ips프록시가 연결할 수 있도록 허용된 IPv4 CIDR 범위 또는 단일 주소입니다. disable_ip_validation과 함께 사용할 수 없습니다.RFC1918 사설 범위
upstream.disable_ip_validation업스트림 IP 검증을 완전히 비활성화합니다. allowed_ips와 함께 사용할 수 없습니다.false
upstream.tls.ca_file업스트림 TLS 검증을 위한 CA 번들입니다.없음
upstream.tls.include_system_cas업스트림 TLS에 대해 시스템 CA 번들도 신뢰합니다.false

https:// 업스트림 라우트의 경우, upstream.tls.ca_file 또는 upstream.tls.include_system_cas 중 하나 이상을 설정하세요. 그렇지 않으면 프록시에 업스트림 인증서에 대한 신뢰 앵커가 없게 됩니다.

라우트 매칭

routes는 리스트가 아닌 평면 문자열 맵(map[string]string)입니다. 프록시는 먼저 수신 호스트 이름을 정확히 일치하는 항목으로 조회한 다음, tunnel_domain 접미사를 제거하고 남은 서브도메인으로 매칭합니다. 매칭은 호스트 이름만 고려하며, 요청 경로와 쿼리 문자열은 변경 없이 업스트림 MCP 서버로 전달됩니다.

각 업스트림 값은 정확히 scheme://host:port 형식이어야 합니다. 포트는 필수입니다. 경로를 포함하면 구성 로드 시 invalid upstream (must be scheme://host:port) 오류와 함께 거부됩니다.

Tunnels API

Tunnels REST API는 /v1/tunnels에 위치하며 터널 생성, 목록 조회 및 보관, CA 인증서 등록, 터널 토큰 조회 또는 교체를 지원합니다. 모든 엔드포인트, 요청 및 응답 스키마, 예제는 Tunnels API 레퍼런스를 참조하세요.

모든 요청에 필요한 헤더:

헤더
AuthorizationBearer <token> (WIF로 교환된 토큰)
anthropic-version2023-06-01
anthropic-betamcp-tunnels-2026-06-22

인증서 요구 사항

setup 컴포넌트는 요구 사항을 준수하는 인증서를 자동으로 생성합니다. 이 요구 사항은 자체 PKI를 통해 인증서를 발급하는 경우에만 적용됩니다.

CA 인증서

POST /v1/tunnels/{tunnel_id}/certificates로 업로드합니다. 터널은 동시에 최대 두 개의 활성 CA 인증서를 보유할 수 있으며, 이를 통해 무중단 교체가 가능합니다.

  • PEM 인코딩, 단일 인증서, 최대 8 kB.
  • BasicConstraints 확장이 CA:TRUE로 존재하며 critical로 표시되어야 합니다.
  • SubjectKeyIdentifier 확장이 존재해야 합니다.
  • KeyUsagekeyCertSign이 포함되어야 합니다.
  • 유효 기간 내에 있어야 합니다.
  • RSA 2048비트 이상 또는 ECDSA P-256 이상이며, SHA-256 이상의 서명을 사용해야 합니다.

서버 인증서

내부 TLS 중에 프록시가 제시합니다.

  • 등록된 CA가 직접 서명해야 합니다(중간 인증서 없음).
  • AuthorityKeyIdentifier 확장이 존재하며 CA의 SubjectKeyIdentifier와 일치해야 합니다.
  • Subject Alternative Name에 <route>.<tunnel-domain>과 일치하는 DNS 이름이 포함되어야 합니다. 와일드카드 *.<tunnel-domain>은 모든 라우트를 포함합니다.
  • ExtendedKeyUsage 확장이 존재하는 경우 serverAuth를 포함해야 합니다.
  • 유효 기간 내에 있어야 합니다.
  • RSA 2048비트 이상 또는 ECDSA P-256 이상이며, SHA-256 이상의 서명을 사용해야 합니다.

setup 컴포넌트는 5년 유효 기간의 ECDSA P-256 CA와 와일드카드 SAN 및 90일 유효 기간의 RSA 4096비트 서버 인증서를 생성합니다.

setup 컴포넌트

setup 컴포넌트는 mcp-proxy 이미지 내에 setup 바이너리로 포함되어 제공됩니다. docker compose run --rm setup <subcommand>(Compose)로 실행하거나 차트의 훅 및 CronJob(Helm)을 사용하세요.

setup init

기존 터널에 연결하거나(터널 ID가 제공되지 않은 경우 새로 생성), CA 및 서버 인증서를 생성하고, CA를 등록하고, 터널 토큰을 가져온 다음, 모든 출력을 대상 위치에 기록합니다.

플래그설명기본값
--api-urlClaude API 기본 URL입니다. API_URL에서도 읽습니다.필수
--tunnel-id연결할 터널 ID(tnl_...)입니다. TUNNEL_ID에서도 읽습니다. 생략하면 새 터널이 생성되며, 출력에 이미 저장된 터널 ID는 재실행 시 재사용됩니다.없음(터널 생성)
--output출력 대상: dir:/path 또는 k8s-secret:NAME. Helm 차트는 k8s-secret:<release>를 전달합니다.k8s-secret:mcp-tunnel (Kubernetes 파드에서 실행 시 자동 감지, 그 외에는 필수)
--cert-duration서버 인증서 유효 기간입니다.2160h (90일)
--token-version변경 감지 문자열입니다. 새 값을 지정하면 재실행 시 토큰 교체가 트리거됩니다. Helm 차트와 Compose 예제 모두 초기값으로 1을 전달합니다.없음

이 명령은 Workload Identity Federation을 통해 인증합니다. ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, ANTHROPIC_WORKSPACE_ID(선택 사항), 그리고 ANTHROPIC_IDENTITY_TOKEN_FILE 또는 ANTHROPIC_IDENTITY_TOKEN 중 정확히 하나를 읽습니다. 이러한 변수의 현재 의미는 WIF 레퍼런스를 참조하세요. setup 컴포넌트는 페더레이션 규칙에서 서비스 계정을 도출하므로 ANTHROPIC_SERVICE_ACCOUNT_ID를 별도로 요구하지 않습니다.

setup renew-cert

저장된 CA로 서명된 새 서버 인증서를 발급합니다. API 호출을 하지 않습니다.

플래그설명기본값
--output출력 대상: dir:/path 또는 k8s-secret:NAME. Helm 차트는 k8s-secret:<release>를 전달합니다.k8s-secret:mcp-tunnel (Kubernetes 파드에서 실행 시 자동 감지, 그 외에는 필수)
--cert-duration새 인증서 유효 기간입니다.2160h (90일)
--renew-before기존 인증서의 남은 유효 기간이 이 값보다 길면 갱신을 건너뜁니다.0 (항상 갱신)

--renew-before=720h로 설정하면 유효 기간이 30일 넘게 남아 있을 때 명령이 아무 작업도 수행하지 않으므로, 고정된 일정으로 실행해도 안전합니다.

Was this page helpful?