모델 컨텍스트 프로토콜(MCP)을 활용한 C# 기반 서버 및 클라이언트 구현
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
C# 개발자, AI 시스템 통합 담당자 (중급~고급 수준)
핵심 요약
- MCP의 핵심 개념:
- 일관된 접근(Consistent Access): 모든 리소스에 대한 통합 인터페이스 제공
- 최신 정보 보장(Always Up to Date): 실시간 데이터 동기화
- 복잡성 추상화(Abstracted Complexity): 데이터 소스별 맞춤 코드 제거
- 구조:
- 클라이언트-서버 모델 기반 설계 (McpClient
, McpServer
클래스 활용)
- .NET 8.0 기반의 C# SDK 제공 (GitHub: petersaktor/mcp)
- 구현 키 포인트:
- McpServerPromptType
, McpServerToolType
어트리뷰트를 사용한 리소스/프롬프트/도구 정의
- StdioClientTransport
를 통한 서버-클라이언트 통신
섹션별 세부 요약
1. MCP 개요
- 정의: AI 시스템이 파일 시스템, 데이터베이스, API 등 외부 리소스와 상호작용하는 표준화된 프로토콜
- 기능:
- AI 에이전트가 데이터 탐색, 가져오기, 작업 수행 가능
- 모듈화된 아키텍처를 통해 개발자 생산성 향상
2. MCP의 핵심 구성 요소
- 리소스(Resource):
- 문서, 이미지, 데이터베이스 등 외부 데이터를 접근할 수 있는 정적 자원
- 예: GetBingEndpoint()
메서드로 Bing 엔드포인트 URL 제공
- 도구(Tool):
- 데이터 가져오기, 파일 수정, 작업 트리거 등 동작 중심 기능
- 예: GetCurrentTime()
메서드로 시간대별 현재 시간 반환
- 프롬프트(Prompt):
- AI 에이전트와 도구/리소스 간 상호작용 템플릿
- 예: Summarize()
메서드로 입력 콘텐츠 요약
3. 클라이언트-서버 구현
- 서버 구성:
- AddMcpServer()
를 통해 STDIO 통신 설정
- WithToolsFromAssembly()
로 도구 정의, WithResourcesFromAssembly()
로 리소스 정의
- 클라이언트 구성:
- StdioClientTransport
를 사용해 서버 실행 명령 지정
- McpClientFactory
로 클라이언트 생성 후 프롬프트/도구/리소스 요청 처리
4. 코드 예시
- 서버 프로그램:
```csharp
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync();
```
- 프롬프트 정의:
```csharp
[McpServerPromptType]
public static class SimplePrompt
[McpServerPrompt]
public static ChatMessage Summarize(string content) =>
new(ChatRole.User, $"Please summarize this content into a single sentence: {content}");
```
결론
- 실무 적용 팁:
- GitHub 저장소의 petersaktor/mcp
예제를 기반으로 MCP 서버/클라이언트 구현
- McpServerPromptType
, McpServerToolType
어트리뷰트를 활용한 모듈화 설계 중요
- .NET 8.0 기반 SDK 활용 시 serialization, context 관리 자동화 가능