MCPSharp について
MCPSharp は、Model Context Protocol のサーバーとクライアントを構築するための .NET ライブラリです。.NET のメソッドを MCP エンドポイントとして公開したい、または既存の MCP サーバーをコードから呼び出したい C# 開発者向けです。Microsoft.Extensions.AI や Semantic Kernel とも統合できます。
主な機能
- 01McpTool と McpResource を用いた属性ベースの API
- 02JSON-RPC リクエストとレスポンスの自動処理
- 03既存の MCP サーバーに接続するクライアントクラス
- 04Microsoft.Extensions.AI との統合
- 05動的なツール登録と変更通知
活用シーン
- 01既存の .NET メソッドを MCP ツールとして公開
- 02C# アプリケーションから既存の MCP サーバーを呼び出し
- 03Semantic Kernel の関数への MCP インターフェース提供
MCP 対応
本ライブラリは MCP サーバーを構築し、.NET のメソッドをツールおよびリソースとして MCP クライアントに公開します。既存の MCP サーバーに接続するクライアントクラスも含みます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCPSharp
MCPSharp は、AI アシスタントやモデルが使用する標準化された API プロトコルである Model Context Protocol(MCP)のサーバーとクライアントの構築を支援する .NET ライブラリです。MCPSharp を使用すると、次のことができます。
- AI モデルが検出して使用できる、MCP 準拠のツールや関数を作成する
- 使いやすいクライアントを使って、C# コードから既存の MCP サーバーに直接接続する
- シンプルな属性を使って、.NET メソッドを MCP エンドポイントとして公開する
- MCP プロトコルの詳細や JSON-RPC 通信をシームレスに処理する
🚀 MCPSharp の新機能
- Microsoft.Extensions.AI との統合:MCPSharp が Microsoft.Extensions.AI と統合され、ツールを AIFunction として公開できるようになりました
- Semantic Kernel のサポート:Semantic Kernel の KernelFunctionAttribute を使ってツールを追加できます
- 動的なツール登録:独自の実装ロジックを使って、ツールをその場で登録できます
- ツール変更通知:ツールの追加、更新、削除時にサーバーがクライアントへ通知するようになりました
- 複雑なオブジェクトパラメーターのサポート:ツールのパラメーターにおける複雑なオブジェクトの処理が改善されました
- エラー処理の改善:詳細なスタックトレースを含む、エラー処理が改善されました
MCPSharp を使用する場面
次のような場合に MCPSharp を使用できます。
- Anthropic の Claude Desktop などの AI アシスタントが使用できるツールを作成する
- プロトコルの詳細を扱わずに、MCP 準拠の API を構築する
- 既存の .NET コードを MCP エンドポイントとして公開する
- 標準化されたインターフェースを通じて、アプリケーションに AI 機能を追加する
- 特定のベンダーに縛られずに、Microsoft.Extensions.AI や Semantic Kernel と統合する
機能
- 使いやすい属性ベースの API(
[McpTool]、[McpResource]) - リクエスト/レスポンスを自動処理する JSON-RPC サポートを内蔵
- パラメーターの自動検証と型変換
- XML コメントによる充実したドキュメントサポート
- 基本的な使用に必要な設定はほぼありません
前提条件
- standard 2.0をサポートする任意のバージョンの .NET
インストール
dotnet add package MCPSharp
クイックスタート
1. ツールを定義する
クラスを作成し、メソッドに [McpTool] 属性を付けます。
using MCPSharp;
public class Calculator
{
[McpTool("add", "Adds two numbers")] // Note: [McpFunction] is deprecated, use [McpTool] instead
public static int Add([McpParameter(true)] int a, [McpParameter(true)] int b)
{
return a + b;
}
}
2. サーバーを起動する
await MCPServer.StartAsync("CalculatorServer", "1.0.0");
StartAsync() メソッドは、基本アセンブリ内で McpTool 属性が付けられたメソッドを自動的にすべて検索します。参照ライブラリ内のメソッドを追加するには、対象のメソッドを含むクラスを T として MCPServer.Register<T>(); を呼び出し、手動で登録できます。メソッドに Semantic Kernel の属性が付けられている場合も、同様に機能します。クライアントがリスト変更通知に対応している場合、ツールが追加登録されたときに通知されます。
高度な使い方
動的なツール登録
独自の実装を使ってツールを動的に登録します。
MCPServer.AddToolHandler(new Tool()
{
Name = "dynamicTool",
Description = "A dynamic tool",
InputSchema = new InputSchema {
Type = "object",
Required = ["input"],
Properties = new Dictionary<string, ParameterSchema>{
{"input", new ParameterSchema{Type="string", Description="Input value"}}
}
}
}, (string input) => { return $"You provided: {input}"; });
Microsoft.Extensions.AI での使用
// Client-side integration
MCPClient client = new("AIClient", "1.0", "path/to/mcp/server");
IList<AIFunction> functions = await client.GetFunctionsAsync();
このリストは、IChatClientの ChatOptions.Tools プロパティに渡すことができ、MCP サーバーをあらゆる IChatClient 実装でシームレスに使用できます。
Semantic Kernel との統合
using Microsoft.SemanticKernel;
public class MySkillClass
{
[KernelFunction("MyFunction")]
[Description("Description of my function")]
public string MyFunction(string input) => $"Processed: {input}";
}
// Register with MCPServer
MCPServer.Register<MySkillClass>();
現時点では、Semantic Kernel のメソッドを MCP サーバーに登録可能にする唯一の方法です。ここで取り上げていないユースケースがある場合は、お問い合わせください。
API リファレンス
属性
-
[McpTool]- クラスまたはメソッドを MCP ツールとしてマークします- オプションのパラメーター:
Name- ツール名(デフォルト:クラス名またはメソッド名)Description- ツールの説明
- オプションのパラメーター:
-
[McpParameter]- 関数パラメーターのメタデータを指定します- オプションのパラメーター:
Description- パラメーターの説明Required- パラメーターが必須かどうか(デフォルト:false)
- オプションのパラメーター:
-
[McpResource]- プロパティまたはメソッドを MCP リソースとしてマークします- パラメーター:
Name- リソース名Uri- リソース URI(テンプレートを含めることができます)MimeType- リソースの MIME タイプDescription- リソースの説明
- パラメーター:
サーバーメソッド
MCPServer.StartAsync(string serverName, string version)- MCP サーバーを起動しますMCPServer.Register<T>()- ツールまたはリソースを含むクラスを登録しますMCPServer.AddToolHandler(Tool tool, Delegate func)- 動的ツールを登録します
クライアントメソッド
new MCPClient(string name, string version, string server, string args = null, IDictionary<string, string> env = null)- クライアントインスタンスを作成しますclient.GetToolsAsync()- 利用可能なツールを取得しますclient.CallToolAsync(string name, Dictionary<string, object> parameters)- ツールを呼び出しますclient.GetResourcesAsync()- 利用可能なリソースを取得しますclient.GetFunctionsAsync()- ツールを AIFunctions として取得します
XML ドキュメントのサポート
MCPSharp は XML コメントからドキュメントを自動的に抽出します:
/// <summary>
/// Provides mathematical operations
/// </summary>
public class Calculator
{
/// <summary>
/// Adds two numbers together
/// </summary>
/// <param name="a">The first number to add</param>
/// <param name="b">The second number to add</param>
/// <returns>The sum of the two numbers</returns>
[McpTool]
public static int Add(
[McpParameter(true)] int a,
[McpParameter(true)] int b)
{
return a + b;
}
}
プロジェクトファイルで XML ドキュメントを有効にします:
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
これにより、再コンパイルせずに MCP ツールの名前や説明をすばやく変更できます。たとえば、モデルがツールの正しい使い方を理解できていない場合に便利です。
移行に関する注意事項
[McpFunction]は非推奨となり、MCP 標準との整合性を高めるため[McpTool]に置き換えられました- 一貫性を保つため、
MCPServer.RegisterTool<T>()の代わりにMCPServer.Register<T>()を使用してください(旧メソッドも引き続き動作しますが、非推奨です)
コントリビューション
コントリビューションを歓迎します!お気軽に Pull Request を送信してください。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。