88%. 2026년 4월 Cloud Security Alliance 조사에서 AI 에이전트 보안 사고를 경험한 기업의 비율입니다. 그리고 46%의 IT팀이 "내부 시스템 연동"을 에이전트 도입의 가장 큰 장벽으로 꼽았습니다. Anthropic이 MCP Tunnel로 정확히 그 장벽을 겨냥했습니다.
핵심 요약 → 2026년 5월 19일 Code with Claude London에서 리서치 프리뷰 공개 → MCP Tunnel = Claude 에이전트가 방화벽 안 내부망 MCP 서버에 연결하는 암호화 채널 → 인바운드 방화벽 규칙 없음, 퍼블릭 엔드포인트 불필요, IP 화이트리스트 불필요 → 작동 원리: 내부망에 경량 게이트웨이 배포 → 단일 아웃바운드 연결만 개방 → 연결 가능 대상: 내부 DB, 사설 API, Jira/GitLab 등 내부망 서비스 → Claude Console에서 관리, Managed Agents + Messages API 모두 지원 → Self-Hosted Sandbox와 함께 사용 시 실행 환경까지 완전 내부화 가능 → 현재 리서치 프리뷰 — 프로덕션 SLA 미적용, GA 일정 미발표
왜 지금 이게 필요한가
기존 Claude Managed Agents의 한계는 명확했습니다. 에이전트가 도구를 실행하는 환경이 Anthropic 서버에 있었습니다. 스타트업 프로토타입엔 괜찮지만, 규제 데이터를 다루는 기업에겐 구조적 차단벽이었습니다.
# 기존 구도 vs MCP Tunnel 이후
[기존]
Claude Agent (Anthropic 서버)
└→ MCP Tool 호출
└→ 퍼블릭 인터넷 경유
└→ 내부 DB 접근 ❌ (방화벽 차단)
└→ 내부 Jira ❌
└→ 사설 API ❌
→ 선택지:
1. 내부 시스템 퍼블릭 노출 (보안 위협)
2. VPN 구성 (복잡, 비용)
3. 에이전트 포기
[MCP Tunnel 이후]
Claude Agent (Anthropic 서버 — 오케스트레이션 담당)
└→ MCP Tunnel (암호화 채널)
└→ 내부망 게이트웨이 (아웃바운드 연결만)
└→ 내부 DB ✅
└→ 내부 Jira ✅
└→ 사설 API ✅
→ 인바운드 방화벽 규칙 = 0개
→ 퍼블릭 엔드포인트 = 0개
1. 아키텍처 원리 — 어떻게 방화벽을 열지 않고 연결하나
핵심은 연결 방향을 뒤집는 것입니다.
# MCP Tunnel 연결 흐름
기존 방식 (인바운드 필요):
외부 → [방화벽] → 내부 서버
→ 방화벽에 인바운드 포트 오픈 필수
→ IP 화이트리스트 관리 필요
→ 보안팀 승인 프로세스 수주
MCP Tunnel 방식 (아웃바운드만):
내부망 게이트웨이 → [방화벽] → Anthropic Tunnel Edge
→ 방화벽은 아웃바운드 HTTPS(443)만 허용 (이미 대부분 열려 있음)
→ Anthropic Tunnel Edge ↔ Claude Agent 구간 End-to-End 암호화
→ 내부 서버는 퍼블릭 IP 없음, 노출 없음
비유:
기존 = 집 대문 열어두기 (누가 들어올지 모름)
Tunnel = 집에서 먼저 전화 걸기 (내가 통화 주도)
# 아키텍처를 코드로 표현하면
# Step 1: 내부망에 게이트웨이 배포 (Docker)
# 이 컨테이너가 아웃바운드 연결을 Anthropic으로 개통
# docker-compose.yml (내부 서버에 배포)
"""
version: '3.8'
services:
mcp-tunnel-gateway:
image: anthropic/mcp-tunnel-gateway:latest
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- TUNNEL_ID=${TUNNEL_ID} # Claude Console에서 발급
- MCP_TARGET_HOST=internal-db # 연결할 내부 서비스
- MCP_TARGET_PORT=5432
# 인바운드 포트 노출 없음
# 아웃바운드 443만 필요
"""
# Step 2: Claude Console에서 Tunnel 생성
# → Tunnel ID 발급
# → 연결할 MCP 서버 엔드포인트 등록
# → 인증 정책 설정
# Step 3: Managed Agents API 호출 시 tunnel_id 참조
import anthropic
client = anthropic.Anthropic()
# beta 헤더 필수 (리서치 프리뷰)
response = client.beta.agents.run(
model="claude-opus-4-7",
tools=[{
"type": "mcp",
"server": {
"type": "tunnel",
"tunnel_id": "tun_xxxxxxxxxxxxxxxx" # Console에서 발급
# → 이 tunnel_id가 내부망 MCP 서버를 가리킴
# → Claude는 이 서버를 일반 MCP 서버처럼 사용
}
}],
messages=[{
"role": "user",
"content": "내부 DB에서 이번 달 이상 거래 패턴 조회해줘"
}],
extra_headers={"anthropic-beta": "managed-agents-2026-04-01"}
)
2. Self-Hosted Sandbox와 함께 쓰면 — 완전 내부화 아키텍처
MCP Tunnel 단독으로는 "MCP 서버 접근"만 내부화됩니다. Self-Hosted Sandbox와 결합하면 도구 실행 환경까지 고객 인프라 안으로 들어옵니다.
# 두 기능의 역할 분리
MCP Tunnel:
Claude가 내부망 MCP 서버에 접근하는 채널
(데이터 접근 레이어)
Self-Hosted Sandbox:
Claude가 도구를 실행하는 환경 자체를 고객 인프라로 이동
(실행 레이어)
Anthropic이 관리하는 것 (변경 없음):
- 에이전트 오케스트레이션
- 컨텍스트 관리
- 에러 복구 로직
# 결합 시 데이터 흐름
Claude (Anthropic 오케스트레이션)
│
├─ [Tunnel] → 내부 MCP 서버 (데이터 접근)
│ └ 내부 DB, 사설 API, Jira, GitLab
│
└─ [Self-Hosted Sandbox] → 고객 인프라 실행 환경
└ 파일 쓰기, 코드 실행, 네트워크 이그레스
└ 감사 로그, 보안 도구 적용됨
# Self-Hosted Sandbox + MCP Tunnel 결합 패턴
# 1. 먼저 Self-Hosted 환경 등록
import requests
env_response = requests.post(
"https://api.anthropic.com/v1/environments",
headers={
"x-api-key": ANTHROPIC_API_KEY,
"anthropic-beta": "managed-agents-2026-04-01",
"content-type": "application/json"
},
json={
"name": "internal-prod",
"config": {
"type": "self_hosted",
"provider": "cloudflare" # cloudflare | daytona | modal | vercel
}
}
)
env_id = env_response.json()["id"]
# 2. 에이전트 실행 시 sandbox + tunnel 동시 지정
client = anthropic.Anthropic()
response = client.beta.agents.run(
model="claude-opus-4-7",
environment_id=env_id, # Self-Hosted Sandbox
tools=[
{
"type": "mcp",
"server": {
"type": "tunnel",
"tunnel_id": "tun_internal_jira" # MCP Tunnel
}
},
{
"type": "mcp",
"server": {
"type": "tunnel",
"tunnel_id": "tun_internal_db" # 두 번째 Tunnel
# → 여러 내부 서비스를 각각 Tunnel로 연결 가능
}
}
],
messages=[{
"role": "user",
"content": "Jira 이슈 조회해서 DB에 결과 저장해줘"
}],
extra_headers={"anthropic-beta": "managed-agents-2026-04-01"}
)
# 결과:
# → 실행 환경: 고객 인프라 (Self-Hosted)
# → 데이터 접근: 내부망 MCP (Tunnel)
# → 오케스트레이션: Anthropic
# → 민감 데이터가 Anthropic 서버를 경유하지 않음
3. 실전 연결 가능 내부 서비스 목록
# MCP Tunnel로 연결 가능한 내부 서비스 예시
INTERNAL_SERVICES = {
# 데이터베이스
"PostgreSQL": {
"mcp_server": "postgres-mcp",
"tunnel_target": "internal-pg:5432",
"use_case": "금융 데이터 조회, 트랜잭션 분석"
},
"MySQL/MariaDB": {
"mcp_server": "mysql-mcp",
"tunnel_target": "internal-mysql:3306",
"use_case": "운영 DB 직접 쿼리"
},
# 이슈 트래커
"Jira (사내 설치형)": {
"mcp_server": "jira-mcp",
"tunnel_target": "jira.internal:8080",
"use_case": "이슈 생성, 조회, 업데이트 자동화"
},
"GitLab (On-Prem)": {
"mcp_server": "gitlab-mcp",
"tunnel_target": "gitlab.internal:443",
"use_case": "MR 생성, 코드 리뷰, CI 트리거"
},
# 지식 관리
"Confluence (사내)": {
"mcp_server": "confluence-mcp",
"tunnel_target": "confluence.internal:8090",
"use_case": "내부 문서 검색, 페이지 생성"
},
"사내 벡터 DB": {
"mcp_server": "custom-rag-mcp",
"tunnel_target": "qdrant.internal:6333",
"use_case": "사내 RAG, 지식 검색"
},
# 사설 API
"내부 마이크로서비스": {
"mcp_server": "custom-api-mcp",
"tunnel_target": "api.internal:8080",
"use_case": "결제 시스템, 재고 관리 등 사내 API"
}
}
# 핵심: 이 모든 서비스가
# 퍼블릭 인터넷에 노출되지 않은 채로
# Claude 에이전트의 도구가 됨
4. 보안 모델 상세 — Anthropic은 무엇을 볼 수 있나
# MCP Tunnel 보안 경계
Anthropic이 접근 가능한 것:
✅ 에이전트 오케스트레이션 명령
✅ 도구 호출 메타데이터 (어떤 툴을 언제 호출했는지)
⚠ MCP 도구 결과값 — 오케스트레이션에 필요한 만큼
Anthropic이 접근 불가능한 것:
❌ 실제 파일 내용 (Self-Hosted Sandbox 사용 시)
❌ 내부 DB 스키마·데이터 (Tunnel 경유 시 암호화)
❌ 고객 인프라 내부 네트워크
고객이 직접 제어하는 것:
✅ Tunnel 게이트웨이 (고객 인프라에 배포)
✅ MCP 서버 접근 권한 (게이트웨이 수준에서 필터링 가능)
✅ 감사 로그 (기존 SIEM 도구 그대로 사용)
✅ 네트워크 이그레스 정책
⚠ 현재 한계 (리서치 프리뷰):
- Self-Hosted 모드에서 Memory 미지원
- AWS Bedrock 위 Claude Platform 미지원
- 프로덕션 SLA 미적용
- 세부 암호화 사양 공개 문서 미완성
5. Messages API에서 직접 쓰는 방법
Managed Agents뿐 아니라 Messages API에서도 MCP Tunnel을 직접 참조할 수 있습니다.
# Messages API + MCP Tunnel (직접 도구 호출 방식)
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=4096,
tools=[
{
"type": "mcp",
"server": {
"type": "tunnel",
"tunnel_id": "tun_internal_db",
"name": "internal-postgres"
},
# Tunnel 경유로 노출된 도구들이 자동으로 사용 가능해짐
# 별도 tool 정의 없이 MCP 서버가 제공하는 도구 그대로 사용
}
],
messages=[
{
"role": "user",
"content": "지난 7일 이상 거래 패턴 분석해서 요약해줘"
}
],
extra_headers={"anthropic-beta": "managed-agents-2026-04-01"}
)
# Claude가 내부 DB MCP 서버를 통해
# 방화벽 안 데이터를 직접 쿼리하고
# 분석 결과를 반환
6. 기업 도입 체크리스트
# MCP Tunnel 도입 전 확인 사항
네트워크 요구사항:
□ 내부망 → 외부 HTTPS(443) 아웃바운드 허용 확인
(대부분의 기업 네트워크에서 이미 열려 있음)
□ Anthropic Tunnel Edge 도메인 화이트리스트 추가
(*.anthropic-tunnel.com — 정확한 도메인은 문서 확인)
□ 게이트웨이 컨테이너 배포 가능한 내부 서버 확보
보안 검토:
□ MCP 서버 접근 권한 최소화 원칙 적용
(게이트웨이에서 허용 툴 범위 제한)
□ Tunnel ID → API 키 관리 정책 수립
□ 감사 로그 SIEM 연동 계획 수립
□ 리서치 프리뷰 상태 → 프로덕션 크리티컬 워크로드 투입 보류
현재 미지원 (주의):
❌ Self-Hosted 모드에서 Memory 기능
❌ AWS Bedrock 위 Claude Platform
❌ 정식 SLA 보장
→ GA 전환 시까지 PoC/파일럿 수준으로만 운영 권장
결론
✅ MCP Tunnel이 해결하는 진짜 문제
- 기업 AI 에이전트 도입의 46% 장벽("내부 시스템 연동 불가") 직접 제거
- 인바운드 방화벽 규칙 없이 내부망 MCP 서버 연결 — 보안팀 설득 난이도 대폭 낮춤
- Self-Hosted Sandbox와 결합 시 실행 환경까지 완전 내부화 가능
✅ 특히 유용한 케이스
- 금융·의료·공공 규제 데이터를 다루는 에이전트
- 사내 설치형(On-Prem) Jira·GitLab·Confluence 연동
- 퍼블릭 클라우드 전환이 불가능한 레거시 내부 시스템 활용
❌ 지금 당장 프로덕션 투입을 보류해야 하는 이유
- 리서치 프리뷰 — SLA 없음, 세부 암호화 사양 미완성
- Memory 기능 미지원 (Self-Hosted 환경)
- AWS Bedrock 환경 미지원
- GA 타임라인 미발표 → 프리뷰 종료 시 마이그레이션 비용 발생 가능
관련 글
'MCP' 카테고리의 다른 글
| Playwright MCP 실전 4편: vs 클라우드 브라우저 MCP — 뭘 써야 하나? 2026년 선택 기준 완전 정리 (0) | 2026.05.27 |
|---|---|
| Playwright MCP 실전 3편: 프로덕션에서 쓰는 법 — 에러 처리, 병렬 실행, CI 파이프라인 완전 정복 (0) | 2026.05.27 |
| Claude가 로그인까지 처리한다 — Playwright MCP 실전 2편: 자동화 패턴 완전 정복 (0) | 2026.05.27 |
| AI가 브라우저를 직접 조종한다 — Playwright MCP 1편: 설치부터 첫 자동화까지 (0) | 2026.05.27 |
| Supabase + Claude Code MCP 완전 가이드 — AI 에이전트가 Postgres를 올바르게 다루게 만드는 법 (1) | 2026.05.06 |