Model context protocol bindings for Azure Functionsとは?変更点と設定確認ポイント

Azure FunctionsでAIエージェント連携を進めるなら、Model context protocol bindings for Azure Functionsは「既存の関数をMCPクライアントから使えるツール、リソース、プロンプトとして公開する仕組み」と理解すると分かりやすいです。従来のHTTP API公開とは違い、GitHub CopilotやAIエージェント側が関数の説明、引数、リソース、プロンプトを発見し、必要に応じて呼び出せるようになります。

重要なのは、すべてのAzure Functionsアプリが自動的にAIエージェントへ公開されるわけではないことです。MCP用のトリガーや設定を追加した関数だけが対象になります。管理者は認証、システムキー、host.json、ストレージ権限、トランスポート方式を確認し、開発者は対応言語、パッケージバージョン、引数定義、公開するツール名・説明の設計を見直す必要があります。

なお、Microsoft Learnの概要ページ「Model context protocol bindings for Azure Functions」は2026-04-01更新として表示されています。一方、関連ページである「MCP prompt trigger for Azure Functions」は2026-05-23更新で、ページ上ではpublic previewとして扱われています。この記事では、これらの公式情報をもとに、Azure FunctionsでMCPバインドを使う際の変更点、影響範囲、実装・移行・展開時の確認ポイントを整理します。(Microsoft Learn)

目次

Model context protocol bindings for Azure Functionsとは

Model Context Protocol、略してMCPは、言語モデルやAIエージェントが外部のデータソースやツールを見つけ、利用しやすくするためのクライアント・サーバープロトコルです。Azure FunctionsのMCP拡張を使うと、Function AppをリモートMCPサーバーとして動かし、AIエージェントから呼び出せる機能をAzure Functions上に実装できます。(Microsoft Learn)

Azure FunctionsのMCPバインドで扱う主な種類は、次の3つです。

種類できること実務での使いどころ
Tool triggerMCPクライアントからのツール呼び出しで関数を実行する顧客情報の検索、社内FAQ検索、コードスニペット保存、業務APIの呼び出し
Resource triggerMCPリソースとして情報やUIを公開するAPI仕様書、DBスキーマ、README、HTML UI、MCP Apps用リソース
Prompt triggerMCPプロンプトとして定型指示や構造化メッセージを公開するコードレビュー指示、要約テンプレート、ドキュメント生成プロンプト

ポイントは、MCPバインドが「AIに何でも自由に実行させる機能」ではなく、開発者が明示的に公開した関数・リソース・プロンプトだけをMCPクライアントへ見せる仕組みである点です。公開する名前、説明、引数、戻り値の設計が、そのままAIエージェントの使いやすさと安全性に影響します。

何が変わるのか:Azure FunctionsがMCPサーバーとして振る舞える

今回押さえるべき変化は、Azure Functionsが単なるイベント駆動のサーバーレス実行基盤にとどまらず、AIエージェント向けのリモートMCPサーバーとして使えるようになる点です。

従来、Azure Functionsを外部から使う場合は、HTTPトリガーでAPIを作り、呼び出し側がURL、認証、リクエスト形式を個別に理解する必要がありました。MCPバインドでは、ツール名、説明、引数スキーマ、リソースURI、プロンプト引数などをMCPの形で公開できます。AIエージェント側は、tools/listresources/listprompts/listのようなMCPの発見メカニズムを通じて、利用可能な機能を認識します。Tool triggerではツール呼び出しの情報をToolInvocationContextとして扱い、Resource triggerではリソースURIやセッション情報、Prompt triggerではプロンプト名・引数・セッション情報などを受け取れます。(Microsoft Learn)

HTTP APIとの違い

MCPバインドをHTTP APIの単なる置き換えと見ると、設計を誤りやすくなります。違いは次のように整理できます。

観点一般的なHTTP APIMCPバインド
主な利用者アプリケーション、フロントエンド、外部システムAIエージェント、MCPクライアント
公開単位URLとHTTPメソッドツール、リソース、プロンプト
説明の重要度API仕様書で補足することが多いツール名・説明・引数説明が実行判断に直結する
失敗しやすい点ステータスコード、認証、リクエスト形式あいまいなツール説明、過剰な権限、必須引数の未定義
セキュリティ設計API認証・認可中心MCPサーバー認可、Functionsキー、App Service Authentication、下流リソース権限まで含めて設計

MCPでは、AIエージェントが説明文を読んでツールを選択します。そのため、get_dataのような曖昧な名前ではなく、get_customer_order_statusのように、対象・操作・戻り値の意図が分かる名前にすることが重要です。

2026-05-23更新情報で特に見るべきポイント

2026-05-23更新の関連公式情報で注目したいのは、MCP prompt triggerです。Prompt triggerは、MCPサーバーにプロンプトエンドポイントを定義するための機能で、クライアントは構造化されたメッセージや指示を生成するために利用できます。プロンプトはユーザーが選択して使うものとして公開され、prompts/listで発見され、prompts/getで呼び出されます。(Microsoft Learn)

Tool、Resource、Promptの役割が分かれた

MCPバインドでは、AIエージェントが「実行するもの」「参照するもの」「指示として使うもの」を分けて設計できます。

目的使うトリガー具体例
何かを実行したいTool triggerチケット作成、Blobへの保存、社内API検索
文脈情報を渡したいResource triggerAPIドキュメント、DBスキーマ、README、画面UI
定型の指示を使わせたいPrompt triggerコードレビュー手順、要約フォーマット、障害調査テンプレート

この分離は実務上かなり重要です。たとえば「障害調査エージェント」を作る場合、ログ検索はTool、運用手順書はResource、一次切り分けの質問テンプレートはPromptとして分けると、権限管理と保守がしやすくなります。

Prompt triggerはpublic previewとして扱う

MCP prompt triggerの公式ページはpublic preview表記です。したがって、本番利用を検討する場合は、対象言語、拡張バンドル、パッケージ、クライアント側の対応状況を必ず確認してください。特にPythonのPrompt triggerでは、公式情報上、preview extension bundleとazure-functions 2.2.0b2以上が必要とされています。(Microsoft Learn)

プレビュー機能を業務システムに入れる場合は、次のような判断基準を置くと安全です。

判断項目本番前に確認すべきこと
仕様変更の影響ツール名、引数名、戻り値形式が変わった場合にクライアント側を更新できるか
障害時の代替手段MCP経由で使えない場合に、従来のAPIや手動運用に戻せるか
監査誰が、いつ、どのツールやプロンプトを使ったか追跡できるか
データ保護プロンプトやツール結果に秘密情報や個人情報を含めない設計になっているか
クライアント依存GitHub Copilot、独自MCPクライアントなど、利用側の仕様変更に追随できるか

影響を受ける対象者

Model context protocol bindings for Azure Functionsの影響は、開発者だけに閉じません。AIエージェントから業務機能を呼び出せるようになるため、運用、セキュリティ、権限管理、監査にも関係します。

対象者主な影響確認すべきこと
Azure Functions開発者関数をMCPツール、リソース、プロンプトとして公開できる対応言語、パッケージ、引数定義、戻り値、例外処理
Azure管理者Function AppがMCPサーバーとして外部クライアントから使われるhost.json、システムキー、App Service Authentication、ストレージ権限
セキュリティ担当者AIエージェント経由の操作経路が増える認可範囲、下流リソース権限、監査ログ、秘密情報の扱い
プラットフォームエンジニアCI/CDや環境差分の管理対象が増える拡張バンドル、アプリ設定、デプロイスロット、ロールバック手順
AI活用推進担当者業務機能をエージェント化しやすくなるどの業務をツール化するか、誤実行時の影響、利用者教育

特に注意したいのは、MCPツールが「便利な自動化口」になる一方で、権限設計を誤ると、AIエージェント経由で本来想定していない操作ができてしまう可能性があることです。検索系や参照系から始め、更新・削除・外部送信を伴うツールは段階的に公開するのが現実的です。

管理者が確認すべきAzure Functions設定

MCPバインドを有効にする場合、管理者はまずhost.jsonと認証設定を確認します。MCPサーバー情報はextensions.mcpセクションで定義し、serverNameserverVersioninstructionsencryptClientStatemessageOptionssystem.webhookAuthorizationLevelなどを指定できます。encryptClientStateは既定でtrueであり、デバッグやテスト目的でfalseにすることは可能ですが、本番では推奨されません。(Microsoft Learn)

{
  "version": "2.0",
  "extensions": {
    "mcp": {
      "instructions": "社内ナレッジ検索と運用補助に使うMCPサーバーです。",
      "serverName": "InternalOpsMcpServer",
      "serverVersion": "1.0.0",
      "encryptClientState": true,
      "messageOptions": {
        "useAbsoluteUriForEndpoint": true
      },
      "system": {
        "webhookAuthorizationLevel": "System"
      }
    }
  }
}

確認すべきhost.json項目

設定確認ポイント実務上の注意
instructionsMCPクライアントにサーバーの用途を説明できているか「何に使ってよいか」「使ってはいけない用途」を短く明記する
serverName環境や用途が分かる名前かdev、stg、prodを混同しない命名にする
serverVersionツール仕様の変更を追跡できるか引数や戻り値を変える場合は更新する
encryptClientState本番でtrueになっているかfalseはデバッグ用途に限定する
messageOptions.useAbsoluteUriForEndpointSSE利用時のエンドポイントURIをどう返すか特別な理由がなければ相対URIに依存しない
system.webhookAuthorizationLevelSystemAnonymousAnonymousにする場合は、別途IDベースの認可を必ず設計する

接続エンドポイントとトランスポートの確認

Azure Functions MCP拡張では、Streamable HTTPとSSEの2種類の接続エンドポイントが示されています。公式情報では、より新しいプロトコルバージョンではSSEが非推奨とされるため、クライアントが特にSSEを必要としない限り、Streamable HTTPを使うよう案内されています。(Microsoft Learn)

トランスポートエンドポイント判断基準
Streamable HTTP/runtime/webhooks/mcp新規構築では基本的にこちらを優先
Server-Sent Events/runtime/webhooks/mcp/sse既存クライアントがSSEしか対応していない場合に検討

SSEを使う場合は、MCP拡張が既定のホストストレージアカウントであるAzureWebJobsStorageのAzure Queue Storageに依存します。IDベース接続を使う場合、Function Appには少なくともStorage Queue Data ContributorとStorage Queue Data Message Processorに相当する権限が必要です。(Microsoft Learn)

新規構築では、まずStreamable HTTPで動作検証し、SSEは互換性要件がある場合だけ採用するのが安全です。

認証と認可で注意すべき点

Azure上でFunction Appをホストする場合、MCP拡張の公開エンドポイントには既定でmcp_extensionという名前のシステムキーが必要です。キーをx-functions-keyヘッダーまたはcodeクエリパラメーターで渡さないと、クライアントは401 Unauthorizedを受け取ります。system.webhookAuthorizationLevelAnonymousに設定するとキー要件を外せますが、その場合でもIDベースのアクセス制御を別途設計する必要があります。(Microsoft Learn)

システムキーはAzure CLIで取得できます。

az functionapp keys list \
  --resource-group <RESOURCE_GROUP> \
  --name <APP_NAME> \
  --query systemKeys.mcp_extension \
  --output tsv

ただし、キーを.vscode/mcp.jsonなどに直接書き込んでリポジトリへコミットするのは避けるべきです。公式例でも、Visual Studio Codeの入力パラメーターを使い、初回実行時にキーを入力させる構成が示されています。(Microsoft Learn)

App Service Authenticationを使う場合の注意

組み込みMCPサーバー認可は、App Service Authenticationを使ってMCPクライアントにIDプロバイダーでの認証を要求する仕組みです。ただし、公式情報ではPreviewとして扱われています。また、MCPサーバー認可はサーバーへのアクセスを制御するものであり、個々のMCPツール単位できめ細かく制御するものではないと説明されています。(Microsoft Learn)

本番設計では、次の点を確認してください。

確認項目内容
IDプロバイダーMicrosoft Entra IDなど、MCPサーバー専用のアプリ登録を用意する
PRM設定必要に応じてWEBSITE_AUTH_PRM_DEFAULT_WITH_SCOPESにスコープを設定する
クライアント登録MCPクライアントがIDプロバイダーに登録されているか確認する
事前承認GitHub Copilot in Visual Studio Codeなど、対話的な同意画面を出しにくいクライアントでは事前承認を検討する
下流リソースMCPサーバー認可トークンを下流APIへそのまま転送しない

特に最後の点は重要です。MCPサーバーへのアクセスを表すトークンを、下流リソースへのアクセスに使い回す設計は避けるべきです。下流リソースにアクセスする場合は、On-Behalf-Ofフローなど、明示的な委任の仕組みを使う設計が必要です。(Microsoft Learn)

開発者が確認すべき対応言語とパッケージ

Azure Functions MCP拡張は、言語ごとに必要なパッケージや制約が異なります。公式概要では、ローカル実行にAzure Functions Core Tools 4.0.7030以降が必要で、C#ではisolated worker modelのみがサポート対象とされています。また、PowerShellアプリは現時点でMCP拡張をサポートしておらず、Goもこの機能では現在サポートされていません。(Microsoft Learn)

言語・環境主な確認点
C#isolated worker modelを使う。Microsoft.Azure.Functions.Worker 2.1.0以降、Microsoft.Azure.Functions.Worker.Sdk 2.0.2以降を確認
Javaazure-functions-java-library 3.2.2以降、azure-functions-maven-plugin 1.40.0以降を確認
JavaScript / TypeScript@azure/functions 4.9.0以降を確認。Resource triggerなど一部機能ではより新しいバージョン要件があるため個別確認が必要
Pythonazure-functions 1.24.0以降を確認。Prompt triggerやResource triggerでは追加要件がある場合がある
PowerShell現時点ではMCP拡張の対象外
Go現時点ではこの機能の対象外

既存のAzure FunctionsアプリへMCPバインドを追加する場合は、まず「対象言語がサポートされているか」「現在のランタイムやパッケージを上げても既存関数に影響がないか」を確認してください。特に複数の関数を1つのFunction Appにまとめている場合、MCP拡張のための依存関係更新が他の関数に影響しないかを検証環境で確認する必要があります。

Tool triggerを実装するときの実務ポイント

MCP tool triggerは、MCPサーバー内にツールエンドポイントを定義するためのトリガーです。クライアントの言語モデルやエージェントは、これらのツールを使って、コードスニペットの保存や取得のような特定タスクを実行できます。(Microsoft Learn)

実装時に最も重要なのは、ツール名、説明、引数定義です。

[Function(nameof(GetOrderStatus))]
public string GetOrderStatus(
    [McpToolTrigger("get_order_status", "注文番号から注文ステータスを取得します。")]
    ToolInvocationContext context,
    [McpToolProperty("orderId", "検索対象の注文番号です。", isRequired: true)]
    string orderId)
{
    // 注文ステータスを取得する処理
    return "Shipped";
}

ツール設計で失敗しやすい点

失敗例問題改善例
run_taskのような曖昧なツール名AIエージェントが用途を判断しにくいcreate_support_ticketのように操作を明確にする
説明が短すぎる誤った場面で呼び出される「問い合わせ内容からサポートチケットを作成する。削除や更新は行わない」と明記
必須引数を指定していない実行時に不足し、失敗しやすい動作に必要な引数は明示的にrequiredにする
戻り値が人間向けの長文だけ後続処理で使いにくいJSONなど、機械的に扱いやすい形式を検討
更新系ツールを広く公開誤実行時の影響が大きい参照系から始め、更新系は承認フローや権限を分ける

Tool propertyは、クライアントが引数を収集・渡すための手がかりになります。現在の公式情報では、ツールプロパティはデフォルトでは任意であり、ツールが動作するために必須のものだけ明示的にrequiredとして指定します。以前のプレビューではすべて必須扱いだったため、古い実装から移行する場合は挙動差に注意が必要です。(Microsoft Learn)

Resource triggerを使うべき場面

MCP resource triggerは、MCPサーバー内でリソースエンドポイントを定義するためのトリガーです。クライアントは、ファイル内容、DBスキーマ、APIドキュメントなど、モデルが文脈として利用する情報へアクセスできます。Resource triggerでは、リソースURI、リソース名、説明、MIMEタイプ、メタデータなどを定義できます。(Microsoft Learn)

Resource triggerが向いているのは、次のようなケースです。

利用シーン
AIに参照させたい固定情報があるコーディング規約、運用手順書、API仕様
ツール実行前に文脈を与えたいDBスキーマ、エンドポイント仕様、サービス構成図のテキスト化
MCP AppsでUIを返したいHTMLベースのウィジェット、操作画面、結果表示コンポーネント
ツールとは別に読み取り専用情報を提供したいREADME、ヘルプ、利用ポリシー

注意点は、Resourceは「実行」ではなく「参照」を目的にすることです。たとえば、社内ナレッジ検索を行う関数はTool、検索対象の利用ガイドやAPI仕様はResourceとして分けると、設計が整理されます。

また、Resource URIはクライアントがリソースを要求するための識別子です。ui://weather/index.htmlのようなUIリソースや、file://readme.mdのようなファイルベースリソースなど、用途に応じたURIスキームを使えます。(Microsoft Learn)

Prompt triggerを使うべき場面

MCP prompt triggerは、AIエージェントに使わせたい定型プロンプトをサーバー側で管理するための機能です。コードレビュー、要約、ドキュメント生成、障害調査など、組織で標準化したい指示をPromptとして公開できます。

たとえば、次のようなプロンプトはPrompt trigger向きです。

プロンプト目的
コードレビュー用チェックリストセキュリティ、エラー処理、テスト、可読性を一定基準で確認させる
障害一次切り分けログ、影響範囲、直近変更、暫定対応を順番に確認させる
APIドキュメント生成関数名、引数、戻り値、利用例を決まった形式で出力させる
経営層向け要約技術的な内容を意思決定向けに短く整理させる

Prompt triggerでは、引数を定義できます。たとえば、topicを必須、audienceを任意にして、同じ要約プロンプトを開発者向け・初心者向け・管理職向けに使い分けられます。Prompt argumentもデフォルトでは任意であり、必須にしたいものだけ明示的に指定します。(Microsoft Learn)

実務では、Promptをコード内に埋め込むだけでなく、バージョン管理、レビュー、承認フローの対象にすることが重要です。プロンプトはAIエージェントの振る舞いを左右するため、アプリケーションロジックの一部として扱うべきです。

移行時に確認すべきポイント

既存のAzure FunctionsアプリへMCPバインドを追加する場合は、いきなり本番Function Appへ組み込むのではなく、影響範囲を切り分けて進めます。

移行前チェックリスト

チェック項目確認内容
対象関数MCPツールとして公開する関数を最小限に絞っているか
操作種別参照、作成、更新、削除のどれか。更新・削除系は追加対策があるか
言語・パッケージMCP拡張のバージョン要件を満たしているか
認証方式システムキー、App Service Authentication、Entra IDの使い分けが決まっているか
ストレージ権限SSE利用時にAzureWebJobsStorageとQueue権限を確認しているか
クライアント使用するMCPクライアントがStreamable HTTPや認証方式に対応しているか
ログツール名、実行者、入力、結果、エラーを追跡できるか
ロールバックツール名や引数変更時に古いクライアントへ戻せるか

既存APIをMCP化する際の判断基準

すべてのAPIをMCPツールにする必要はありません。次の基準で選別すると失敗しにくくなります。

MCP化に向いているMCP化に慎重になるべき
読み取り中心の検索・取得処理金銭処理、削除、外部送信
入力と出力が明確多段階の人間判断が必要
説明文だけで用途を誤解しにくいツール名や引数が曖昧になりやすい
失敗しても復旧しやすい誤実行の影響が大きい
監査ログを取りやすい利用者や目的を追跡しにくい

最初は、社内文書検索、ステータス確認、読み取り専用APIなどから始めるのがおすすめです。業務更新を伴うツールは、利用者認可、承認ステップ、入力バリデーション、実行ログを整えてから展開してください。

展開時の注意点

Azure FunctionsのMCPバインドは、AIエージェントから使われる入口を増やします。そのため、通常のFunction App展開に加えて、MCPクライアントから見た互換性を意識する必要があります。

デプロイ前に確認すること

項目確認内容
serverVersionツール名、引数、戻り値を変えた場合に更新しているか
ツール名既存クライアントが参照している名前を不用意に変えていないか
必須引数新しい必須引数を追加して既存クライアントを壊さないか
説明文AIエージェントが誤って呼び出さない説明になっているか
認証ローカル、検証、本番でキーやID設定が混ざっていないか
シークレットmcp.jsonやリポジトリにキーを保存していないか
監視Application Insightsなどで呼び出し状況を確認できるか
費用エージェント経由の連続呼び出しで想定外の実行回数にならないか

よくあるトラブルと対処

症状主な原因対処
MCPクライアントが401になるmcp_extensionシステムキー未指定、または認証設定の不一致x-functions-keyまたはIDベース認証の設定を確認
tools/listで期待したツールが出ないTrigger定義、パッケージ、デプロイ内容の不一致Function Appの起動ログ、MCP拡張、ツール名を確認
ローカルでは動くがAzureで失敗するストレージ、アプリ設定、権限、キーの差分AzureWebJobsStorage、RBAC、App Settingsを確認
AIが意図しないツールを選ぶツール名や説明が曖昧名前を具体化し、説明に利用条件を明記
引数不足で失敗する必須引数をrequiredにしていない必須プロパティ・必須引数を明示
SSE接続が不安定クライアント互換性やストレージ権限の問題可能ならStreamable HTTPへ移行し、SSE利用時はQueue権限を確認

セキュリティ設計で外せない考え方

MCPバインドの導入で最も避けたいのは、「AIエージェント用だから」と通常のAPIより緩い権限で公開してしまうことです。むしろ、AIエージェントは人間より高速にツールを連続実行できるため、権限と監査はより慎重に設計する必要があります。

実務では、次の原則を置くと安全です。

  • 参照系ツールと更新系ツールを分ける
  • 本番データに触れるツールは最小権限にする
  • ツール説明に「できること」と「できないこと」を明記する
  • ユーザー入力をそのままSQL、コマンド、外部APIに渡さない
  • 秘密情報、個人情報、アクセストークンを戻り値に含めない
  • MCPサーバー認可と下流リソース認可を分けて考える
  • 実行ログを残し、後から利用者・入力・結果を確認できるようにする

特に、MCPサーバーへの認可トークンを下流リソースへそのまま転送しないことは重要です。下流APIやデータベースへアクセスする場合は、MCPサーバー側で適切な委任フローやマネージドID、アプリケーション権限を設計してください。(Microsoft Learn)

導入を進める実践ステップ

Model context protocol bindings for Azure Functionsを試すなら、次の順序で進めると安全です。

ステップ作業内容
1参照系の小さなユースケースを1つ選ぶ
2対応言語、Core Tools、パッケージ、拡張バンドルを確認する
3Tool triggerで最小構成のMCPツールを作る
4Streamable HTTPでローカル接続を確認する
5host.jsonにMCPサーバー情報と認可設定を入れる
6検証環境へ展開し、tools/listや実行ログを確認する
7認証方式、システムキー、App Service Authenticationを整理する
8監査ログ、失敗時の挙動、コストを確認してから本番展開する

Prompt triggerやResource triggerは、Tool triggerで基本的な接続と認証を確認した後に追加すると整理しやすくなります。特にPrompt triggerはpublic previewであるため、業務クリティカルな用途では仕様変更に備えた運用ルールを決めておきましょう。

まず何を確認すべきか

Azure FunctionsのModel context protocol bindings for Azure Functionsは、AIエージェントと業務システムをつなぐ実用的な選択肢です。ただし、導入の本質は「関数をAIから呼べるようにすること」ではなく、AIに安全に使わせる操作境界を設計することにあります。

まずは次の3点から確認してください。

  • MCP化する関数は、参照系・低リスク・説明しやすいものに絞る
  • host.json、認証、システムキー、ストレージ権限を検証環境で確認する
  • ツール名、説明、必須引数、戻り値をAIエージェントが誤解しにくい形に整える

この3点を押さえれば、Azure FunctionsをリモートMCPサーバーとして活用しながら、AIエージェント連携のリスクを抑えた展開がしやすくなります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次