MCP(모델 컨텍스트 프로토콜)는 언어 모델 및 에이전트가 외부 데이터 원본 및 도구를 보다 효율적으로 검색하고 사용할 수 있도록 하기 위한 클라이언트 서버 프로토콜입니다.
Azure Functions MCP 확장을 사용하면 Azure Functions를 사용하여 원격 MCP 서버를 만들 수 있습니다. 이러한 서버는 MCP 도구 트리거 함수를 호스트할 수 있으며, MCP 클라이언트(예: 언어 모델 및 에이전트)는 쿼리하고 액세스하여 특정 작업을 수행할 수 있습니다.
| Action | Type |
|---|---|
| MCP 도구 호출 요청에서 함수 실행 | Trigger |
Important
MCP 확장은 현재 PowerShell 앱을 지원하지 않습니다.
Prerequisites
- SSE 전송을 사용하는 경우 MCP 확장은 기본 호스트 스토리지 계정 (
AzureWebJobsStorage)에서 제공하는 Azure Queue Storage를 사용합니다. ID 기반 연결을 사용하는 경우 함수 앱에 호스트 스토리지 계정의 이러한 역할 기반 권한( 스토리지 큐 데이터 판독 기 및 스토리지 큐 데이터 메시지 프로세서)과 동등한 권한이 있는지 확인합니다. - 로컬로 실행하는 경우 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.x의 모든 잠재적 버전을 포함하는 최소 4.0.0 하지만 보다 5.0.0작은 번들 버전을 사용하도록 지시합니다. 이 표기법은 v4.x 확장 번들의 사용 가능한 최신 부 버전에서 앱을 효과적으로 유지 관리합니다.
가능하면 최신 확장 번들 주 버전을 사용하고 런타임에서 최신 부 버전을 자동으로 유지하도록 허용해야 합니다. 확장 번들 릴리스 페이지에서 최신 번들의 콘텐츠를 볼 수 있습니다. 자세한 내용은 Azure Functions 확장 번들을 참조하세요.
host.json 설정
이 섹션에서는 버전 2.x 이상에서 이 바인딩에 사용할 수 있는 구성 설정을 설명합니다. host.json 파일의 설정은 함수 앱 인스턴스의 모든 함수에 적용됩니다. 함수 앱 구성 설정에 대한 자세한 내용은 Azure Functions에 대한host.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로 설정하면 디버깅 및 테스트 시나리오에 유용할 수 있지만 프로덕션에는 권장되지 않습니다. |
| 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}"
}
}
}
}