今回は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 (空)」のプロジェクトテンプレートを使用してアプリケーションを作成します。

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

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を控えておきます。

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

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

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

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

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

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

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

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

servers
フィールドに以下を追加します。
"servers": {
"azure-mcp-server-test": {
"type": "sse",
"url": "<AzureにデプロイしたアプリケーションのURL>/sse"
}
}
GitHub Copilot(エージェントモード)でMCPサーバーを使用する
GitHub Copilotのチャットを開き、ドロップダウンからエージェントモードを選択します。

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

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

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

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