共用方式為


自托管遠端 MCP 伺服器在 Azure Functions 上(公開預覽)

Azure Functions 提供兩種遠端 MCP 伺服器的主機方式:

採用第一種方法,你可以利用 Azure Functions 的程式設計模型,搭配觸發器和綁定來建立 MCP 伺服器。 接著,你可以遠端將伺服器部署到函式應用程式中。

如果你已經用官方 MCP SDK 建立了 MCP 伺服器,只是想遠端架設,第二種方式可能更適合你的需求。 你不需要對伺服器做任何程式碼修改就能在 Azure Functions 上架設。 相反地,你可以加入所需的函式工件,伺服器就準備好部署了。 因此,這些伺服器被稱為 自架 MCP 伺服器

功能應用程式及自訂處理常式應用程式的託管圖示。

本文提供自架 MCP 伺服器的概述,並連結至相關文章與範例。

自訂處理常式

自行託管的 MCP 伺服器以自訂處理常式的方式部署至 Azure Functions 平台。 自訂處理常式是輕量網頁伺服器,其會從 Functions 主機接收事件。 它們提供一種在 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 的路徑是相對於該目錄, 而非 專案根目錄。

範例尚未提供。

使用 mcp-custom-handlerconfiguration Profile 值可自動設定這些函式主機設定,這是在 Azure Functions 中執行 MCP 伺服器的必要設定:

  • http.enableProxyingtrue
  • http.routes[{ "route": "{*route}" }]
  • extensions.http.routePrefix""

此範例展示了 host.json 檔案,並設定了與使用 mcp-custom-handler 設定檔相當的額外自訂處理常式屬性:

{
    "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 要求。 當 enableProxying 設為 true時,函式主機作為反向代理,直接將整個 HTTP 請求(包括標頭、主體、查詢參數)轉發給自訂處理器。 此設定賦予自訂處理器對原始 HTTP 請求細節的完整存取權。

enableProxying 符合 false 時,函式主機會先處理請求,並將其轉換成 Azure 函式的請求/回應格式,然後再傳給自訂處理器。
false
defaultAuthorizationLevel 控制存取自訂處理器端點的驗證需求。 例如,需要 function 特定函式的 API 金鑰才能存取。 欲了解更多資訊,請參閱 授權等級 function
route 指定自訂處理常式回應的 URL 路徑模式。 {*route} 匹配任意 URL 路徑(例如 //mcp/api/tools/anything/nested/path),並將請求轉發給自訂處理器。 {*route}

內建伺服器認證

由 App Service 平台提供的基於 OAuth 的認證與授權,實作了 MCP 授權規範的要求,例如發出 401 挑戰並公開受保護資源中繼資料(PRM)文件。 啟用內建認證後,嘗試存取伺服器的用戶端會在連線前被導向像 Microsoft Entra 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 來啟動除錯器。
  • 伺服器必須以 彈性消費方案 應用程式形式架設。

Samples

尚未提供。

Azure Functions custom handlers