はじめに
Azure Functions で MCP サーバーが作れるようになりました!
Build AI agent tools using remote MCP with Azure Functions
桜の時期のお気に入りの散歩コースを歩いて記事を書こうと思ったら、JP さんに先を越されてました…。
試してみよう
JP さんのやっていることと同じにはなりますが、私は Visual Studio 2022 で C# のみでやります。
まずは Azure Functions のプロジェクトを作成します。今回は .NET Aspire の機能も使いたいと思っているので .NET Aspire オーケストレーションへの参加 (プレビュー) をオンにしました。プロジェクト名は McpAzureFunctions
という名前で作成しました。この後のコード例は、このプロジェクトで作成した前提のコードになります。次に以下の NuGet パッケージをインストールします。
- Microsoft.Azure.Functions.Worker.Extensions.Mcp v1.0.0-preview.1
そして天気予報を返してくれる関数を作成します。以下のようなコードにしました。
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Mcp;
using System.ComponentModel;
namespace McpAzureFunctions;
public class MyMcpTools
{
[Function(nameof(GetWeatherForecast))]
public WeatherForecastResult GetWeatherForecast(
[McpToolTrigger(nameof(GetWeatherForecast), "指定された場所の天気予報を取得します。")]
ToolInvocationContext context,
[McpToolProperty(nameof(location), "string", "天気を知りたい場所の名前")]
string location)
{
return location switch
{
"東京" => new WeatherForecastResult("東京", "晴れ"),
"大阪" => new WeatherForecastResult("大阪", "曇り"),
"福岡" => new WeatherForecastResult("福岡", "雨"),
_ => new WeatherForecastResult(location, "不明"),
};
}
}
public record WeatherForecastResult(
string Location,
string Weather);
これで実行して Azure Functions のプロジェクトの標準出力を確認すると、以下のような出力がされます。
[2025-04-05T08:05:20.358Z] Worker process started and initialized.
Functions:
GetWeatherForecast: mcpToolTrigger
ちゃんと mcpToolTrigger で GetWeatherForecast が登録されているのがわかります。
この MCP ツールを試してみましょう。AppHost プロジェクトの Program.cs
に以下のコードを追加して @modelcontextprotocol/inspector
を実行するようにします。
Program.cs
builder.AddExecutable(
"mcp-inspector",
"npx",
".",
"@modelcontextprotocol/inspector",
"node",
"build/index.js")
.WithHttpEndpoint(8080,6274);
実行すると以下のように .NET Aspire のダッシュボードに mcp-inspector が表示されます。
mcp-inspector の部分に表示されているエンドポイントを選択すると以下のような画面が出るので、SSE を選んで http://localhost:7173/runtime/webhooks/mcp/sse
を入力して Connect を押します。
そして List Tools を選択してツールを取得すると、以下のように GetWeatherForecast ツールが取得できます。そしてパラメーターを入れて実行をして結果を確認することが出来ます。
Azure にデプロイ
Azure にデプロイして VS Code で接続したらタイムアウトになって動かなかったので、後で確認しようと思います。現時点では私は動かせていません。
まとめ
Azure Functions で MCP サーバーが作れるようになりました。プレビューですが、一般提供開始になるとお手軽に MCP サーバーが作れるようになると思います。認証とかもサービス側で設定するだけで出来るようになるので、そこらへんも楽なポイントだと思います。
個人的には Azure Functions の 230 秒の HTTP リクエストのタイムアウトって大丈夫なんだろうかというのが心配ではありますが、そこら辺は実際に Azure にデプロイできたら確認してみようと思います。
今回、試しに .NET Aspire と組み合わせて Model Context Protocol inspector を一緒に起動してみました。MCP サーバーの開発をする際には仕込んでおくと簡単に動作確認が出来るので楽だと思います。
ちゃんとテストするなら .NET Aspire のテスト機能でサーバーを実際に実行させて MCP クライアント系のライブラリで繋いでテストすることになるのかなと思います。