/ ディレクトリ / プレイグラウンド / MCPSharp
● コミュニティ afrise ⚡ 即起動

MCPSharp

作者 afrise · afrise/MCPSharp

MCP を C#/.NET で出荷する — [McpTool] でメソッドを修飾し、サーバーを起動して完了です。 Microsoft.Extensions.AI およびセマンティック カーネルで動作します。

MCPSharp は、属性を介して C# メソッドを MCP ツール (およびリソース) に変換する .NET NuGet パッケージであり、C# から他の MCP サーバーを呼び出すためのクライアントも提供します。 JSON-RPC プラミング、自動パラメーター検証、型変換を処理し、XML ドキュメントのコメントからツールの説明を取得します。 Microsoft.Extensions.AI とセマンティック カーネルの最上級の統合により、最小限の定型文で 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 ツールとして公開する

👤 AI エージェントに呼び出させたい内部ライブラリを備えた .NET ショップ ⏱ ~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 デスクトップに接続する
    dotnet バイナリを起動する claude_desktop_config.json スニペットを出力します。✓ コピーしました
    → command=dotnet args=[run --project, path] を使用した構成ブロック

結果: 新しいコードをほとんど使用せずに、C# サービスを利用できる MCP サーバー。

注意点
  • 大きなオブジェクトを整形せずに返す — DTO を返す — nav プロパティを使用して EF エンティティをシリアル化しないでください。応答が爆発してしまいます。
組み合わせ: fastmcp

セマンティック カーネル エージェントの MCP ツールを使用する

👤 Microsoft セマンティック カーネルを使用してエージェントを構築するチーム ⏱ ~45 min intermediate

使うタイミング: SK を使用しており、外部 MCP サーバーのツールを使用したいと考えています。

フロー
  1. クライアントを追加する
    MCPSharp のクライアントを追加し、リモート サーバーを SK プラグインとして登録します。✓ コピーしました
    → SKプランにツールが登場
  2. 関数からの呼び出し
    ユーザーの要求に応じてリモート ツールの 1 つを呼び出すチャット機能を表示します。✓ コピーしました
    → 往復: プロンプト → SK がツールを選択 → MCP 呼び出し → 結果が返信される

結果: SK アプリは、任意の MCP サーバーをクリーンに使用できます。

実行時にプラグインフォルダーからツールを登録する

👤 プラグイン システムまたはローコード製品を出荷するチーム ⏱ ~60 min advanced

使うタイミング: ユーザーが新しいツール定義をドロップした場合、再デプロイせずにそれらを利用できるようにしたいと考えています。

フロー
  1. フォルダーをスキャンする
    各 .dll を反映し、[McpTool] メソッドを動的に登録するローダーを作成します。✓ コピーしました
    → ハードコーディングされたリストを変更せずにツールが表示されます
  2. 安全にホットリロード
    AssemblyLoadContext 分離を追加して、リロードがリークしないようにします。✓ コピーしました
    → リロードの間に古いアセンブリがアンロードされる

結果: 適切なアセンブリライフサイクルを備えたプラグイン可能なツールセット。

注意点
  • デフォルトのロードコンテキストでアセンブリがリークする — 分離されたリロードには収集可能な AssemblyLoadContext を使用する

組み合わせ

他のMCPと組み合わせて10倍の力を

mcpsharp + fastmcp

.NET と Python MCP サーバーのオーサリングを比較する

Python FastMCP ツールを既存の .NET スタック用の MCPSharp に移植します。✓ コピーしました
mcpsharp + csharp-sdk

公式 SDK とコミュニティ パッケージ — 適合するものを選択してください

私のニーズに合わせて、MCPSharp と公式 csharp-sdk を比較してください。✓ コピーしました
mcpsharp + azure-ai-gateway

C# MCP サーバーを Azure AI ゲートウェイ ポリシーの背後に配置する

認証/レート制限のために、MCPSharp サーバーの前面に Azure AI ゲートウェイを配置します。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
[McpTool] C# method signature エージェントに呼び出してほしいすべてのメソッドで 0
[McpResource] C# member ツールではなく読み取り可能なリソース (ファイル/データ) を公開したい場合 0
[McpParameter] method parameter 必須パラメータにマークを付け、パラメータの説明を入力します 0
MCPServer.StartAsync name, version 標準入出力 (または構成されたトランスポート) 経由でサーバーを起動します。 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 を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る