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

普段のお仕事に役立つ普遍的なプログラミングTIPSや、業界で注目度が高い最新情報をお届けする「編集部ピックアップ」。
今回はMCP C# SDKを使用してリモート環境(Azure App Service)にMCPサーバーを作成し、GitHub Copilot(エージェントモード)から動作を確認する方法についてお届けします。

前回の記事では、C# MCP SDKを使用してローカル環境で動作するMCPサーバーを作成し、GitHub CopilotのエージェントモードからMCPサーバーの動作を確認しました。

本記事では、MCP C# SDKを使用してASP.NET CoreアプリケーションにMCPサーバーを実装する方法と、このMCPサーバーをAzure App ServiceにデプロイしてVisual Studio CodeのGitHub Copilot(エージェントモード)から利用する方法について紹介します。

MCPサーバーを作成する

アプリケーションの作成

Visual Studioで「ASP.NET Core (空)」のプロジェクトテンプレートを使用してアプリケーションを作成します。

MCPサーバーを作成する

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

  • ModelContextProtocol.AspNetCore(MCP C# SDKのASP.NET Core用。現時点ではプレビューです)
MCPサーバーを作成する

Program.csを以下のように更新します。AddMcpServerメソッドでDIコンテナにMCPサーバーを登録、WithHttpTransportメソッドでサーバー送信イベント(Server-Sent Events, SSE)を使用(今回はリモート環境で連携するため)する通信トランスポートを設定、WithToolsFromAssemblyメソッドで現在のアセンブリ内で定義されたMCPツールをMCPサーバーに登録します。また、MapMcpメソッドでMCPサーバーのエンドポイント/sseを設定します。

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer()
    .WithHttpTransport()
    .WithToolsFromAssembly();

builder.Services.AddHttpClient();

var app = builder.Build();
app.MapMcp();
app.Run();

次にMCPサーバーで使用するMCPツールを実装します。前回は時刻を取得するMCPツールを実装しましたが、今回はHttpClientクラスを使用して外部のWeb API(天気予報API、https://weather.tsukumijima.net/)から天気予報を取得するMCPツールを実装します。

WeatherForecastToolクラスにMcpServerToolType属性を付与して、このクラスがMCPツールを含むことを示します。また、GetWeatherForecastCityメソッドにMcpServerTool属性を付与して、MCPクライアントから利用可能なMCPツールであることを示します。

using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Text.Json;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer()
    .WithHttpTransport()
    .WithToolsFromAssembly();

builder.Services.AddHttpClient();

var app = builder.Build();
app.MapMcp();
app.Run();

[McpServerToolType]
public static class WeatherForecastTool
{
    [McpServerTool, Description("天気予報を取得")]
    public static async Task<string> GetWeatherForecastCity(
        IHttpClientFactory httpClientFactory, 
        string citycode)
    {
        HttpClient client = httpClientFactory.CreateClient();

        // 天気予報API(https://weather.tsukumijima.net/)にHTTP GETリクエストを送信
        using HttpResponseMessage response = await client.GetAsync($"https://weather.tsukumijima.net/api/forecast?city={citycode}");

        // レスポンスを確認
        response.EnsureSuccessStatusCode();

        // レスポンスの内容をストリームとして取得
        using Stream content = await response.Content.ReadAsStreamAsync();

        // 天気予報を取得
        using JsonDocument jsonDocument = await JsonDocument.ParseAsync(content);

        string title = jsonDocument.RootElement
            .GetProperty("title")
            .GetString() ?? string.Empty;

        string weatherforecast = jsonDocument.RootElement
            .GetProperty("description")
            .GetProperty("bodyText")
            .GetString() ?? string.Empty;

        return $"{title}:{weatherforecast}";
    }
}

MCPサーバーをテストする

MCPサーバーをテストするためのツール「MCP Inspector」を使用して作成したMCPサーバーをテストします。

Visual Studioで作成したアプリケーションをデバッグ実行します。実行時にターミナルで表示されるアプリケーションのURLを控えておきます。

MCPサーバーをテストする

Visual Studioのメニューから「表示」-「ターミナル」をクリックします。開発者用コマンドプロンプトでnpx @modelcontextprotocol/inspector dotnet runを入力してMCP Inspectorを実行します。

MCPサーバーをテストする

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

MCPサーバーをテストする

「Transport Type」にSSE、「URL」に先ほど控えておいたアプリケーションのURL(http://localhost:5001)とMCPサーバーのエンドポイント(/sse)を設定します。[Connect]をクリックしてサーバーに接続します。

MCPサーバーをテストする

[List Tools]をクリックしてMCPツールのリストを表示します。「GetWeatherForecastCity」をクリックしてMCPツールの詳細が表示されるのを確認します。

MCPサーバーをテストする

天気予報APIを呼び出す際のパラメータ「citycode」を設定(仙台のコード040010)して[Run Tool]をクリックします。ツールが起動し、実行結果が表示されます。

MCPサーバーをテストする

MCPサーバーをAzureにデプロイする

作成したMCPサーバーをAzureへデプロイします。現時点ではWindows OSでホストしていると動作しないので、「Azure App Service (Linux)」にデプロイします。

MCPサーバーをAzureにデプロイする

デプロイ後にポータルで表示されるアプリケーションのURLを控えておきます。

MCPサーバーをAzureにデプロイする

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

MCPサーバーを設定する

Visual Studio Codeで「ファイル」-「ユーザー設定」-「設定」をクリックします。「mcp」を入力してMCP関連の設定項目を表示します。「settings.json で編集」をクリックして設定ファイルを開きます。

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

serversフィールドに以下を追加します。

"servers": {
    "azure-mcp-server-test": {
        "type": "sse",
        "url": "<AzureにデプロイしたアプリケーションのURL>/sse"
    }
}

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

GitHub Copilotのチャットを開き、ドロップダウンからエージェントモードを選択します。

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

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

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

チャット入力ボックスにプロンプ​​トを入力するとMCPツール「GetWeatherForecastCity」が自動的に呼び出されます。適切なcitycodeが設定されているか確認(必要に応じて修正)して[続行]をクリックしてMCPツールを実行します。

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

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

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

さいごに

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

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