MCP 서버 제출

MCP 서버 제출 (Server Submissions)

LiteLLM은 MCP 서버를 위한 제출·승인 워크플로를 지원해요. 팀 멤버가 MCP 서버를 관리자 검토용으로 제출하면, 관리자가 승인하거나 거부할 때까지 서버는 pending_review 상태로 유지돼요.

이를 통해 조직은 승인되지 않은 서버를 모든 사용자에게 즉시 노출하지 않으면서 팀 멤버에게 셀프서비스 MCP 등록을 제공할 수 있어요.

출처: 문서

본문

관련 문서:

동작 방식 (How It Works)

Team member submits MCP server via API
        ↓
Server saved as "pending_review" (NOT loaded into registry)
        ↓
Admin reviews in the Submitted MCPs tab
        ↓
Approve → server goes "active" and is loaded into the registry
Reject  → server stays out with optional review notes

사전 요구사항 (Prerequisites):

  • 프록시 config에 store_model_in_db: true가 설정되어 있어야 함(MCP 서버 유지에 필요)
  • 제출하는 사용자는 팀 스코프 API 키를 사용해야 함(관리자 키는 워크플로를 우회하고 POST /v1/mcp/server를 직접 사용)

config.yaml:

general_settings:
  store_model_in_db: true

사용자: MCP 서버 제출 (User: Submit an MCP Server)

팀 스코프 API 키를 사용하세요. 관리자 키는 이 엔드포인트에서 거부되며, 관리자는 POST /v1/mcp/server를 직접 사용해야 해요.

curl:

curl -X POST http://localhost:4000/v1/mcp/server/register \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{
    "server_name": "github_mcp",
    "url": "https://api.githubcopilot.com/mcp",
    "transport": "sse",
    "description": "GitHub MCP for code search and PR management"
  }'

Python:

import requests

response = requests.post(
    "http://localhost:4000/v1/mcp/server/register",
    headers={
        "Authorization": f"Bearer {team_api_key}",
        "Content-Type": "application/json",
    },
    json={
        "server_name": "github_mcp",
        "url": "https://api.githubcopilot.com/mcp",
        "transport": "sse",
        "description": "GitHub MCP for code search and PR management",
    },
)
print(response.json())

응답 (Response). 서버는 pending_review 상태로 생성돼요:

{
  "server_id": "832d6abc-7a5c-457a-a9f6-cfe4ae05f776",
  "server_name": "github_mcp",
  "url": "https://api.githubcopilot.com/mcp",
  "transport": "sse",
  "approval_status": "pending_review",
  "submitted_by": "7fd77c87-207b-4d6c-9d51-b72efb8962dc",
  "submitted_at": "2026-04-29T18:50:34Z"
}

note — 서버는 아직 MCP 클라이언트가 접근할 수 없어요. 관리자가 승인한 후에만 활성화돼요.


관리자: 제출 검토 (Admin: Review Submissions)

UI로 (Via UI)

MCP Servers → Submitted MCPs 탭으로 가세요. 다음을 볼 수 있어요:

  • 제출 수: 전체 제출, 대기 검토, 활성, 거부
  • 각 제출 카드에는 서버 이름, 설명, URL, 전송 방식, 제출 날짜
  • 각 카드의 ApproveReject 버튼

승인(Approving) 시 확인 대화상자가 뜨고, Approve를 클릭하면 활성 상태가 되어 MCP 레지스트리에 즉시 로드돼요.

승인 후 카드 배지가 Active로 바뀌고 카운터가 업데이트돼요.

거부(Rejecting) 시 선택적 검토 노트(review notes) 필드가 있는 대화상자가 열리며, 제출을 거절한 이유를 설명할 수 있어요.

API로 (Via API)

proxy_admin_viewer 역할이 필요해요.

모든 MCP 제출 목록:

curl http://localhost:4000/v1/mcp/server/submissions \
  -H "Authorization: Bearer ***"

응답:

{
  "total": 1,
  "pending_review": 1,
  "active": 0,
  "rejected": 0,
  "items": [
    {
      "server_id": "832d6abc-7a5c-457a-a9f6-cfe4ae05f776",
      "server_name": "github_mcp",
      "approval_status": "pending_review",
      "submitted_by": "7fd77c87-207b-4d6c-9d51-b72efb8962dc",
      "submitted_at": "2026-04-29T18:50:34Z"
    }
  ]
}

제출된 MCP 서버 승인:

curl -X PUT http://localhost:4000/v1/mcp/server/{server_id}/approve \
  -H "Authorization: Bearer ***"

서버 상태가 active로 바뀌고 MCP 런타임 레지스트리에 즉시 로드돼요.

제출된 MCP 서버 거부:

curl -X PUT http://localhost:4000/v1/mcp/server/{server_id}/reject \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ***" \
  -d '{"review_notes": "This URL is not on the approved vendor list."}'

review_notes는 선택이에요. 서버는 레지스트리에서 제외된 채로 남아요.


승인 상태 값 (Approval Status Values)

상태 의미
pending_review 제출됨, 관리자 검토 대기. MCP 클라이언트가 접근 불가.
active 승인됨. MCP 레지스트리에 로드되어 클라이언트가 사용 가능.
rejected 관리자가 거부함. 접근 불가. review_notes를 포함할 수 있음.

FAQ

관리자가 거부된 서버를 다시 승인할 수 있나요?

네. PUT /v1/mcp/server/{id}/approve를 호출하면 됩니다. 엔드포인트는 pending_reviewrejected 상태 모두의 서버를 받아요.

이전에 활성 상태였던 서버를 거부하면 어떻게 되나요?

런타임 레지스트리에서 즉시 제거되므로 클라이언트가 더 이상 그 도구를 볼 수 없어요.

제출을 활성화하려면 특별한 config 플래그가 필요한가요?

아니오. store_model_in_db: true만 설정되어 있으면 제출 엔드포인트는 기본적으로 사용 가능해요. 추가 기능 플래그는 필요 없어요.

더 알아보기 (Learn more)