MCP 배포 가이드
MCP 배포 가이드 (Deployment Guide)
LiteLLM을 LLM, MCP 서버, 에이전트를 위한 중앙 게이트웨이로 배포하는 방법을 알려드릴게요.
출처: 문서
본문
핵심 아이디어 (The core idea)
LiteLLM은 세 가지 리소스 유형을 위한 단일 제어 평면(control plane)이에요:
| 리소스 | 등록 위치 |
|---|---|
| LLM | config 또는 API의 model_list |
| MCP Server | config 또는 UI의 mcp_servers |
| Agent | A2A 라우트 |
세 가지 모두 동일한 인증(LiteLLM API 키), 속도 제한, 사용 대시보드를 공유하므로, 별도 레지스트리 없이 중앙 카탈로그를 가질 수 있어요.
배포 토폴로지 (Deployment topologies)
옵션 A: 단일 게이트웨이 (권장) (Option A: Single gateway (recommended))
하나의 LiteLLM 인스턴스가 LLM 라우팅, MCP 도구 호출, A2A 에이전트 호출을 모두 처리해요.
Agents / AI clients
│
▼
┌───────────────────────────────────┐
│ LiteLLM Gateway │
│ /v1/chat/completions (LLMs) │
│ /mcp (tools) │
│ /a2a (agents) │
└───────┬───────┬──────────┬────────┘
│ │ │
OpenAI MCP servers Downstream
Bedrock (internal) agents
Azure (public)
하나의 서비스, 하나의 config, 한 벌의 API 키예요. 공용 인터넷 필터로 어떤 MCP 서버가 외부 호출자(Claude Desktop, ChatGPT)에게 보이고 어떤 것이 내부 전용인지 제어할 수 있어요.
config.yaml:
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
store_model_in_db: true
mcp_internal_ip_ranges:
- "10.0.0.0/8"
- "172.16.0.0/12"
- "192.168.0.0/16"
- "100.64.0.0/10" # VPN/Tailscale range
model_list:
- model_name: gpt-5.6-terra
litellm_params:
model: openai/gpt-5.6-terra
api_key: os.environ/OPENAI_API_KEY
mcp_servers:
- server_name: internal-db
url: http://db-mcp.internal:8000/mcp
transport: http
available_on_public_internet: false # internal callers only
- server_name: web-search
url: https://mcp.exa.ai/mcp
transport: http
available_on_public_internet: true # visible to ChatGPT / Claude Desktop
옵션 B: 별도 LLM 게이트웨이와 MCP 게이트웨이 (Option B: Separate LLM gateway and MCP gateway)
LLM 라우팅용(인터넷 노출 없음)과 MCP 서빙용(선택적으로 인터넷 연결) 두 개의 LiteLLM 배포로 나눠요.
Internal AI clients External AI clients
│ (ChatGPT, Claude Desktop)
│ │
▼ ▼
┌────────────────────┐ ┌────────────────────────┐
│ LLM Gateway │ │ MCP Gateway │
│ (no public port) │ │ (port 443 / public) │
│ /v1/chat/... │ │ /mcp │
└────────┬───────────┘ └──────────┬─────────────┘
│ │
LLM providers MCP servers
(OpenAI, Bedrock, …) (internal + public)
LLM API 키는 방화벽 뒤에 남아요. MCP 게이트웨이의 침해는 그 키들을 노출하지 않아요. 외부 MCP 접근이 필요하지만 LLM 자격 증명이 완전히 비공개로 유지되어야 할 때 이 방식을 사용하세요.
중앙 카탈로그 (Central catalog)
LiteLLM은 모든 리소스 유형을 표준 엔드포인트로 노출해요:
| 엔드포인트 | 반환 |
|---|---|
GET /v1/models |
등록된 모든 LLM |
GET /v1/mcp/server |
모든 MCP 서버 |
GET /mcp |
모든 MCP 도구(모든 서버) |
GET /.well-known/agent.json |
A2A 에이전트 카드 |
MCP 레지스트리(옵트인): Claude Desktop / Cursor용 디스커버리 엔드포인트 노출:
config.yaml:
general_settings:
enable_mcp_registry: true
Claude Desktop config:
{
"mcpServers": {
"litellm": {
"url": "https://your-litellm.example.com/mcp",
"headers": { "Authorization": "Bearer sk-..." }
}
}
}
보안 고려 사항 (Security considerations)
열린 포트 문제 (The open-port problem)
LiteLLM의 포트를 인터넷에 노출하면(Claude Desktop / ChatGPT용) /v1/chat/completions도 외부에서 접근 가능해져요. LLM 자격 증명은 키 인증으로 보호되지만, 이 부분에 대해 의도적으로 결정하세요.
완화책 (Mitigations):
- 별도 배포(옵션 B): LLM 게이트웨이에 공용 포트를 주지 않기
- 방화벽 — 네트워크 계층에서 공용 IP의
/v1/chat/completions차단 - 단기 스코프 키 — 키 유출 시 폭발 반경 제한
MCP 서버가 공용 인터넷에 도달할 수 있음 (MCP servers can reach the public internet)
외부 MCP URL(예: https://mcp.exa.ai/mcp)을 등록하면 LiteLLM이 매 도구 호출마다 그 서버로 아웃바운드 요청을 보내요. 네트워크 정책이 이를 허용하는지, 보안 팀이 데이터가 경계를 벗어나는 것에 동의하는지 확인하세요.
에어갭 네트워크의 경우: 경계 내부의 MCP 서버만 등록하고 available_on_public_internet: false(기본값)로 두세요.
접근 제어 (Access controls)
기본적으로 모든 인증된 호출자가 모든 MCP 도구를 호출할 수 있어요. 이를 제한하려면 다음을 사용하세요:
| 제어 | 위치 |
|---|---|
| 키별 도구 접근 | 키 레벨 MCP 권한 |
| 팀별 도구 접근 | 팀 레벨 MCP 권한 |
| 외부 호출자에게 내부 서버 숨기기 | available_on_public_internet |
| 요청이 LiteLLM을 거쳤는지 검증 | MCP Zero Trust (JWT) |
| 응답의 민감 데이터 차단 | MCP Guardrails |