Model Context Protocol (MCP) 개요
MCP는 LLM에 실시간의 최신 컨텍스트를 제공하기 위한 개방형 표준입니다. Anthropic이 작년 11월에 도입했으며, Google과 OpenAI와 같은 주요 기업들의 지지를 받고 있습니다. MCP의 핵심은 LLM이 자체적으로 라이브 시스템에 연결할 수 없는 한계를 극복하는 것입니다.
MCP 아키텍처
-
MCP 호스트 (MCP Host): 사용자 대면 애플리케이션(예: ChatGPT, Claude, Gemini). LLM과 상호작용하며 MCP 서버로부터 컨텍스트를 가져옵니다.
-
LLM (Large Language Model): 호스트로부터 받은 프롬프트와 컨텍스트를 기반으로 응답하거나 도구 호출을 지시합니다.
-
MCP 서버 (MCP Server): HTTP 연결을 통해 호스트에 컨텍스트를 제공합니다. 서버는 애플리케이션의 기능과 데이터를 노출합니다.
MCP의 기본 요소 (Primitives)
-
도구 (Tools): 서버의 기능 또는 수행할 수 있는 작업(예: 특정 위치의 날씨 예보, 게시물 발행).
-
리소스 (Resources): 데이터 파일, 레코드, 로그, 이미지 등 LLM이 필요로 하는 모든 형태의 데이터.
-
프롬프트 (Prompts): 사용자에게 제공되는 표준화된 지침 또는 레시피.
MCP를 활용한 상호작용 예시 (여행사 웹 앱)
-
호스트 초기화: 호스트 애플리케이션이 MCP 클라이언트 라이브러리를 사용하여 구성된 MCP 서버(여행사, 날씨 예보 등)에서 도구와 리소스를 가져옵니다.
-
사용자 프롬프트: 사용자가 “유럽 낭만 주말 여행을 예약해 줘. 날씨가 좋아야 해.”와 같은 프롬프트를 입력합니다.
-
LLM 처리: LLM은 컨텍스트(도구, 리소스 포함)와 함께 프롬프트를 받아 여행 목록을 요청하는 도구 호출을 반환합니다.
-
도구 실행: 호스트는 MCP 서버에 해당 도구를 실행하도록 요청하고, 서버는 가능한 여행 목록을 반환합니다. 이 응답은 대화의 새로운 컨텍스트가 됩니다.
-
반복 및 정교화: 새로 획득한 여행 목록은 이전 프롬프트에 추가되어 다시 LLM으로 전송됩니다. LLM은 특정 도시의 날씨 예보를 요청하는 여러 도구 호출을 반환합니다.
-
최종 작업: 호스트는 날씨 예보 서버에 도구 호출을 하고 결과를 LLM에 다시 전송합니다. 최종적으로 LLM은 특정 여행(예: Viana de Castello)을 예약하는 도구 호출을 지시합니다. 이 과정을 통해 LLM은 실제 애플리케이션과 상호작용하여 복잡한 다단계 절차를 계획하고 실행합니다.
Rails 애플리케이션을 MCP 서버로 만들기
Rails 애플리케이션을 AI 레디 MCP 서버로 만드는 과정은 다음과 같습니다.
-
새 Rails 앱 초기화:
rails new명령어로 새 애플리케이션을 생성합니다. -
MCP 템플릿 적용: 발표자가 제공하는 템플릿을 적용하여 공식 MCP SDK Gem, MCP 서버 엔드포인트(컨트롤러 및 라우트), 스캐폴드 컨트롤러 제너레이터에 MCP 훅을 추가합니다.
- 모델 스캐폴딩:
rails generate scaffold Post와 같이 Active Record 모델을 스캐폴딩하면, 각 CRUD(생성, 읽기, 업데이트, 삭제) 액션에 해당하는 MCP 도구가 자동으로 생성됩니다.rake mcb_tools명령어를 통해 정의된 MCP 도구 목록, 설명 및 입력 스키마를 확인할 수 있습니다.- MCP Inspector와 같은 도구를 사용하여 생성된 도구들을 디버깅하고 상호작용할 수 있습니다.
- 커스텀 도구 생성:
mcp_tool generator를 사용하여 Active Record 모델에 의존하지 않는 커스텀 도구(예: 날씨 확인 도구)를 생성하고 비즈니스 로직을 구현할 수 있습니다. 이 도구는 외부 API와 연동하여 날씨 정보를 가져오는 등 복잡한 기능을 수행할 수 있습니다.
Rails 기반 MCP 호스트 애플리케이션
Rails는 MCP 호스트 애플리케이션을 구축하는 데에도 사용될 수 있습니다. 사용자 프롬프트를 처리하기 위한 엔드포인트와 일련의 절차가 필요합니다.
-
MCP 클라이언트 인스턴스화:
mcp-clientGem을 사용하여 MCP 서버 URL을 제공하여 클라이언트를 설정합니다. -
프롬프트 및 도구 로드: 시스템 프롬프트와 사용자 프롬프트를 설정하고, MCP 클라이언트를 통해 서버에서 도구를 로드합니다. 이를 LLM(예: GPT)에 전송합니다.
-
도구 호출 처리: LLM이 도구 호출을 반환하면, 호스트는 MCP 클라이언트를 통해 해당 도구들을 실행하고 그 결과를 메시지 메모리에 저장합니다.
-
컨텍스트 유지: 대화의 컨텍스트를 유지하기 위해 모든 메시지와 도구 호출 결과를 저장하고, LLM에 다시 전송하여 대화를 이어갑니다.
실제 데모 및 시사점
발표자는 Kamal을 사용하여 프로덕션 환경에 배포된 블로그 애플리케이션을 시연했습니다. Cloud Desktop과 자체 개발한 Rails MCP 호스트 애플리케이션을 통해 LLM이 블로그 게시물 생성, 댓글 작성, 날씨 확인 등 다양한 작업을 수행하는 과정을 보여주었습니다. 특히 Hotwire를 사용하여 실시간으로 웹 페이지가 업데이트되는 모습은 LLM과 웹 애플리케이션의 원활한 상호작용을 인상적으로 보여주었습니다.
CRUD 도구는 학습을 위한 좋은 출발점이지만, LLM은 한 번에 많은 도구를 사용하는 데 능숙하지 않으므로, 더 큰 기능을 하나의 도구로 집약하는 것이 좋습니다.