/ 디렉터리 / 플레이그라운드 / MCPSharp
● 커뮤니티 afrise ⚡ 바로 사용

MCPSharp

제작: afrise · afrise/MCPSharp

C#/.NET에서 MCP 출시 — [McpTool]을 사용하여 메서드를 장식하고 서버를 시작하면 완료됩니다. Microsoft.Extensions.AI 및 Semantic Kernel과 함께 작동합니다.

MCPSharp는 속성을 통해 C# 메서드를 MCP 도구(및 리소스)로 변환하고 C#에서 다른 MCP 서버를 호출할 수 있는 클라이언트를 제공하는 .NET NuGet 패키지입니다. JSON-RPC 배관, 자동 매개변수 검증 및 유형 변환을 처리하고 XML 문서 주석에서 도구 설명을 가져옵니다. Microsoft.Extensions.AI 및 Semantic Kernel에 대한 최고 수준의 통합을 통해 최소한의 상용구를 사용하여 MCP 도구 에이전트를 .NET 앱에 연결할 수 있습니다.

왜 쓰나요

핵심 기능

라이브 데모

실제 사용 모습

mcpsharp.replay ▶ 준비됨
0/0

설치

클라이언트 선택

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config 열기. 저장 후 앱 재시작.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

Cursor는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "Edit Configuration" 선택.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

Claude Desktop과 같은 형식. Windsurf 재시작 후 적용.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "mcpsharp",
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ]
    }
  ]
}

Continue는 맵이 아닌 서버 오브젝트 배열 사용.

~/.config/zed/settings.json
{
  "context_servers": {
    "mcpsharp": {
      "command": {
        "path": "dotnet",
        "args": [
          "add",
          "package",
          "MCPSharp"
        ]
      }
    }
  }
}

context_servers에 추가. 저장 시 Zed가 핫 리로드.

claude mcp add mcpsharp -- dotnet add package MCPSharp

한 줄 명령. claude mcp list로 확인, claude mcp remove로 제거.

사용 사례

실전 활용법: MCPSharp

기존 C# 서비스를 MCP 도구로 노출

👤 .NET은 AI 에이전트가 호출할 내부 라이브러리를 보유하고 있습니다. ⏱ ~30 min intermediate

언제 쓸까: C#으로 작동하는 비즈니스 라이브러리가 있고 에이전트가 액세스할 수 있도록 만들어야 합니다.

사전 조건
  • .NET 8+ SDK — https://dotnet.microsoft.com/download
  • MCPSharp 패키지 — dotnet 패키지 MCPSharp 추가
흐름
  1. 장식 방법
    내 OrdersService에 노출하려는 공개 메서드에 [McpTool]을 추가합니다. 서명을 유지하십시오. MCPSharp가 유효성을 검사하도록 하세요.✓ 복사됨
    → 적용된 속성, 설명으로 사용된 XML 문서
  2. 서버 시작
    MCPServer.StartAsync("orders", "1.0.0")를 호출하는 Program.cs 진입점을 추가합니다.✓ 복사됨
    → dotnet run을 통해 실행됩니다. MCP 클라이언트는 도구를 검색할 수 있습니다.
  3. Claude Desktop에 연결
    내 dotnet 바이너리를 실행하는 claude_desktop_config.json 조각을 내보냅니다.✓ 복사됨
    → 명령=dotnet args=[run --project, path]를 사용하는 구성 블록

결과: 새로운 코드가 거의 없는 C# 서비스가 제공하는 MCP 서버입니다.

함정
  • 대형 객체를 형태화하지 않고 반환 — DTO 반환 — 탐색 속성을 사용하여 EF 엔터티를 직렬화하지 마세요. 응답이 폭주하게 됩니다.
함께 쓰기: fastmcp

Semantic Kernel 에이전트의 MCP 도구 사용

👤 Microsoft Semantic Kernel을 사용하여 팀 구축 에이전트 ⏱ ~45 min intermediate

언제 쓸까: 당신은 SK에 있고 외부 MCP 서버의 도구를 사용하고 싶습니다.

흐름
  1. 클라이언트 추가
    MCPSharp의 클라이언트를 추가하고 원격 서버를 SK 플러그인으로 등록합니다.✓ 복사됨
    → SK플랜에 도구가 등장하다
  2. 함수에서 호출
    사용자가 요청할 때 원격 도구 중 하나를 호출하는 채팅 기능을 표시합니다.✓ 복사됨
    → 왕복: 프롬프트 → SK가 도구 선택 → MCP 호출 → 응답 결과

결과: SK 앱은 모든 MCP 서버를 깔끔하게 사용할 수 있습니다.

플러그인 폴더에서 런타임 시 도구 등록

👤 플러그인 시스템 또는 로우 코드 제품을 배송하는 팀 ⏱ ~60 min advanced

언제 쓸까: 사용자가 새로운 도구 정의를 추가하고 재배포하지 않고도 사용할 수 있기를 원합니다.

흐름
  1. 폴더 스캔
    각 .dll을 반영하고 [McpTool] 메서드를 동적으로 등록하는 로더를 작성합니다.✓ 복사됨
    → 하드 코딩된 목록을 변경하지 않고 도구가 나타납니다.
  2. 안전하게 핫 리로드
    다시 로드가 누출되지 않도록 AssemblyLoadContext 격리를 추가합니다.✓ 복사됨
    → 다시 로드 사이에 오래된 어셈블리가 언로드됨

결과: 적절한 조립 수명주기를 갖춘 플러그형 도구 세트.

함정
  • 기본 로드 컨텍스트로 어셈블리 누출 — 격리된 다시 로드를 위해 수집 가능한 AssemblyLoadContext 사용

조합

다른 MCP와 조합해 10배 효율

mcpsharp + fastmcp

.NET과 Python MCP 서버 작성 비교

기존 .NET 스택을 위해 Python FastMCP 도구를 MCPSharp로 포팅합니다.✓ 복사됨
mcpsharp + csharp-sdk

공식 SDK와 커뮤니티 패키지 - 적합한 패키지 선택

내 필요에 맞게 MCPSharp와 공식 csharp-sdk를 비교하세요.✓ 복사됨
mcpsharp + azure-ai-gateway

Azure AI 게이트웨이 정책 뒤에 C# MCP 서버 배치

인증/비율 제한을 위해 Azure AI 게이트웨이를 사용하여 MCPSharp 서버를 전면에 배치합니다.✓ 복사됨

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
[McpTool] C# method signature 상담원이 전화하기를 원하는 모든 방법에서 0
[McpResource] C# member 도구가 아닌 읽을 수 있는 리소스(파일/데이터)를 노출하려는 경우 0
[McpParameter] method parameter 필수 매개변수를 표시하고 매개변수 설명을 제공합니다. 0
MCPServer.StartAsync name, version stdio(또는 구성된 전송)를 통해 서버를 시작합니다. 0
MCPClient server address C#에서 다른 MCP 서버와 통신하기 0

비용 및 제한

운영 비용

API 쿼터
없음 — 도서관입니다
호출당 토큰
도구에 따라 다릅니다. 도서관 자체가 작아요
금액
무료(MIT 스타일 OSS)
의도적으로 응답 DTO를 형성합니다. 큰 JSON blob은 토큰과 대기 시간을 모두 증가시킵니다.

보안

권한, 시크릿, 파급범위

자격 증명 저장: 서비스에서 무엇을 사용하든(ASP.NET 구성, KeyVault 등) MCPSharp는 자격 증명을 소유하지 않습니다.
데이터 외부 송신: 전송에 따라 다릅니다(stdio 로컬, 구성된 경우 HTTP/원격).

문제 해결

자주 발생하는 오류와 해결

클라이언트가 도구를 발견하지 못했습니다.

메서드가 공개인지, [McpTool]이 있는지, 속성 이름이 호출하는 이름과 일치하는지 확인하세요. 또한 StartAsync에 전달된 서버 이름을 확인하세요.

확인: MCPServer.ListTools() at startup
반환 시 직렬화 예외

POCO/DTO를 반환합니다. 순환 참조가 있는 지연 로드 EF 엔터티 및 유형을 피하세요.

확인: Unit test serialization with System.Text.Json
시맨틱 커널에 도구가 표시되지 않습니다

MCP 플러그인을 명시적으로 등록하고 커널 빌더가 인식하는지 확인하십시오. 일부 SK 버전에는 명시적 가져오기가 필요합니다.

확인: Log plugins at startup

대안

MCPSharp 다른 것과 비교

대안언제 쓰나단점/장점
csharp-sdk (official)공식 Anthropic/MCP C# SDK를 원합니다.다양한 인체공학적 특성; 기능 차이를 살펴보세요
fastmcp당신은 Python을 선호합니다다른 생태계
mcp-agent서버 작성뿐만 아니라 Python 기반 에이전트 패턴을 원합니다..NET 아님

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기