MCP 서버 설정 및 fast_mcp Gem 활용
-
fast_mcpRuby Gem을 Rails 애플리케이션에 추가하여 MCP 서버 기능을 임베드했습니다. 이 Gem은 개발 모드에서 에디터의 개발 지원을 위해 사용되거나, 프로덕션 환경에서 제품 사용자가 LLM을 통해 제품과 상호작용할 수 있도록 설계되었습니다. -
리소스(Resources) 정의:
app/resources디렉토리에서ApplicationResource를 상속받아PersonResource와 같은 리소스를 정의했습니다. 리소스는 LLM에 제공될 정적 또는 캐시 가능한 데이터를 의미하며, 예를 들어 시스템 내 모든 사용자 목록을 JSON 형태로 제공할 수 있습니다. -
도구(Tools) 정의:
app/tools디렉토리에서ApplicationTool을 상속받아AgendaTool및WeekTool과 같은 도구를 정의했습니다. 도구는 LLM이 특정 작업을 수행할 수 있도록 하는 액션을 의미합니다. 예를 들어,AgendaTool은 특정 사용자의 주간 일정을 조회하고,WeekTool은 자연어 날짜 문자열(예: ‘next week’)을 ISO 8601 형식의 시작 날짜로 변환하는 기능을 제공합니다.
LLM 연동 및 상호작용 시연
-
Cursor AI 에이전트를 MCP 클라이언트로 사용하여 Rails 앱에 연결했습니다. Cursor는 MCP 서버에 연결된 도구와 리소스를 활용하여 사용자 질의에 응답할 수 있습니다.
-
사용자 질의 처리: “greet user 1”과 같은 질의를 통해
SampleTool이 사용자 ID를 기반으로 이름을 조회하고 인사하는 과정을 시연했습니다. 또한, “what is person one’s agenda for next week”와 같은 질의를 통해WeekTool과AgendaTool이 연동되어 동적으로 사용자 일정을 조회하는 시나리오를 구현했습니다.
직면한 기술적 난관
-
OpenAI 연동 문제: 지난 세션에서 OpenAI가 MCP 서버의 메타데이터를 올바르게 처리하지 못하는 버그로 인해 직접적인 연동에 실패했습니다. 이는
fast_mcpGem의 알려진 이슈로 확인되었습니다. -
Rails 서버 재시작 필요성:
ApplicationTool또는ApplicationResource파일을 변경할 경우, Rails initializer가 이를 다시 로드하도록 서버를 재시작해야 하는 번거로움이 있었습니다. -
날짜 파싱 및 도구 연동 문제: 초기에는 LLM이 ‘next week’와 같은 자연어 날짜 표현을
AgendaTool에 직접 전달하는 데 어려움을 겪었습니다. 이를 해결하기 위해ChronicGem을 활용하여 자연어 날짜를 파싱하고 특정 주차의 시작 날짜를 반환하는WeekTool을 별도로 구현했습니다. -
간헐적인 클라이언트-서버 통신 오류: Cursor AI 에이전트와 Rails 앱 간의 MCP 연결이 불안정하여, 첫 번째 도구 호출은 성공하지만 이후 호출에서 타임아웃, 알 수 없는 메시지 ID 응답, Zod 에러 등 다양한 통신 문제가 발생했습니다. 이는 웹소켓(SSE) 연결의 안정성 또는 Gem 내부 처리 방식과 관련된 문제로 추정됩니다.
MCP의 활용 가능성
-
MCP는 LLM이 애플리케이션의 데이터와 기능을 직접적으로 활용할 수 있는 강력한 인터페이스를 제공합니다. 예를 들어, LLM이 사용자의 캘린더와 프로젝트 관리 시스템(Hub)에 연결되어 “Chad의 다음 빈 시간에 프로젝트 업데이트 회의를 잡아줘”와 같은 복합적인 요청을 처리할 수 있습니다.
-
이는 프로그래머가 아닌 일반 사용자도 자연어 프롬프트를 통해 여러 서비스의 기능을 통합하여 작업을 수행할 수 있는 가능성을 열어줍니다.