Consumir servidores MCP desde .NET: cuando tu app es el cliente
개요
.NET 애플리케이션이 MCP(Model Context Protocol) 서버의 기능을 클라이언트로 사용하는 방법을 설명하며, 이를 통해 외부 도구 및 기능의 통합과 자동화된 에이전트 루프 구축을 간소화합니다.
주요 내용
* MCP 클라이언트의 세 가지 핵심 동작: MCP 서버와 통신하는 .NET 클라이언트는 연결(stdio 또는 HTTP 전송), 발견(서버가 제공하는 도구 목록 획득), 호출(도구 이름과 인수를 사용하여 기능 실행)의 세 가지 주요 동작을 수행합니다.
* 연결 방법: 로컬 서버의 경우 StdioClientTransport를 사용하여 자식 프로세스로 실행하거나, 원격 서버의 경우 HttpClientTransport를 사용하여 HTTP 엔드포인트에 연결할 수 있습니다.
* 도구 발견 및 호출: ListToolsAsync()를 통해 실행 시점에 도구 목록을 동적으로 획득하며, 이 정보는 서버의 C# 구현이 아닌 실제 계약으로 간주됩니다. CallToolAsync()를 사용하여 도구를 이름과 인수를 전달하여 호출합니다.
* AI 모델과의 통합: MCP 서버에서 발견된 도구는 McpClientTool 클래스를 통해 AIFunction으로 취급되며, IChatClient와 UseFunctionInvocation() 미들웨어를 사용하여 별도의 적응 코드 없이 직접 통합되어 AI 모델이 도구를 선택하고 호출하는 에이전트 루프를 자동으로 관리합니다.
* 원격 서버 연결: HttpClientTransport를 사용할 때 TransportMode 옵션을 통해 StreamableHttp 또는 SSE를 지정할 수 있으며, 기본값은 AutoDetect입니다.
* MCP v2.0 주요 변경 사항: v2.0에서는 HTTP 전송이 기본적으로 상태 비저장(stateless)으로 변경되어 initialize 핸드셰이크가 사라졌고, 서버 시작 요청(sampling, roots)이 비동기 호출로 대체되었습니다. 상태 기반 세션에 의존하는 서버는 마이그레이션이 필요할 수 있습니다.
* MCP 클라이언트 사용 시점: 자신의 애플리케이션 범위를 넘어선 외부 서버의 기능이 필요하거나, 서버 측 도구 변경이 애플리케이션 재배포 없이 동적으로 통합되어야 할 때 MCP 클라이언트 사용이 유용합니다.
시사점
MCP 클라이언트 아키텍처는 .NET 애플리케이션이 외부 서비스 및 도구를 효율적으로 통합하고, AI 모델이 이러한 기능을 활용하여 복잡한 작업을 자동화하는 방식을 간소화합니다.
댓글
GitHub Discussions