ChatGPT 인터페이스를 통해 Rails 애플리케이션의 기능을 활용하기 위해 MCP 서버 통합을 시도했습니다. 이 과정에서 여러 Ruby Gem들이 검토되었으며, 각 Gem의 특성과 용도가 논의되었습니다.
MCP Gem 비교
-
Rails MCP server: 개발 보조용 Gem으로, 프로젝트 파일 구조, 라우트, 모델 정보 등을 LLM에 노출하여 개발 지원에 활용됩니다. 본 스트림의 목표(제품 기능 통합)와는 목적이 달라 선택되지 않았습니다. -
fast_mcp: 제품 수준의 MCP 서버 통합을 위한 Gem으로, 별도의 Ruby 서버를 실행하며Tool(특정 동작 수행)과Resource(데이터 공유)를 정의합니다. 본 스트림에서 채택된 Gem입니다. -
active_mcp: Rails 지향적인 접근 방식을 취하며, 기존 컨트롤러와 모델에 직접 통합되도록 설계되었습니다. 아직 개발 초기 단계로, 향후 발전 가능성이 주목됩니다.
fast_mcp를 활용한 ‘hub’ 앱 스케줄 기능 구현 시도
-
목표: ‘hub’ 애플리케이션에서 사용자의 주간 스케줄을 조회하는 기능을 MCP 서버를 통해 제공합니다.
-
ScheduleResource정의: 스케줄 데이터를 가져오는Resource로 정의되었으며,week_start_date매개변수를 받도록 설계되었습니다. ‘hub’ 앱의Agenda클래스를 활용하여 특정 사용자 및 주간의 스케줄 정보를 가져옵니다. -
JSON 응답 및 직렬화: 반환되는 JSON 데이터에 프로젝트 이름과 같은 관련 정보를 포함할지, 아니면 별도의 프로젝트 엔드포인트를 통해 조회하도록 할지에 대한 고려사항이 논의되었습니다.
ActiveModelSerializers를 활용한 데이터 직렬화의 필요성도 언급되었습니다.
기술적 난관 및 디버깅
MCP 서버를 ChatGPT에 연결하는 과정에서 여러 설정 문제에 직면했습니다.
-
로컬 서버 노출:
ngrok을 사용하여 로컬 Rails 개발 서버를 외부 인터넷에 노출해야 했습니다. -
Rails 호스트 설정: Rails의 개발 환경에서 기본적으로 로컬 호스트 외의 접근을 차단하므로,
config.hosts에ngrok도메인을 추가해야 했습니다. -
fast_mcp설정:fast_mcp이니셜라이저에서local_host_only: false,allowed_origins,allowed_ips등을 설정하여 OpenAI의 접근을 허용해야 했습니다. 특히 OpenAI의 IP 주소 범위에 대한 정규 표현식 설정에서 어려움을 겪었습니다. -
엔드포인트 연결 실패:
Forbidden및404 Not Found오류가 지속적으로 발생했으며,/mcp,/mcp/sse,/mcp/messages등 다양한 서브패스를 시도했으나 최종적인 연결 성공에는 이르지 못했습니다.