3 min read

MCP Server는 모델을 관리 및 서빙을 해주는 서버이다.

MCP Server는 모델을 관리 및 서빙을 해주는 서버이다.
Photo by Alejo Reinoso / Unsplash

MCP(Model Context Protocol) Server

  • MCP Server는 이 Model Context Protocol을 기반으로 한 모델을 실제로 관리하고, 서빙하거나 호출 요청을 받아 처리하는 중앙 서버

MCP Server가 제공하는 기능

기능 설명
모델 로딩 및 등록 다양한 MCP 스펙으로 정의된 모델을 받아들이고 등록함
컨텍스트 관리 모델마다 필요한 입력/출력 타입, 버전 등을 정리해서 기억함
모델 실행 클라이언트가 요청하면, 해당 모델을 실행해 예측 결과 반환
버전 관리 여러 모델의 버전, 환경 등을 구분하고 서빙 가능
표준화된 API 제공 외부 시스템이 쉽게 호출할 수 있도록 통일된 방식으로 API를 노출

주로 쓰이는 상황

  • 여러 AI 팀이 만든 모델을 하나의 플랫폼에서 통합 관리하고 싶을 때
  • 모델 배포 시 다양한 프레임워크를 한 서버에서 처리하고 싶을 때
  • 실험적 모델 서빙, 다중 버전 운영이 필요한 MLOps 환경

Concept

# model_context.py
class ModelContext:
    def __init__(self, name, input_schema, output_schema):
        self.name = name
        self.input_schema = input_schema
        self.output_schema = output_schema

# base_model.py
class BaseModel:
    def __init__(self, context: ModelContext):
        self.context = context

    def predict(self, input_data):
        raise NotImplementedError("Subclasses must implement this method.")

# dummy_model.py
from base_model import BaseModel

class DummyModel(BaseModel):
    def predict(self, input_data):
        # 간단한 더하기 연산 모델
        return {"result": input_data["a"] + input_data["b"]}

# mcp_server.py
class MCPServer:
    def __init__(self):
        self.models = {}

    def register_model(self, model_name, model_instance):
        self.models[model_name] = model_instance
        print(f"Model '{model_name}' registered with context: {model_instance.context.__dict__}")

    def run_model(self, model_name, input_data):
        model = self.models.get(model_name)
        if not model:
            raise ValueError(f"Model '{model_name}' not found.")
        
        # 컨텍스트 기반 유효성 검사 생략 가능 (입출력 스펙 기반 확장 가능)
        return model.predict(input_data)

# main.py
from model_context import ModelContext
from dummy_model import DummyModel
from mcp_server import MCPServer

# MCP 서버 생성
server = MCPServer()

# 모델 정의 및 등록
context = ModelContext(
    name="AdderModel",
    input_schema={"a": "int", "b": "int"},
    output_schema={"result": "int"}
)

model = DummyModel(context)
server.register_model("adder", model)

# 모델 실행
input_data = {"a": 10, "b": 20}
result = server.run_model("adder", input_data)
print(result)  # 출력: {'result': 30}

구체적 예시

  • ​The GitHub MCP server를 설치하면 Model을 통해서 Github을 직접 제어할 수 있다.
  • MCP 서버는 AI 모델이 GitHub을 “사용자처럼 조작”할 수 있도록 다리를 놓아주는 스마트 게이트웨이

시나리오

  • 구성요소
    • AI 모델 (예: GPT, Claude 등): 자연어 이해 및 문맥 처리 담당
    • MCP 서버 (smithery.ai/github): GitHub 작업을 정의된 방식으로 처리
    • GitHub API: 실제 리포지토리, 파일, 이슈, PR 등을 관리하는 백엔드
  • 흐름
    • [모델] → (명령 생성) → [MCP 서버] → (GitHub API 호출) → [GitHub 리포지토리]
    • 예: "새 브랜치 만들어줘" → MCP 서버가 branch API 실행 → GitHub에 새 브랜치 생성
  • 모델에게 이렇게 말하면:
"새로운 기능 브랜치 feature/new-dashboard를 생성하고, README.md에 변경사항을 커밋해줘."
  • 모델은 다음과 같이 행동:
    • MCP 서버에 다음 작업을 지시:
      1. createBranch(repo="my-repo", from="main", newBranch="feature/new-dashboard")
      2. commitFile(repo="my-repo", branch="feature/new-dashboard", file="README.md", content="Updated for dashboard", message="Add dashboard update")

장점

장점 설명
✅ 모델이 직접 GitHub API를 알 필요 없음 추상화된 명령으로 충분
✅ 보안 분리 API 토큰은 MCP 서버에만 있음, 모델은 노출 안 됨
✅ 복잡한 작업도 자동화 PR 생성, 리뷰, 파일 구조 생성 등까지도 가능
✅ 다양한 모델과 연동 가능 Claude, GPT, 등 거의 모든 언어모델과 호환