今回はMCP C# SDKを使用してMCPサーバーを作成し、GitHub Copilot(エージェントモード)から動作を確認する方法についてお届けします。
MCP(Model Context Protocol)とは?
MCP(Model Context Protocol)は、LLMを搭載したアプリケーションと外部のデータソースやサービスを連携するためのプロトコルです。
MCPは、次の3つの役割を持つコンポーネントで構成されます。
- ホスト:接続を開始するAIアプリケーション
- MCPクライアント:ホストアプリケーション内のコネクタ
- MCPサーバー:コンテキストと機能を提供するサービス
ホストであるAIアプリケーションはMCPクライアントを内部に搭載し、必要に応じてMCPサーバーにリクエストを送信します。MCPサーバーは外部のデータソースやツールへのアクセスを提供し、MCPクライアントからのリクエストに応じて必要な処理を実行してレスポンスを返します。
すでに利用を開始している方も多いかと思いますが、マイクロソフトではMicrosoft Copilot StudioやGitHub Copilot(エージェントモード)などでMCPサーバーをサポートしています。また、GitHub MCP ServerやPlaywright MCP ServerなどのMCPサーバーも提供しています。
MCP C# SDKとは?
MCP C# SDKは、マイクロソフトがMCPの仕様を策定したAnthropicと開発した公式のSDKです。このSDKを使用して、C#でMCPサーバーやクライアントを .NETアプリケーションに実装することが可能です。
本記事では、このMCP C# SDKを使用して .NETアプリケーションにMCPサーバーを実装する方法およびVisual Studio CodeのGitHub Copilot(エージェントモード)からMCPサーバーを利用する方法について紹介します。
MCPサーバーを作成する
アプリケーションの作成
Visual Studioでコンソールアプリケーションを作成します。

NuGetパッケージマネージャーから以下のパッケージをインストールします。
- ModelContextProtocol(MCP C# SDK。現時点ではプレビューです)
- Microsoft.Extensions.Hosting

Program.csを以下のように更新します。AddMcpServer
メソッドでDIコンテナにMCPサーバーを登録、WithStdioServerTransport
メソッドで標準入出力を使用(今回はローカル環境で連携するため)した通信トランスポートを設定、WithToolsFromAssembly
メソッドで現在のアセンブリ内で定義されたMCPツールをMCPサーバーに登録します。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateEmptyApplicationBuilder(settings: null);
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync();
次にMCPサーバーで使用するMCPツールを実装します。TimeTools
クラスにMcpServerToolType
属性を付与して、このクラスがMCPツールを含むことを示します。また、GetCurrentTime
とGetTimeInTimezone
メソッドにMcpServerTool
属性を付与して、MCPクライアントから利用可能なMCPツールであることを示します。
[McpServerToolType]
public static class TimeTools
{
[McpServerTool, Description("現在の時刻を取得")]
public static string GetCurrentTime()
{
return DateTimeOffset.Now.ToString();
}
[McpServerTool, Description("指定されたタイムゾーンの現在の時刻を取得")]
public static string GetTimeInTimezone(string timezone)
{
try
{
var tz = TimeZoneInfo.FindSystemTimeZoneById(timezone);
return TimeZoneInfo.ConvertTime(DateTimeOffset.Now, tz).ToString();
}
catch
{
return "無効なタイムゾーンが指定されています";
}
}
}
MCPサーバーをテストする
MCPサーバーをテストするためのツールとして「MCP Inspector」が提供されています。
こちらを利用して作成したMCPサーバーをテストしてみます。Visual Studioのメニューから「表示」-「ターミナル」をクリックします。開発者用コマンドプロンプトでnpx @modelcontextprotocol/inspector dotnet run --project ./ConsoleMcpServerApp1/ConsoleMcpServerApp1.csproj
を入力して実行します。

ブラウザを開いてターミナルに表示されているURLにアクセスします。以下のような画面が表示されます。

[Connect]をクリックしてサーバーに接続します。さらに[List Tools]をクリックしてMCPツールのリストを表示します。

「GetCurrentTime」をクリックしてツールの詳細が表示されるのを確認します。さらに[Run Tool]をクリックします。

ツールが起動し、実行結果が表示されます。

Visual Studio CodeでMCPサーバーを使う
MCPサーバーを設定する
Visual Studio Codeで「ファイル」-「ユーザー設定」-「設定」をクリックします。「mcp」を入力してMCP関連の設定項目を表示します。「Chat > Mcp : Enabled」のチェックがONになっていることを確認します。

さらに「settings.json で編集」をクリックして設定ファイルを開きます。servers
フィールドに以下を追加します。
"servers": {
"ConsoleMcpServerApp1": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"C:\\Users\\kuni\\OneDrive - MESCIUS inc\\デスクトップ\\ConsoleMcpServerApp1\\ConsoleMcpServerApp1\\ConsoleMcpServerApp1.csproj"
]
}
}
GitHub Copilot(エージェントモード)でMCPサーバーを使用する
GitHub Copilotのチャットを開き、ドロップダウンからエージェントモードを選択します。

使用可能なツールのリストを表示するには、「ツールを選択する」ボタンを選択します。

チャット入力ボックスにプロンプトを入力するとツール「GetCurrentTime」が自動的に呼び出されます。[続行]をクリックしてツールを実行します。

ツールの実行結果が確認できます。

ツール「GetTimeInTimezone」も実行してみます。

先ほどと同じようにツールの実行結果が確認できます。

さいごに
今回はMCP C# SDKを使用して、ローカル環境でMCPサーバーを実装する方法とGitHub Copilot(エージェントモード)からMCPサーバーを利用する方法について紹介しました。MCP C# SDKを使用することで、MCPサーバーをC#で作成してAIアプリケーションと連携させることができます。
また、MCP C# SDKを使用してASP.NET CoreやAzure Functionsなどでリモート環境にMCPサーバーを作成することも可能です。この辺の情報についても今後の記事で紹介したいと思います。