次の方法で共有


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

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

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

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

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

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

カスタム ハンドラー

セルフホステッド MCP サーバーは、custom ハンドラーとして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へのパスはプロジェクト ルートではなく、bin/outputディレクトリを基準にしています。

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

configuration Profilemcp-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 サーバーのホストを構成する」を参照してください。

Microsoft Foundry エージェントの統合

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

Azure API センターにサーバーを登録する

Azure API センターで 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カスタム ハンドラー