このエントリは2025/11/25現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。
このエントリはAzure FunctionsのMCP triggerが一般提供されたということで試したメモ。内容自体はそんなに難しいことをしているわけではない。言語はJavaで実装している。
ここに記載したこと(=実施したこと)は、以下のあたりに記載がある。
Azure Functions のモデル コンテキスト プロトコル バインドの概要 / Model Context Protocol bindings for Azure Functions overview
https://learn.microsoft.com/azure/azure-functions/functions-bindings-mcp?pivots=programming-language-java
Azure Functions の MCP ツール トリガー / MCP tool trigger for Azure Functions
https://learn.microsoft.com/azure/azure-functions/functions-bindings-mcp-trigger?tabs=attribute&pivots=programming-language-java
MCP Serverを作成する
”MCP 拡張サーバー”と呼ばれる、Azure Functions MCP 拡張機能を使用したカスタム MCP サーバーを作成する。と言っても、Functionsをふつうに作り、Triggerを変えるだけ。
まずはMavenでarchetypeを作成する。今回はPublic PreviewのJava 25を使う。
mvn archetype:generate \
-DarchetypeGroupId=com.microsoft.azure \
-DarchetypeArtifactId=azure-functions-archetype \
-DjavaVersion=25
このあとgroupId、artifactId、version、packageを指定しておしまい。pom.xmlを修正して、デプロイするリージョン、リソースグループ名、Function app名などを編集しておく。
あとはJavaのコードを写経していく。お手本は以下のURL。@McpToolTriggerと@McpToolPropertyの使い方がわかる。
1) 2025/11/25時点での注意事項
ドキュメントでは、@McpToolPropertyの必須 or オプションのプロパティ名がrequiredになっているが、実際にはC#と同じく、isRequiredなので注意が必要(IDEを使っていれば支援が入るので間違える要素はないはず、知らんけど)。
注釈 / Annotations
https://learn.microsoft.com/azure/azure-functions/functions-bindings-mcp-trigger?tabs=attribute&pivots=programming-language-java#annotations
2) Webhookの認証レベル
キーを使った認証を使うか否か、で判断する。
| キーを使う | キーを使わない |
|---|---|
| System | Anonymous |
今回はEntra ID認証を必須にしているので、Anonymousにしている。Entra ID認証を使う場合、EasyAuthを構成する必要がある。このあたりはチュートリアルに記載がある(ただ、網羅的に記載されていないのでちょっとわかりづらいのは確か)。
チュートリアル: Azure Functions で MCP サーバーをホストする / Tutorial: Host an MCP server on Azure Functions
https://learn.microsoft.com/azure/azure-functions/functions-mcp-tutorial?tabs=mcp-extension&pivots=programming-language-java
このチュートリアルではVisual Studio CodeからMCP Serverを呼び出すように構成しており、Client IDも提示されているが、他のMicrosoftアプリケーションを使いたい場合、Client IDを調べるには以下のURLが役に立つ。
一般的に使用される Microsoft のファーストパーティ サービスとポータル アプリ / Commonly used Microsoft first-party services and portal apps
https://learn.microsoft.com/power-platform/admin/apps-to-allow
これらの注意点を踏まえると、Functionの定義などは以下のよう。
public class Function {
@FunctionName("SaveSnippets")
@StorageAccount("AzureWebJobsStorage")
public String saveSnippet(
@McpToolTrigger(
name = "req",
description = "テキストのスニペットを保存します。"
)
String mcpToolInvocationContext,
@McpToolProperty(
name = "snippetName",
propertyType = "string",
description = "スニペットの名前",
isRequired = true
)
String snippetName,
@McpToolProperty(
name="snippet",
propertyType = "string",
description = "スニペットの本体",
isRequired = true
)
String snippet,
@BlobOutput(
name = "outputBlob",
path = "snippets/{mcptoolargs.snippetName}.json"
)
OutputBinding<String> outputBlob,
final ExecutionContext context )
{
......
}
}
できあがったら、
mvn clean package azure-functions:deploy
を実行してAzureにデプロイすればOK。これでおしまい。
VS Codeからの接続
Ctrl+Shift+Pを押してMCPと入力したら、MCP: Add Server…が選択できるはず。

HTTPで通信するremote MCP serverを追加したいので、HTTPを選択。

指定するURLは、以下のフォーマットに従う。
https://{Function App Name}.azurewebsites.net/runtime/webhooks/mcp

あとは名前を入れる。デフォルトで適当な名前を入れてくるが、もちろん変更可能。

このあと、認証を必要とするMCP Serverであれば認証が走る。以下はEntra IDの認証を求められている例。

これで実際に使うまでの準備が整った。
MCP Serverを試す
GitHub CopilotをAgentモードで使うのと同じお作法。MCP Serverを指定すると以下のような感じ。

もちろんMCP Serverを指定しなくてもよい。
