次の方法で共有


Azure Functions 上のセルフホステッド リモート MCP サーバー (パブリック プレビュー)

Azure Functions には、リモート MCP サーバーをホストする 2 つの方法が用意されています。

最初のアプローチでは、トリガーとバインドを使用して Azure Functions プログラミング モデルを使用して、MCP サーバーを構築できます。 その後、関数アプリにサーバーをデプロイすることで、サーバーをリモートでホストできます。

公式の MCP SDK を使用して作成された MCP サーバーが既にあり、リモートでホストするだけの場合は、2 番目のアプローチがニーズに適している可能性があります。 Azure Functions でホストするために、サーバーにコードを変更する必要はありません。 代わりに、必要な Functions 成果物を追加して、サーバーをデプロイする準備が整います。 そのため、これらのサーバーは セルフホステッド MCP サーバーと呼ばれます。

関数アプリとカスタム ハンドラー アプリのホストを示す図。

この記事では、セルフホステッド MCP サーバーの概要と、関連する記事とサンプルへのリンクを示します。

カスタム ハンドラー

セルフホステッド MCP サーバーは、 カスタム ハンドラーとして Azure Functions プラットフォームにデプロイされます。 カスタム ハンドラーは、Functions ホストからイベントを受信する軽量の Web サーバーです。 これらは、Functions プログラミング モデルとは異なるフレームワークで構築された Functions プラットフォーム アプリケーション、またはすぐにサポートされていない言語で実行する方法を提供します。 詳細については、「Azure Functions のカスタム ハンドラー」を参照してください。

MCP SDK ベースのサーバーを Azure Functions にデプロイする場合は、プロジェクトに host.json を含める必要があります。 最小 host.json は次のようになります。

{
   "version": "2.0",
    "configurationProfile": "mcp-custom-handler",
    "customHandler": {
        "description": {
            "defaultExecutablePath": "python",
            "arguments": ["Path to main script file, e.g. hello_world.py"] 
        },
        "port": "<MCP server port>"
    }
}
{
   "version": "2.0",
    "configurationProfile": "mcp-custom-handler",
    "customHandler": {
        "description": {
            "defaultExecutablePath": "npm",
            "arguments": ["run", "start"] 
        },
        "port": "<MCP server port>"
    }
}
{
   "version": "2.0",
    "configurationProfile": "mcp-custom-handler",
    "customHandler": {
        "description": {
            "defaultExecutablePath": "dotnet",
            "arguments": ["Path to the compiled DLL, e.g. HelloWorld.dll"] 
        },
        "port": "<MCP server port>"
    }
}

Azure Functions にデプロイされるペイロードは bin/output ディレクトリの内容であるため、コンパイル済み DLL へのパスは、プロジェクト ルート ではなく 、そのディレクトリに対して相対的です。

例はまだ使用できません。

configuration Profile値の mcp-custom-handler を使用すると、Azure Functions で MCP サーバーを実行するために必要な Functions ホスト設定が自動的に構成されます。

  • http.enableProxying から true まで
  • http.routes から [{ "route": "{*route}" }] まで
  • extensions.http.routePrefix から "" まで

この例では、 mcp-custom-handler プロファイルの使用と同等の追加のカスタム ハンドラー プロパティが設定された host.json ファイルを示します。

{
    "version": "2.0",
    "extensions": {
        "http": {
            "routePrefix": ""
        }
    },
    "customHandler": {
        "description": {
            "defaultExecutablePath": "",
            "arguments": [""]
        },
        "http": {
            "enableProxying": true, 
            "defaultAuthorizationLevel": "anonymous", 
            "routes": [ 
                {
                    "route": "{*route}",
                    // Default authorization level is `defaultAuthorizationLevel`
                },
                {
                    "route": "admin/{*route}",
                    "authorizationLevel": "admin"
                }
            ]
        }
    }
}

次の表では、 customHandler.httpのプロパティと既定値について説明します。

プロパティ その機能 既定値
enableProxying Azure Functions ホストがカスタム ハンドラーへの HTTP 要求を処理する方法を制御します。 enableProxyingtrue に設定されている場合、Functions ホストはリバース プロキシとして機能し、HTTP 要求全体 (ヘッダー、本文、クエリ パラメーターを含む) をカスタム ハンドラーに直接転送します。 この設定により、カスタム ハンドラーは元の HTTP 要求の詳細に完全にアクセスできます。

enableProxyingfalseされると、Functions ホストは最初に要求を処理し、それを Azure Functions の要求/応答形式に変換してから、カスタム ハンドラーに渡します。
false
defaultAuthorizationLevel カスタム ハンドラー エンドポイントにアクセスするための認証要件を制御します。 たとえば、 function アクセスするには関数固有の API キーが必要です。 詳細については、 権限レベルを参照してください。 function
route カスタム ハンドラーが応答する URL パス パターンを指定します。 {*route} は、任意の URL パス ( //mcp/api/tools/anything/nested/pathなど) に一致し、要求をカスタム ハンドラーに転送します。 {*route}

組み込みのサーバー認証

App Service プラットフォームによって提供される OAuth ベースの認証と承認は、401 チャレンジの発行や保護されたリソース メタデータ (PRM) ドキュメントの公開など、 MCP 承認仕様の要件を実装します。 組み込み認証を有効にすると、サーバーにアクセスしようとしているクライアントは、接続前に認証のために Microsoft Entra ID などの ID プロバイダーにリダイレクトされます。

詳細については、「Azure Functions で組み込みのサーバー承認 (プレビュー)ホスティング MCP サーバーを構成する」を参照してください。

Azure AI Foundry エージェントの統合

Azure AI Foundry のエージェントは、Azure Functions でホストされている MCP サーバーの ツールを使用するように構成 できます。

Azure API Center にサーバーを登録する

Azure API Center で MCP サーバーを登録すると、プライベート組織ツール カタログが作成されます。 このアプローチは、一貫したガバナンスと検出可能性を持つ MCP サーバーを組織全体で共有する場合に推奨されます。 詳細については、「 Azure API Center の Azure Functions でホストされている MCP サーバーを登録する」を参照してください。

パブリック プレビューのサポート

Functions で独自の SDK ベースの MCP サーバーをホストする機能は現在プレビュー段階であり、次の機能をサポートしています。

  • streamable-http トランスポートを使用するステートレス サーバー。 サーバーをステートフルにする必要がある場合は、Functions MCP 拡張機能の使用を検討してください。
  • Python、TypeScript、C#、または Java MCP SDK を使用して実装されたサーバー。
  • プロジェクトをローカルで実行する場合は、Azure Functions Core Tools (func start コマンド) を使用する必要があります。 現在、 F5 を使用してデバッガーでの実行を開始することはできません。
  • サーバーは Flex 従量課金プラン アプリとしてホストされている必要があります。

Samples

まだ使用できません。

Azure Functions カスタム ハンドラー