Remote Functions — MCP-сервер на базе Azure Functions (.NET/C#)
Этот шаблон позволяет быстро создать и развернуть удалённый MCP-сервер с помощью Azure Functions на .NET. Вы можете запустить сервер локально (с отладкой), а затем выполнить azd up, чтобы развернуть его в облаке за пару минут. Сервер защищён ключами и HTTPS, поддерживает OAuth через EasyAuth и API Management, а также изоляцию сети через VNET.
Видеообзор: YouTube
Примеры на других языках: Node.js/TypeScript, Python
Быстрый старт с GitHub Codespaces: https://codespaces.new/Azure-Samples/remote-mcp-functions-dotnet
Архитектура
Предварительные требования
Подготовка локального окружения
Запустите Azurite (эмулятор Blob Storage):
docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite
Если используете расширение Azurite в VS Code, выполните команду Azurite: Start.
Запуск MCP-сервера локально
Из папки src выполните:
cd src
func start
По умолчанию SSE-эндпоинт доступен по адресу:
http://0.0.0.0:7071/runtime/webhooks/mcp/sse
Подключение к локальному MCP-серверу
VS Code / GitHub Copilot
- Откройте палитру команд и выберите «Add MCP Server».
- Укажите URL:
http://0.0.0.0:7071/runtime/webhooks/mcp/sse
- В списке «MCP Servers» запустите сервер.
- В режиме Copilot Chat Agent отправьте запрос, например:
Say Hello
Save this snippet as snippet1
Retrieve snippet1 and apply to NewFile.cs
Для остановки нажмите Ctrl+C в терминале с func start.
MCP Inspector
В новом терминале запустите:
npx @modelcontextprotocol/inspector node build/index.js
Откройте веб-интерфейс Inspector (обычно http://0.0.0.0:5173). Выберите транспорт SSE, укажите URL http://0.0.0.0:7071/runtime/webhooks/mcp/sse и нажмите Connect. После подключения вы увидите список инструментов и сможете их запускать.
Развёртывание в Azure (удалённый MCP)
Выполните команду:
azd up
Она создаст все необходимые ресурсы Azure (Function App, Storage Account и т.д.) и развернёт код.
Дополнительные возможности
Подключение к удалённому MCP-серверу из клиента
SSE-эндпоинт после развёртывания: https://<funcappname>.azurewebsites.net/runtime/webhooks/mcp/sse
По умолчанию требуется системный ключ. Получить его можно:
MCP Inspector
Укажите ключ прямо в URL:
https://<funcappname>.azurewebsites.net/runtime/webhooks/mcp/sse?code=<ваш-ключ>
VS Code / GitHub Copilot
Используйте заголовок x-functions-key. Пример настройки в mcp.json:
{
"inputs": [
{
"type": "promptString",
"id": "functions-mcp-extension-system-key",
"description": "Azure Functions MCP Extension System Key",
"password": true
},
{
"type": "promptString",
"id": "functionapp-name",
"description": "Azure Functions App Name"
}
],
"servers": {
"remote-mcp-function": {
"type": "sse",
"url": "https://${input:functionapp-name}.azurewebsites.net/runtime/webhooks/mcp/sse",
"headers": {
"x-functions-key": "${input:functions-mcp-extension-system-key}"
}
},
"local-mcp-function": {
"type": "sse",
"url": "http://0.0.0.0:7071/runtime/webhooks/mcp/sse"
}
}
}
Запустите сервер в VS Code — вас попросят ввести имя Function App и ключ.
Повторное развертывание
Команда azd up перезаписывает код в Function App новыми файлами. Выполняйте её столько раз, сколько нужно.
Удаление ресурсов
Чтобы удалить созданную группу ресурсов и все ресурсы Azure:
azd down
Исходный код
Основной код инструментов (GetSnippet, SaveSnippet) находится в src/SnippetsTool.cs. Класс использует атрибуты [Function], [McpToolTrigger], [BlobInput], [BlobOutput] для привязки к Azure Functions и Blob Storage.
Примеры инструментов:
SayHello — возвращает строку.
GetSnippet — читает сниппет из Blob Storage.
SaveSnippet — сохраняет сниппет в Blob Storage.
Дальнейшие шаги
Комментарии
Комментариев пока нет. Будьте первым.