Azure FunctionsのMCP triggerを試す

このエントリは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

このあとgroupIdartifactIdversionpackageを指定しておしまい。pom.xmlを修正して、デプロイするリージョン、リソースグループ名、Function app名などを編集しておく。

あとはJavaのコードを写経していく。お手本は以下のURL。@McpToolTrigger@McpToolPropertyの使い方がわかる。

例 / Examples
https://learn.microsoft.com/azure/azure-functions/functions-bindings-mcp-trigger?tabs=attribute&pivots=programming-language-java#example

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の認証レベル

キーを使った認証を使うか否か、で判断する。

キーを使うキーを使わない
SystemAnonymous

今回は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を指定しなくてもよい。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください