模型內容通訊協定 (MCP) 是一種用戶端伺服器通訊協定,旨在讓語言模型和代理程式更有效率地探索及使用外部數據源和工具。
Azure Functions MCP 擴充功能可讓您使用 Azure Functions 來建立遠端 MCP 伺服器。 這些伺服器可以裝載 MCP 工具觸發程式函式,MCP 用戶端,例如語言模型和代理程式,可以查詢和存取以執行特定工作。
| Action | 類型 |
|---|---|
| 從 MCP 工具呼叫要求執行函式 | Trigger |
Important
MCP 延伸模組目前不支援PowerShell應用程式。
Prerequisites
- 當您使用 SSE 傳輸時,MCP 延伸模組會依賴 預設主機儲存體帳戶 ()
AzureWebJobsStorage所提供的 Azure 佇列儲存體。 使用身分識別型連線時,請確定您的函式應用程式至少在主機記憶體帳戶中具有這些角色型許可權的對等許可權:記憶體佇列數據讀取器和記憶體佇列數據訊息處理器。 - 在本機執行時,MCP 擴充功能需要 Azure Functions Core Tools 或更新版本 4.0.7030 版。
- 需要 2.1.0 版或更新版本的
Microsoft.Azure.Functions.Worker套件。 - 需要 2.0.2 版或更新版本的
Microsoft.Azure.Functions.Worker.Sdk套件。
安裝擴充功能
Note
針對 C#,Azure Functions MCP 擴充功能僅支持 隔離的背景工作模型。
藉由以您慣用的方式安裝此 NuGet 套件 ,將擴充功能新增至您的專案:
Microsoft.Azure.Functions.Worker.Extensions.Mcp
- 需要 3.2.2 版或更新版本的
azure-functions-java-library相依性。 - 需要 1.40.0 版或更新版本的
azure-functions-maven-plugin相依性。
- 需要 4.9.0 版或更新版本的
@azure/functions相依性
- 需要 1.24.0 版或更新版本的
azure-functions套件。
安裝配套
若要能夠在應用程式中使用這個繫結延伸模組,請確定專案根目錄中的 host.json 檔案包含下列 extensionBundle 參考:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.0.0, 5.0.0)"
}
}
在此範例中, version 的 [4.0.0, 5.0.0) 值指示 Functions 主機使用至少 4.0.0 但小於 5.0.0的套件版本,其中包括 4.x 的所有潛在版本。 此表示法可有效地在 v4.x 擴充功能套件組合的最新可用次要版本上維護您的應用程式。
可能的話,您應該使用最新的延伸套件組合主要版本,並允許執行階段自動維護最新的次要版本。 您可以在 延伸套件組合發行頁面上檢視最新套件組合的內容。 如需詳細資訊,請參閱 Azure Functions 擴充功能套件組合。
host.json 設定
本節說明 2.x 版和更新版本中此系結可用的組態設定。 host.json檔案中的設定會套用至函式應用程式實例中的所有函式。 如需函式應用程式組態設定的詳細資訊,請參閱 azure Functionshost.json 參考。
您可以使用中的extensions.mcp區host.json段來定義 MCP 伺服器資訊。
{
"version": "2.0",
"extensions": {
"mcp": {
"instructions": "Some test instructions on how to use the server",
"serverName": "TestServer",
"serverVersion": "2.0.0",
"encryptClientState": true,
"messageOptions": {
"useAbsoluteUriForEndpoint": false
},
"system": {
"webhookAuthorizationLevel": "System"
}
}
}
}
| Property | Description |
|---|---|
| instructions | 描述用戶端如何存取遠端 MCP 伺服器。 |
| serverName | 遠端 MCP 伺服器的易記名稱。 |
| serverVersion | 目前版本的遠端 MCP 伺服器。 |
| encryptClientState | 判斷用戶端狀態是否已加密。 預設設置為 true。 設定為 false 可能適用於偵錯和測試案例,但不建議用於生產環境。 |
| 訊息選項 | SSE 傳輸中訊息端點的 Options 物件。 |
| messageOptions.UseAbsoluteUriForEndpoint 的 | 預設為 false。 僅適用於伺服器傳送的事件 (SSE) 傳輸;此設定不會影響可串流 HTTP 傳輸。 如果設為 false,則會在透過 SSE 傳輸的起始連線期間,提供訊息端點作為相對 URI。 如果設為 true,則訊息端點會傳回為絕對 URI。 除非您有特定原因,否則不建議使用相對 URI。 |
| 系統 | 系統層級組態的 Options 物件。 |
| system.webhookAuthorizationLevel | 定義 Webhook 端點所需的授權層級。 預設為「系統」。 允許的值為 “System” 和 “Anonymous”。 當您將值設定為「匿名」時,請求不再需要存取金鑰。 無論是否需要金鑰,您都可以使用 內建的 MCP 伺服器授權 作為基於身分的存取控制層。 |
連接到您的 MCP 服務器
若要連線到函式應用程式所公開的 MCP 伺服器,您必須為 MCP 用戶端提供適當的端點和傳輸資訊。 下表顯示 Azure Functions MCP 延伸模組所支援的傳輸,以及其對應的連線端點。
| Transport | 端點 |
|---|---|
| 可串流的 HTTP | /runtime/webhooks/mcp |
| Server-Sent 事件(上交所)1 | /runtime/webhooks/mcp/sse |
1 較新的通訊協定版本已取代 Server-Sent 事件傳輸。 除非您的用戶端特別需要,否則您應該改用可串流的 HTTP 傳輸。
裝載在 Azure 中時,根據預設,延伸模組公開的端點也需要名為 的mcp_extension。 如果 HTTP 標頭或查詢字串參數中x-functions-keycode未提供,您的用戶端會401 Unauthorized收到回應。 您可以將內容system.webhookAuthorizationLevel設為 host.jsonAnonymous來移除此需求。 如需詳細資訊,請參閱 host.json 設定 區段。
您可以使用 取得函式存取金鑰中所述的任何方法來擷取金鑰。 下列範例示範如何使用 Azure CLI 取得金鑰:
az functionapp keys list --resource-group <RESOURCE_GROUP> --name <APP_NAME> --query systemKeys.mcp_extension --output tsv
MCP 用戶端會以各種方式接受此組態。 請參閱您選擇的客戶的文件。 下列範例顯示一個 mcp.json 檔案,例如您可能用來 在 Visual Studio Code 中設定 GitHub Copilot 的 MCP 伺服器。 此範例設定兩部伺服器,兩者都使用 Streamable HTTP 傳輸。 第一個是使用 Azure Functions 核心工具進行本機測試。 第二個是裝載於 Azure 中的函式應用程式。 組態會採用 Visual Studio Code 在您第一次執行遠端伺服器時提示您的輸入參數。 使用輸入可確保系統金鑰等秘密不會儲存到檔案中並簽入原始檔控制。
{
"inputs": [
{
"type": "promptString",
"id": "functions-mcp-extension-system-key",
"description": "Azure Functions MCP Extension System Key",
"password": true
},
{
"type": "promptString",
"id": "functionapp-host",
"description": "The host domain of the function app."
}
],
"servers": {
"local-mcp-function": {
"type": "http",
"url": "http://localhost:7071/runtime/webhooks/mcp"
},
"remote-mcp-function": {
"type": "http",
"url": "https://${input:functionapp-host}/runtime/webhooks/mcp",
"headers": {
"x-functions-key": "${input:functions-mcp-extension-system-key}"
}
}
}
}