MCP C# SDKを使用してMCPサーバーを作成、GitHub Copilotから動作を確認してみる

普段のお仕事に役立つ普遍的なプログラミングTIPSや、業界で注目度が高い最新情報をお届けする「編集部ピックアップ」。
今回は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でコンソールアプリケーションを作成します。

MCPサーバーを作成する

NuGetパッケージマネージャーから以下のパッケージをインストールします。

  • ModelContextProtocol(MCP C# SDK。現時点ではプレビューです)
  • Microsoft.Extensions.Hosting
MCPサーバーを作成する

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ツールを含むことを示します。また、GetCurrentTimeGetTimeInTimezoneメソッドに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を入力して実行します。

MCPサーバーをテストする

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

MCPサーバーをテストする

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

MCPサーバーをテストする

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

MCPサーバーをテストする

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

MCPサーバーをテストする

Visual Studio CodeでMCPサーバーを使う

MCPサーバーを設定する

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

Visual Studio CodeでMCPサーバーを設定する

さらに「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のチャットを開き、ドロップダウンからエージェントモードを選択します。

GitHub Copilot(エージェントモード)でMCPサーバーを使用する

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

GitHub Copilot(エージェントモード)でMCPサーバーを使用する

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

GitHub Copilot(エージェントモード)でMCPサーバーを使用する

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

GitHub Copilot(エージェントモード)でMCPサーバーを使用する

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

GitHub Copilot(エージェントモード)でMCPサーバーを使用する

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

GitHub Copilot(エージェントモード)でMCPサーバーを使用する

さいごに

今回はMCP C# SDKを使用して、ローカル環境でMCPサーバーを実装する方法とGitHub Copilot(エージェントモード)からMCPサーバーを利用する方法について紹介しました。MCP C# SDKを使用することで、MCPサーバーをC#で作成してAIアプリケーションと連携させることができます。

また、MCP C# SDKを使用してASP.NET CoreやAzure Functionsなどでリモート環境にMCPサーバーを作成することも可能です。この辺の情報についても今後の記事で紹介したいと思います。

\  この記事をシェアする  /