mcpField
G
Getting Started with Remote MCP Servers using Azure Functions (Python)

Getting Started with Remote MCP Servers using Azure Functions (Python)

ローカル
github.com/raoruganクラウド・インフラ380 週間前に更新

Getting Started with Remote MCP Servers using Azure Functions (Python) について

Azure Functions を使ってリモート MCP サーバーを構築・デプロイする Python のクイックスタートテンプレートです。旅行関連ツールを含み、ローカルとクラウドでの設定に加え、HTTPS とキー認証、OAuth やネットワーク分離の選択肢を紹介します。

主な機能

  1. 01Python でリモート MCP サーバーを構築
  2. 02Azure Functions でローカル実行
  3. 03Azure Container Apps へデプロイ
  4. 04観光スポットとレビューの機能を公開
  5. 05キー、OAuth、ネットワーク分離の設定

活用シーン

  1. 01旅行情報 MCP サーバーの試作
  2. 02クライアントや Inspector で MCP ツールをローカル検証
  3. 03保護されたリモート MCP エンドポイントのデプロイ

MCP 対応

Azure Functions MCP 拡張機能により、注釈付き関数を SSE エンドポイント経由で MCP ツールとして公開します。クライアントはローカル環境またはデプロイ済みの Function アプリに接続し、クラウド利用時はキーを使用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"MCPonFuncOnACA": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"\\"
]
}
}
}
起動コマンドdocker run -i --rm '\'

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
oci\

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Azure Functions(Python)を使用したリモート MCP サーバーのはじめ方

これは、Azure Functions と Python を使用して、カスタムのリモート MCP サーバーをクラウド上に簡単に構築してデプロイするためのクイックスタートテンプレートです。MCP サーバーはキーと HTTPS によって設計上安全に保護されており、組み込み認証や API Management を使用した OAuth の追加オプション、さらに VNET を使用したネットワーク分離にも対応しています。

注

大規模言語モデル(LLM)は非決定的であり、不正確な情報やリアルタイムの変更が生じる可能性があることに注意する必要があります。そのため、情報を再確認し、決定を下す前に検証することをおすすめします。

前提条件

注:ここでは、旅行の詳細を呼び出して処理するために、Rapid API marketplace の Booking COM 旅行 API を使用しています。この API にはキーが必要です。そのため、キーを取得して使用するには、Booking COM API に登録する必要があります。

ローカル環境を準備する

このサンプルでは、Blob Storage からスニペットを保存および取得するため、Azure Storage エミュレーターが必要です。

  1. Azurite を起動します

    docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
        mcr.microsoft.com/azure-storage/azurite
    

注 VS Code 拡張機能から Azurite を使用する場合は、ここで Azurite: Start を実行してください。実行しないとエラーが表示されます。

ターミナルから MCP サーバーをローカルで実行する

  1. 新しいターミナルウィンドウで src フォルダーに移動します:

    cd src
    
  2. Python の依存関係をインストールします:

    pip install -r requirements.txt
    
  3. Functions ホストをローカルで起動します:

    func start
    

注 デフォルトでは、webhooks ルート /runtime/webhooks/mcp/sse が使用されます。後ほど Azure では、クライアント/ホストからの呼び出しでキーを設定する際に、次のルートを使用します:/runtime/webhooks/mcp/sse?code=<system_key>

クライアント/ホストから MCP サーバーを使用する

VS Code - Copilot Edits
  1. コマンドパレットから MCP サーバーを追加 を選択し、実行中の Function アプリの SSE エンドポイントの URL を追加します:

    http://0.0.0.0:7071/runtime/webhooks/mcp/sse
    OR
     http://localhost:7071/runtime/webhooks/mcp/sse
    
  2. コマンドパレットから MCP サーバーを一覧表示 を選択し、サーバーを起動します

  3. Copilot のチャットでエージェントモードを選択し、ツールを呼び出すプロンプトを入力します。例:コードを選択して、次のプロンプトを入力します

    ここで選んだ場所の観光名所を教えてください
    
    <tour_name> のツアーのレビューを教えてください
    
  4. ツールの実行を求められたら、続行 をクリックして同意します

  5. 終了したら、ターミナルウィンドウで Ctrl+C を押して、Functions ホストのプロセスを停止します。

MCP Inspector
  1. 新しいターミナルウィンドウで MCP Inspector をインストールして実行します

    npx @modelcontextprotocol/inspector
    
  2. CTRL キーを押しながらクリックして、アプリに表示された URL(例:http://0.0.0.0:5173/#resources)から MCP Inspector の Web アプリを開きます

  3. トランスポートの種類を SSE に設定します

  4. 実行中の Function アプリの SSE エンドポイントの URL を設定し、接続 をクリックします:

    http://0.0.0.0:7071/runtime/webhooks/mcp/sse
    
  5. ツールを一覧表示 を選択します。ツールをクリックし、ツールを実行 を選択します。

リモート MCP 用に Azure にデプロイする

このリンクに記載されている手順に従って、Azure Functions 用の新しい MCP 拡張機能を使用し、MCP Azure Functions サーバーをホストする Azure Container Apps リソースに Azure Functions をプロビジョニングします。

または

次の azd コマンドを実行して、必要な Azure リソースとともに関数アプリをプロビジョニングし、コードをデプロイします。

azd up

さらに、MCP サーバーのセキュリティとポリシーを強化するためにAPI Managementを使用できます。また、App Service の組み込み認証を使用して、Entra を含むお好みの OAuth プロバイダーを設定できます。

クライアントから関数アプリに接続する

新しくホストされた SSE エンドポイントを呼び出すには、クライアントにキーが必要です。エンドポイントは https://<function-name>.*****-****.<location>.azurecontainerapps.io の形式です。ホストされた関数では、デフォルトでシステムキーが必要です。このキーは、Storage account-> Blob containers -> azure-webjobs-secrets->host.json -> View/edit から取得できます。mcp_extension という名前のシステムキーの値を取得してください。

MCP Inspector の場合は、URL にキーを含めることができます。

`https://<function-name>.*****-****.<location>.azurecontainerapps.io/runtime/webhooks/mcp/sse?code=<your-mcp-extension-system-key>`.

VS Code 内の GitHub Copilot の場合は、代わりに mcp.json の x-functions-key ヘッダーとしてキーを設定し、URL には https://<function-name>.*****-****.<location>.azurecontainerapps.io/runtime/webhooks/mcp/sse を使用します。次の例では入力を使用しており、VS Code からサーバーを起動するときにキーの入力を求められます。

{
    "inputs": [
        {
            "type": "promptString",
            "id": "functions-mcp-extension-system-key",
            "description": "Azure Functions MCP Extension System Key",
            "password": true
        }
    ],
    "servers": {
        "my-mcp-server": {
            "type": "sse",
            "url": "<funcappname>.azurewebsites.net/runtime/webhooks/mcp/sse",
            "headers": {
                "x-functions-key": "${input:functions-mcp-extension-system-key}"
            }
        }
    }
}

ソースコード

get_attractions および get_attractions_reviews エンドポイントの関数コードは、src ディレクトリ内の Python ファイルで定義されています。MCP 関数アノテーションにより、これらの関数が MCP サーバーのツールとして公開されます。

以下は function_app.py ファイルの実際のコードです。


@app.generic_trigger(arg_name="context", type="mcpToolTrigger", toolName="hello", 
                     description="Hello world.", 
                     toolProperties="[]")
def hello_mcp(context) -> None:
    """
    A simple function that returns a greeting message.

    Args:
        context: The trigger context (not used in this function).

    Returns:
        str: A greeting message.
    """
    return "Hello I am MCPTool!"


@app.generic_trigger(
    arg_name="context",
    type="mcpToolTrigger",
    toolName="get_attractions",
    description="Retrieve attractions at a search location.",
    toolProperties=tool_properties_get_attractions_json,
)
def get_attractions(context) -> str:
    """
    Retrieves attractions at a search location using the RapidAPI endpoint.

    Args:
        context: The trigger context containing the input arguments.

    Returns:
        str: A JSON string containing the attractions or an error message.
    """
    content = json.loads(context)
    query = content["arguments"].get("query", "").strip()
    language_code = content["arguments"].get("languagecode", "en-us").strip()

host.json ファイルには、この機能を使用するアプリに必要な、実験的なバンドルへの参照も含まれていることに注意してください。

"extensionBundle": {
  "id": "Microsoft.Azure.Functions.ExtensionBundle.Experimental",
  "version": "[4.*, 5.0.0)"
}

次のステップ

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。