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, 등 거의 모든 언어모델과 호환

Read more

내가 놓치고 있던 미래, 먼저 온 미래를 읽고

내가 놓치고 있던 미래, 먼저 온 미래를 읽고

장강명 작가의 책은, 유학시절 읽고 처음이었다. 유학시절 "한국이 싫어서"라는 책은 동기부여가 상당히 되는 책이었다. 한국을 떠나 새로운 정채성을 학생으로서 Build up 해나가고 있던 상황에서 이 책은 제목부터 꽤 솔깃하였다. 물론 결말이 기억날 정도로 인상깊은 책은 아니었지만 말이다. 그렇게 시간이 흘러 장강명 작가의 책은 더 이상 읽지 않던

By Bongho, Lee
고객 경험이란 무엇일까?

고객 경험이란 무엇일까?

고객경험이란 무엇일까? 1. 과거 어느 대형 프로젝트에서 있던 일이다. 신사업을 위해서 예측 모델 값을 제공해야 하는 상황이었다. 데이터도 없고,어느정도의 정확도를 제공해야 하는지 답이 없었다. 점추정을 할 것인가? 구간 추정을 할 것인가를 가지고 논의중이었다. Product Manager 줄기차게 고객경험을 내세우며 점추정으로 해야 한다고 주장하였다. 근거는 오롯이 "고객 경험"이었다.

By Bongho, Lee
수요예측, 수정구슬이 아닌 목표를 향한 냉정한 나침반

수요예측, 수정구슬이 아닌 목표를 향한 냉정한 나침반

수요예측의 정의와 비즈니스에서의 중요성 기업의 성장과 운영 효율화를 위해 **수요예측(Demand Forecasting)**은 선택이 아닌 필수 요소로 자리 잡았다. 많은 경영진들이 수요예측을 미래 판매량을 정확히 맞히는 '예언'으로 기대하지만, 이는 수요예측의 본질을 오해하는 것이다. 수요예측의 진짜 의미: 미래를 점치는 수정구슬이 아니라, 우리가 도달해야 할 '목표'를

By Bongho, Lee