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)

하나의 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):

  1. 별도 배포(옵션 B): LLM 게이트웨이에 공용 포트를 주지 않기
  2. 방화벽 — 네트워크 계층에서 공용 IP의 /v1/chat/completions 차단
  3. 단기 스코프 키 — 키 유출 시 폭발 반경 제한

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

더 알아보기 (Learn more)