발표팀은 Polrax 애플리케이션의 비효율적인 상태 관리 문제를 해결하기 위해 MCP 서버 PoC를 구축하는 것을 목표로 했습니다. MCP는 애플리케이션의 컨텍스트를 LLM에 표준화된 방식으로 전달하는 프로토콜로, 클라이언트-서버 아키텍처를 따르며 HTTP를 통해 통신합니다. 클라이언트는 AI 기반 애플리케이션(예: Cloud Code)이며, 서버는 프로토콜에 따라 응답하는 소프트웨어입니다. Ruby 생태계에는 Fast MCP, Ruby SDK, Action MCP 등의 서버가 존재합니다.
MCP 서버 구축 과정
- Fast MCP 활용: 초기에는 Fast MCP 젬을 추가하고 제너레이터를 통해 설정 및 샘플 도구를 생성한 후, 필요한 도구를 구축했습니다. Fast MCP는 Rails 미들웨어로 작동하며
/mcp
경로에 트래픽을 노출합니다.localhost_only
플래그 설정 및 하드코딩된 토큰 인증 방식은 실제 환경 적용 시 제한 사항으로 작용했습니다. - Ruby SDK로 마이그레이션: Fast MCP에서 Ruby SDK로의 마이그레이션은 Pavo의 아티클을 참고하여 진행되었습니다. MCP 젬을 추가하고 컨트롤러를 생성하여
MCP::Server.new
를 통해 도구를 정의했습니다. Cloud Desktop과의 연동 시 표준 200 응답 대신 202 응답을 요구하는 버그가 발견되어 우회책을 적용해야 했습니다. Ruby SDK는 Shopify에서 공식적으로 지원하는 구현체라는 장점이 있습니다.
테스트 및 배포
- 테스트 도구: MCP Inspector는 프로토콜의 모든 기능을 제공하며 인증 설정 및 디버깅에 매우 유용한 도구로 활용되었습니다. Cursor, Ruby LM MCP, Cloud Code와 같은 개발자 클라이언트를 통해 LLM이 도구를 올바르게 사용하는지 테스트하고 프롬프트 및 도구를 개선했습니다.
- 클라이언트 배포: 최종 사용자용 클라이언트로는 Chat GPT 또는 Cloud Desktop과 같은 ‘일반 사용자용’ 도구를 선택했습니다. 개발 환경을 인터넷에 노출하고(ngrok 활용), HTTPS를 적용하여 Cloud Desktop에 MCP 서버를 등록했습니다. 라이브 데모를 통해 참가자 정보 조회, DNF/DNS 상태 설정(이미지에서 번호 추출 포함) 등의 기능이 성공적으로 시연되었습니다.
MCP의 원시 기능 (Primitives)
- 도구 (Tools): 코드 내 함수 호출 기능을 제공합니다.
- 리소스 (Resources): 클라이언트 및 LLM에 데이터를 노출합니다.
- 프롬프트 (Prompts): 사용자가 재활용할 수 있는 저장된 프롬프트입니다.
클라이언트 기능
- 샘플링 (Sampling): 서버가 클라이언트에 LLM과의 통신을 요청하고 응답을 받습니다.
- 엘리시테이션 (Elicitation): 사용자에게 특정 작업 수행 권한을 요청합니다.
- 로깅 (Logging): 서버가 클라이언트에 로그를 전송하여 검사 또는 저장을 가능하게 합니다.