다음을 통해 공유


Azure Functions에 대한 모델 컨텍스트 프로토콜 바인딩 개요

MCP(모델 컨텍스트 프로토콜)는 언어 모델 및 에이전트가 외부 데이터 원본 및 도구를 보다 효율적으로 검색하고 사용할 수 있도록 하기 위한 클라이언트 서버 프로토콜입니다.

Azure Functions MCP 확장을 사용하면 Azure Functions를 사용하여 원격 MCP 서버를 만들 수 있습니다. 이러한 서버는 MCP 도구 트리거 함수를 호스트할 수 있으며, MCP 클라이언트(예: 언어 모델 및 에이전트)는 쿼리하고 액세스하여 특정 작업을 수행할 수 있습니다.

Action Type
MCP 도구 호출 요청에서 함수 실행 Trigger

Important

MCP 확장은 현재 PowerShell 앱을 지원하지 않습니다.

Prerequisites

  • 패키지 버전 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

번들 설치

앱에서 이 바인딩 확장을 사용하려면 프로젝트 루트의 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.x의 모든 잠재적 버전을 포함하는 최소 4.0.0 하지만 보다 5.0.0작은 번들 버전을 사용하도록 지시합니다. 이 표기법은 v4.x 확장 번들의 사용 가능한 최신 부 버전에서 앱을 효과적으로 유지 관리합니다.

가능하면 최신 확장 번들 주 버전을 사용하고 런타임에서 최신 부 버전을 자동으로 유지하도록 허용해야 합니다. 확장 번들 릴리스 페이지에서 최신 번들의 콘텐츠를 볼 수 있습니다. 자세한 내용은 Azure Functions 확장 번들을 참조하세요.

host.json 설정

이 섹션에서는 버전 2.x 이상에서 이 바인딩에 사용할 수 있는 구성 설정을 설명합니다. host.json 파일의 설정은 함수 앱 인스턴스의 모든 함수에 적용됩니다. 함수 앱 구성 설정에 대한 자세한 내용은 Azure Functions에 대한host.json 참조를 참조하세요.

섹션 extensions.mcphost.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로 설정하면 디버깅 및 테스트 시나리오에 유용할 수 있지만 프로덕션에는 권장되지 않습니다.
messageOptions SSE 전송의 메시지 엔드포인트에 대한 Options 개체입니다.
messageOptions.UseAbsoluteUriForEndpoint 기본값은 false입니다. SSE(서버 전송 이벤트) 전송에만 적용됩니다. 이 설정은 스트리밍 가능한 HTTP 전송에 영향을 주지 않습니다. 로 false설정하면 SSE 전송을 통해 초기 연결 중에 메시지 엔드포인트가 상대 URI로 제공됩니다. 설정 true하면 메시지 엔드포인트가 절대 URI로 반환됩니다. 특정 이유가 없으면 상대 URI를 사용하는 것이 좋습니다.
system 시스템 수준 구성에 대한 Options 개체입니다.
system.webhookAuthorizationLevel 웹후크 엔드포인트에 필요한 권한 부여 수준을 정의합니다. 기본값은 "시스템"입니다. 허용되는 값은 "시스템" 및 "익명"입니다. 값을 "Anonymous"로 설정하면 요청에 액세스 키가 더 이상 필요하지 않습니다. 키가 필요한지 여부에 관계없이 기본 제공 MCP 서버 권한 부여 를 ID 기반 액세스 제어 계층으로 사용할 수 있습니다.

MCP 서버에 연결

함수 앱에서 노출하는 MCP 서버에 연결하려면 MCP 클라이언트에 적절한 엔드포인트 및 전송 정보를 제공해야 합니다. 다음 표에서는 해당 연결 엔드포인트와 함께 Azure Functions MCP 확장에서 지원하는 전송을 보여 줍니다.

Transport 엔드포인트
스트리밍 가능한 HTTP /runtime/webhooks/mcp
Server-Sent 이벤트(SSE)1 /runtime/webhooks/mcp/sse

1 최신 프로토콜 버전은 Server-Sent 이벤트 전송을 더 이상 사용하지 않습니다. 클라이언트가 특별히 요구하지 않는 한 스트리밍 가능한 HTTP 전송을 대신 사용해야 합니다.

Azure에서 호스트되는 경우 기본적으로 확장에 의해 노출되는 엔드포인트에도 이름이 지정된 mcp_extension 필요합니다. HTTP 헤더 또는 쿼리 문자열 매개 변수에 x-functions-key 제공되지 code 않으면 클라이언트가 응답을 받습니다401 Unauthorized. 속성을 system.webhookAuthorizationLevelhost.json.로 설정 Anonymous 하여 이 요구 사항을 제거할 수 있습니다. 자세한 내용은 host.json 설정 섹션을 참조하세요.

함수 액세스 키 가져오기에 설명된 메서드를 사용하여 키를 검색할 수 있습니다. 다음 예제에서는 Azure CLI를 사용하여 키를 가져오는 방법을 보여줍니다.

az functionapp keys list --resource-group <RESOURCE_GROUP> --name <APP_NAME> --query systemKeys.mcp_extension --output tsv

MCP 클라이언트는 다양한 방법으로 이 구성을 수락합니다. 선택한 클라이언트에 대한 설명서를 참조하세요. 다음 예제에서는 mcp.json 데 사용할 수 있는 파일을 보여줍니다. 이 예제에서는 스트리밍 가능한 HTTP 전송을 사용하여 두 서버를 설정합니다. 첫 번째는 Azure Functions Core Tools를 사용한 로컬 테스트용입니다. 두 번째는 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}"
            }
        }
    }
}