How I Created a Handy MCP Server in C# to Retrieve NuGet Package Information
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
- C# 개발자, AI 코딩 어시스턴트 사용자, NuGet 패키지 사용자
- 중급~고급 난이도: MCP 프로토콜 이해, NuGet 패키지 분석, C# 서버 개발 기술 필요
핵심 요약
- MCP(Model Context Protocol)는 AI가 외부 도구(예: NuGet API)와 상호작용할 수 있도록 JSON 기반 표준 프로토콜 제공
- DimonSmart.NugetMcpServer는 NuGet 패키지의 실제 API 정의를 가져와 LLM 홀루세이션(허위 정보 생성)을 줄임
- 서버는 [McpServerTool] 어트리뷰트를 사용해 C# 메서드를 MCP 도구로 자동 등록하고, STDIO를 통해 JSON 요청/응답 처리
섹션별 세부 요약
1. MCP 프로토콜의 필요성
- LLM의 한계: 외부 도구 없이 시간, 파일 읽기, API 호출 등 정확한 정보를 제공할 수 없음
- MCP의 역할: AI가 표준화된 JSON 형식으로 외부 도구(예: GetCurrentTime, GetTime)를 호출하고 결과를 받음
- 예시:
- 요청:
{"name":"GetCurrentTime","parameters":{}}
- 응답:
{"result":"2025-06-03T14:42:41Z"}
2. NuGet MCP 서버의 문제점 해결
- LLM 홀루세이션의 원인:
- 구식 메서드 추천, 존재하지 않는 API 호출, 버전 차이 혼동, 불완전한 정보 제공
- NugetMcpServer의 기능:
- NuGet 패키지의 인터페이스 정의, 열거형 정의, 버전별 정보 제공
- 패키지 다운로드 후 .dll 분석을 통해 실제 API 정의 추출
3. 서버 구현 방법
- C# 라이브러리 사용:
ModelContextProtocol.Server
(v0.2.0) - 도구 등록:
[McpServerToolType]
어트리뷰트로 도구 컨테이너 클래스 정의[McpServerTool]
어트리뷰트로 메서드를 MCP 도구로 노출- 예시 코드:
```csharp
[McpServerToolType]
public static class TimeTool
[McpServerTool, Description("Returns the current server time in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ).")]
public static string GetCurrentTime()
return DateTime.UtcNow.ToString("o");
```
4. NuGet MCP 서버의 주요 기능
ListInterfaces(packageId, version?)
– 특정 패키지의 모든 공개 인터페이스 목록 제공GetInterfaceDefinition(packageId, interfaceName, version?)
– 인터페이스의 C# 정의 코드 반환GetEnumDefinition(packageId, enumName, version?)
– 열거형의 정의 반환- STDIO 통신: JSON 프로토콜 기반, VS Code 등 MCP 클라이언트와 호환
결론
- NuGet MCP 서버 사용 권장: AI 코딩 어시스턴트의 정확성 향상, NuGet 패키지의 실시간 API 정의 제공
- 설치 방법:
winget install DimonSmart.NugetMcpServer
명령어로 간단히 설치 가능 - 핵심 가치: LLM 홀루세이션 줄이고, NuGet 패키지의 정확한 API 정보를 실시간으로 제공하는 AI 개발 도구