.NET과 Azure Container Apps를 이용한 원격 MCP 서버 구축

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

.NET 및 Azure를 사용한 서버 개발자, MCP 프로토콜 구현에 관심 있는 개발자

난이도: 중급 이상 (C# 및 ASP.NET Core 경험 필요)

핵심 요약

  • MCP 서버는 Streamable HTTP 전송 방식을 통해 Azure Container Apps에 배포할 수 있으며, 이는 stdio 대신 HTTP POST/GET을 사용합니다.
  • C# SDK의 ModelContextProtocol.AspNetCore 패키지를 사용해 MCP 서버를 구축하며, WithHttpTransport() 메서드로 HTTP 전송을 활성화합니다.
  • MapMcp() 메서드는 Streamable HTTPSSE 엔드포인트를 생성하여 원격 MCP 서버의 HTTP 통신을 처리합니다.

섹션별 세부 요약

1. Model Context Protocol (MCP) 개요

  • MCP는 LLM과 외부 데이터/도구를 연결하는 표준화된 프로토콜로, stdioStreamable HTTP 두 가지 전송 방식을 제공합니다.
  • Streamable HTTP는 서버가 독립적인 프로세스로 작동하며, HTTP POST/GET과 SSE를 사용해 다중 클라이언트 연결을 처리합니다.
  • MCP는 GPT, Deepseek 등 다양한 LLM 사이의 유연한 전환을 지원합니다.

2. C# SDK와 Azure Container Apps 적용

  • ModelContextProtocol.AspNetCore 패키지를 사용해 MCP 서버를 구축하며, dotnet add package 명령어로 설치합니다.
  • WithHttpTransport() 메서드는 HTTP 전송을 활성화하고, WithToolsFromAssembly()는 어셈블리 내 도구를 MCP 서버에 등록합니다.
  • app.MapMcp()Streamable HTTPSSE 엔드포인트를 생성하며, Azure Container Apps에 배포를 위해 HTTP 엔드포인트를 제공해야 합니다.

3. `MapMcp()` 메서드의 역할

  • StreamableHttpHandler를 통해 POST, GET, DELETE 요청을 처리하며, SSE 엔드포인트도 /sse/message 경로에 매핑합니다.
  • Stateless 모드에서는 GET/DELETE 엔드포인트가 비활성화되며, SSEStreamable HTTP는 별도의 경로로 분리됩니다.
  • OpenTelemetry를 사용해 추적 및 메트릭을 수집하며, HttpClient를 통해 서버의 User-Agent를 설정합니다.

4. 보안 및 확장성 고려사항

  • 현재 문서에서는 보안 구현에 대한 세부 사항은 생략되었으며, 향후 보안 강화(예: 인증/인가)가 필요합니다.
  • Azure Container Apps에 배포 시, 서버의 확장성과 안정성을 위해 Stateless 모드를 고려해야 합니다.

결론

  • MCP 서버는 Streamable HTTPSSE를 기반으로 Azure Container Apps에 배포 가능하며, ModelContextProtocol.AspNetCore 패키지를 사용해 구현해야 합니다. 향후 보안 강화와 OpenTelemetry 통합이 필수적입니다.*