Model Context Protocol .NET Template について
MCP アプリケーションを .NET で構築するためのプロジェクトテンプレートです。基本的な構成とサンプルコードを提供し、C# で MCP サーバーを作成する開発者を対象としています。Stdio と HTTP の両モードで動作し、.NET ツールとしてパッケージ化することもできます。
主な機能
- 01mcp-server などの dotnet new テンプレートを提供
- 02[McpServerTool] 属性を使ったサンプルのエコーサーバー
- 03Stdio と HTTP の両モードに対応
- 04グローバル .NET ツールとしてパッケージ化
- 05Aspire 連携と MCP Inspector を含む
活用シーン
- 01C# で MCP サーバーを作成する際の出発点
- 02MCP Inspector を使ったローカルサーバーのデバッグ
- 03MCP サーバーをコマンドラインツールとして配布
MCP 対応
テンプレートから生成されるのは MCP サーバーであり、WithToolsFromAssembly() でアセンブリ内のツールを登録し、MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Model Context Protocol .NET テンプレート
LLM アプリケーションと外部データソースをシームレスに統合するためのプロトコル
このリポジトリには、.NET で Model Context Protocol(MCP)アプリケーションを作成するためのテンプレートが含まれています。独自の MCP 対応アプリケーションを構築し始めるのに役立つ、基本的な構造とサンプルコードを提供します。
| パッケージ | バージョン | 説明 |
|---|---|---|
Nall.ModelContextProtocol.Template | テンプレート | |
Nall.ModelContextProtocol.Inspector.Aspire.Hosting | Aspire ホスティング統合 |
はじめに
インストール:
dotnet new install Nall.ModelContextProtocol.Template
# dotnet new install ./Artefact/Nall.ModelContextProtocol.Template
インストールを確認します:
dotnet new list mcp
# These templates matched your input: 'mcp'
# Template Name Short Name Language Tags
# ----------------- ----------------- -------- -------------
# Template Name Short Name Language Tags
# -------------------- -------------------- -------- -------------
# MCP Server mcp-server [C#] dotnet/ai/mcp
# MCP Server HTTP mcp-server-http [C#] dotnet/ai/mcp
# MCP Server HTTP Auth mcp-server-http-auth [C#] dotnet/ai/mcp
# MCP Server Hybrid mcp-server-hybrid [C#] dotnet/ai/mcp
ヒント
実際にはモードを切り替えたくなるため、
mcp-server-hybridテンプレートの使用をおすすめします。これにより、サーバーを Stdio モードと HTTP モードの両方で実行できます。
出力を確認します:
dotnet new mcp-server -o MyAwesomeMCPServer -n MyAwesomeMCPServer --dry-run
# File actions would have been taken:
# Create: MyAwesomeMCPServer\.vscode\launch.json
# Create: MyAwesomeMCPServer\MyAwesomeMCPServer.csproj
# Create: MyAwesomeMCPServer\Program.cs
# Create: MyAwesomeMCPServer\Properties\launchSettings.json
# Create: MyAwesomeMCPServer\README.md
# Create: MyAwesomeMCPServer\appsettings.Development.json
# Create: MyAwesomeMCPServer\appsettings.json
テンプレートから作成します:
dotnet new mcp-server -o MyAwesomeMCPServer -n MyAwesomeMCPServer
以下は Program.cs の内容です:
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync();
[McpServerToolType]
public static class EchoTool
{
[McpServerTool, Description("Echoes the message back to the client.")]
public static string Echo(string message) => $"hello {message}";
}
これは、受信メッセージを待ち受けて挨拶を返すシンプルなエコーサーバーです。[McpServerTool] 属性を付けたメソッドを追加することで、さらにツールを追加できます。WithToolsFromAssembly() メソッドは、アセンブリ内のすべてのツールを自動的に登録します。
ローカルで実行する
プロジェクトディレクトリからビルドします:
dotnet build -o Artefacts -c Release
インスペクターを実行します:
npx @modelcontextprotocol/inspector -e DOTNET_ENVIRONMENT=Production dotnet "$(PWD)/Artefacts/MyAwesomeMCPServer.dll"
ブラウザーでインスペクターを開き、サーバーをテストします:
.NET ツールとして配布する
プロジェクトディレクトリからパックします:
dotnet pack -o Artefacts -c Release
ツールをグローバルにインストールします:
dotnet tool install --global --add-source ./Artefacts MyAwesomeMCPServer
これで、このツールをグローバルにインストールした後は、システム上のどこからでも実行できます。このツールはターミナルで MyAwesomeMCPServer(または myawesomemcpserver)として利用できるようになります。
💡 ローカルツールマニフェストを作成し、MCP をツールとしてローカルにインストールすることもできます。
インスペクターを実行します:
npx @modelcontextprotocol/inspector -e DOTNET_ENVIRONMENT=Production myawesomemcpserver
Aspire で実行する
Stdio モードの場合
AppHost/Program.cs にて:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddMCPInspector().WithStdio<Projects.MCPServer>();
builder.Build().Run();
HTTP モードの場合
AppHost/Program.cs にて:
var builder = DistributedApplication.CreateBuilder(args);
var mcp = builder.AddProject<Projects.MCPServerRemote>("server");
builder.AddMCPInspector().WithMcp(mcp);
builder.Build().Run();
リファレンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。