<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azure SDK | The .NET Blog</title><link>https://thedotnetblog.com/ru/tags/azure-sdk/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ru</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 21 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ru/tags/azure-sdk/index.xml" rel="self" type="application/rss+xml"/><item><title>Перестаньте Атаковать Проблемную Зависимость: Паттерны Повторных Попыток для Azure Functions + Service Bus</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-functions-service-bus-exponential-backoff-circuit-breaker/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-functions-service-bus-exponential-backoff-circuit-breaker/</guid><description>Экспоненциальная задержка и паттерны автоматического выключателя теперь поддерживаются нативно для Azure Functions, запускаемых Service Bus — вот как они работают и почему вам нужны оба.</description><content:encoded>&lt;p&gt;Вот как восстанавливаемая ошибка превращается в отказ в приложении Functions: зависимость начинает давать таймаут, каждый экземпляр Functions немедленно и бесконечно повторяет попытки, зависимость получает сотни одновременных неудавшихся запросов, и то, что началось как временный сбой, превращается в событие противодавления во всей системе.&lt;/p&gt;
&lt;p&gt;Вы, вероятно, знаете эту историю. Azure Functions масштабируется быстро — в этом весь смысл. Но &amp;ldquo;быстро масштабировать&amp;rdquo; и &amp;ldquo;немедленно повторять&amp;rdquo; вместе могут драматически ухудшить сбои.&lt;/p&gt;
&lt;p&gt;Два паттерна помогают. Экспоненциальная задержка и автоматический выключатель. Оба теперь нативно поддерживаются для Azure Functions, запускаемых Service Bus.&lt;/p&gt;
&lt;h2 id="два-паттерна-разные-роли"&gt;Два Паттерна, Разные Роли&lt;/h2&gt;
&lt;p&gt;Эти паттерны дополняют друг друга, а не являются альтернативами:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Экспоненциальная задержка&lt;/strong&gt; отвечает на вопрос: &lt;em&gt;когда мне следует повторить попытку?&lt;/em&gt;
Она увеличивает задержку между попытками, чтобы зависимость имела время восстановиться. На уровне сообщений, регулируя тайминг повторных попыток.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Автоматический выключатель&lt;/strong&gt; отвечает на вопрос: &lt;em&gt;следует ли мне вообще обращаться к этой зависимости прямо сейчас?&lt;/em&gt;
Он останавливает повторные вызовы к нездоровой зависимости после достижения порогового значения ошибок, а затем осторожно проверяет после периода охлаждения. На системном уровне, предотвращая шторм повторных попыток.&lt;/p&gt;
&lt;p&gt;Вам нужны оба. Задержка управляет темпом повторных попыток на уровне сообщений. Автоматический выключатель управляет агрегированными решениями о работоспособности.&lt;/p&gt;
&lt;h2 id="почему-это-особенно-важно-для-service-bus"&gt;Почему Это Особенно Важно для Service Bus&lt;/h2&gt;
&lt;p&gt;Очередь поглощает пиковый трафик, что хорошо. Но без контролей очередь может расти, пока воркеры продолжают тратить вычислительные ресурсы на вызовы, которые завершатся неудачей. Ядовитые сообщения остаются активными дольше, чем должны. Горячие партиции или ограниченная пропускная способность нижестоящей системы создают каскадные проблемы.&lt;/p&gt;
&lt;p&gt;Более безопасный дизайн:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Обнаружить временный сбой&lt;/li&gt;
&lt;li&gt;Задержать следующую попытку с экспоненциальной задержкой&lt;/li&gt;
&lt;li&gt;Остановить вызовы к зависимости при достижении порогового значения ошибок (цепь разомкнута)&lt;/li&gt;
&lt;li&gt;Осторожно возобновить после периода охлаждения (зондирование цепи)&lt;/li&gt;
&lt;li&gt;Переместить невосстанавливаемую работу в dead-letter или путь карантина&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="как-выглядит-нативная-поддержка"&gt;Как Выглядит Нативная Поддержка&lt;/h2&gt;
&lt;p&gt;Новая поддержка интегрируется с существующей моделью хоста Azure Functions — без дополнительных библиотек, без пользовательских реализаций. Конфигурация помещается в ваш &lt;code&gt;host.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;extensions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;serviceBus&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;messageHandlerOptions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxRetryCount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;retryPolicy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;exponentialBackoff&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;minBackoff&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;00:00:02&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxBackoff&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;00:05:00&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;maxRetryCount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Конфигурация автоматического выключателя устанавливает порог ошибок и интервал сброса, чтобы нездоровые зависимости не атаковались во время восстановления.&lt;/p&gt;
&lt;h2 id="поддерживаемые-языки"&gt;Поддерживаемые Языки&lt;/h2&gt;
&lt;p&gt;Это не только для .NET. Функция охватывает dotnet, JavaScript, TypeScript и Python — полный набор языков, поддерживаемых триггером Service Bus в Azure Functions.&lt;/p&gt;
&lt;h2 id="заключение"&gt;Заключение&lt;/h2&gt;
&lt;p&gt;Паттерны повторных попыток не интересно настраивать до первого раза, когда сбой в нижестоящей системе заставляет ваши Functions усугублять проблему вместо плавного ухудшения. Настраивать их проактивно недорого. Реализовывать их во время инцидента — нет.&lt;/p&gt;
&lt;p&gt;Оригинальная статья: &lt;a href="https://devblogs.microsoft.com/azure-sdk/exponential-backoff-circuit-breaker-azure-functions/"&gt;Exponential backoff and circuit breaker for Service Bus-triggered Azure Functions&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server Теперь .mcpb — Установка без Какого-либо Runtime</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>Azure MCP Server теперь доступен как MCP Bundle (.mcpb) — скачайте, перетащите в Claude Desktop, и готово. Node.js, Python или .NET не нужны.</description><content:encoded>&lt;p&gt;&lt;em&gt;Этот пост переведён автоматически. Чтобы просмотреть оригинал, &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;нажмите здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Знаете, что раздражало в настройке MCP-серверов? Нужен был runtime. Node.js для npm-версии, Python для pip/uvx, .NET SDK для dotnet-варианта.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server только что изменил это&lt;/a&gt;. Теперь он доступен как &lt;code&gt;.mcpb&lt;/code&gt; — MCP Bundle — и настройка выполняется перетаскиванием.&lt;/p&gt;
&lt;h2 id="что-такое-mcp-bundle"&gt;Что такое MCP Bundle?&lt;/h2&gt;
&lt;p&gt;Думайте о нём как о расширении VS Code (&lt;code&gt;.vsix&lt;/code&gt;) или расширении браузера (&lt;code&gt;.crx&lt;/code&gt;), но для MCP-серверов. Файл &lt;code&gt;.mcpb&lt;/code&gt; — это автономный ZIP-архив с бинарным файлом сервера и всеми его зависимостями.&lt;/p&gt;
&lt;h2 id="как-установить"&gt;Как установить&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Скачайте bundle для вашей платформы&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Перейдите на &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;страницу GitHub Releases&lt;/a&gt; и скачайте файл &lt;code&gt;.mcpb&lt;/code&gt; для вашей ОС и архитектуры.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Установите в Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Самый простой способ: перетащите файл &lt;code&gt;.mcpb&lt;/code&gt; в окно Claude Desktop на странице настроек расширений (&lt;code&gt;☰ → Файл → Настройки → Расширения&lt;/code&gt;). Проверьте детали сервера, нажмите «Установить», подтвердите.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Аутентифицируйтесь в Azure&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё. Azure MCP Server использует ваши существующие учётные данные Azure.&lt;/p&gt;
&lt;h2 id="что-можно-делать"&gt;Что можно делать&lt;/h2&gt;
&lt;p&gt;Доступ к 100+ инструментам сервисов Azure прямо из вашего ИИ-клиента:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Запрашивать и управлять Cosmos DB, Storage, Key Vault, App Service, Foundry&lt;/li&gt;
&lt;li&gt;Генерировать команды &lt;code&gt;az&lt;/code&gt; CLI для любых задач&lt;/li&gt;
&lt;li&gt;Создавать шаблоны Bicep и Terraform&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="с-чего-начать"&gt;С чего начать&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Загрузка&lt;/strong&gt;: &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server-"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Репозиторий&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp"&gt;aka.ms/azmcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Документация&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp/docs"&gt;aka.ms/azmcp/docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Смотрите &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;полный пост&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure SDK Апрель 2026: AI Foundry 2.0 и Что Должны Знать .NET-Разработчики</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/</guid><description>Апрельский релиз Azure SDK включает стабильный Azure.AI.Projects 2.0.0 со значительными ломающими изменениями, критические исправления безопасности Cosmos DB и новые библиотеки Provisioning для .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Этот пост был автоматически переведён. Для оригинальной версии &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/"&gt;нажмите здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ежемесячные SDK-релизы часто легко пропустить. В этом есть несколько вещей, заслуживающих внимания.&lt;/p&gt;
&lt;h2 id="azureaiprojects-200--ломающие-изменения-которые-имеют-смысл"&gt;Azure.AI.Projects 2.0.0 — Ломающие Изменения, Которые Имеют Смысл&lt;/h2&gt;
&lt;p&gt;Разделение пространств имён, переименование типов, последовательное соглашение &lt;code&gt;Is*&lt;/code&gt; для булевых свойств.&lt;/p&gt;
&lt;h2 id="cosmos-db-java-критическое-исправление-безопасности-rce"&gt;Cosmos DB Java: Критическое Исправление Безопасности (RCE)&lt;/h2&gt;
&lt;p&gt;Версия 4.79.0 исправляет &lt;strong&gt;уязвимость удалённого выполнения кода (CWE-502)&lt;/strong&gt;. Обновитесь немедленно.&lt;/p&gt;
&lt;h2 id="новые-provisioning-библиотеки-для-net"&gt;Новые Provisioning-Библиотеки для .NET&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/Azure.Provisioning.Network/1.0.0"&gt;Azure.Provisioning.Network 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/Azure.Provisioning.PrivateDns/1.0.0"&gt;Azure.Provisioning.PrivateDns 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Оригинальный пост: &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-sdk-release-april-2026/"&gt;Azure SDK Release (April 2026)&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 выпущен — Self-Hosted Agentic Cloud Automation здесь</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 достиг стабильности с self-hosted удалёнными развёртываниями, 276 инструментами в 57 сервисах Azure и enterprise-grade безопасностью — вот что важно для .NET разработчиков, создающих agentic workflows.</description><content:encoded>&lt;p&gt;&lt;em&gt;Эта статья была переведена автоматически. Оригинал доступен &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Если вы в последнее время создавали что-то с MCP и Azure, вы наверняка уже знаете, что локальный опыт работает хорошо. Подключите MCP сервер, позвольте вашему AI агенту общаться с ресурсами Azure, и двигайтесь дальше. Но в момент, когда нужно поделиться этой настройкой с командой? Вот тогда всё становится сложным.&lt;/p&gt;
&lt;p&gt;Больше не нужно. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;только что достиг стабильности версии 2.0&lt;/a&gt;, и главная фишка — это ровно то, о чём просили enterprise команды: &lt;strong&gt;поддержка self-hosted удалённых MCP серверов&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="что-такое-azure-mcp-server"&gt;Что такое Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Быстрое напоминание. Azure MCP Server реализует спецификацию &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; и раскрывает возможности Azure в виде структурированных, обнаруживаемых инструментов, которые AI агенты могут вызывать. Думайте об этом как о стандартизированном мосте между вашим агентом и Azure — provisioning, развёртывание, мониторинг, диагностика, всё через один консистентный интерфейс.&lt;/p&gt;
&lt;p&gt;Цифры говорят сами за себя: &lt;strong&gt;276 MCP инструментов в 57 сервисах Azure&lt;/strong&gt;. Это серьёзное покрытие.&lt;/p&gt;
&lt;h2 id="главное-self-hosted-удалённые-развёртывания"&gt;Главное: self-hosted удалённые развёртывания&lt;/h2&gt;
&lt;p&gt;Вот в чём дело. Запуск MCP локально на вашей машине — это нормально для разработки и экспериментов. Но в реальном сценарии с командой вам нужно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Общий доступ для разработчиков и внутренних систем агентов&lt;/li&gt;
&lt;li&gt;Централизованная конфигурация (контекст тенанта, умолчания подписки, телеметрия)&lt;/li&gt;
&lt;li&gt;Enterprise границы сети и политики&lt;/li&gt;
&lt;li&gt;Интеграция в CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 решает все эти проблемы. Вы можете развернуть его как централизованно управляемый внутренний сервис с HTTP-транспортом, правильной аутентификацией и консистентным управлением.&lt;/p&gt;
&lt;p&gt;Для аутентификации у вас есть два хороших варианта:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — при работе рядом с &lt;a href="https://aka.ms/azmcp/self-host/foundry"&gt;Microsoft Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-Behalf-Of (OBO) flow&lt;/strong&gt; — OpenID Connect делегирование, которое вызывает Azure API, используя контекст вошедшего пользователя&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Этот OBO flow особенно интересен для нас, .NET разработчиков. Это означает, что ваши agentic workflows могут работать с реальными разрешениями пользователя, а не с какой-то чрезмерно привилегированной сервисной учётной записью. Принцип наименьших привилегий, встроенный прямо туда.&lt;/p&gt;
&lt;h2 id="усиление-безопасности"&gt;Усиление безопасности&lt;/h2&gt;
&lt;p&gt;Это не просто выпуск фич — это ещё и выпуск безопасности. Релиз 2.0 добавляет:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Более сильную валидацию endpoints&lt;/li&gt;
&lt;li&gt;Защиту от injection паттернов в инструментах, ориентированных на запросы&lt;/li&gt;
&lt;li&gt;Более жёсткие элементы управления изоляцией для окружений разработки&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если вы собираетесь раскрывать MCP как общий сервис, эти меры защиты имеют большое значение. Большое.&lt;/p&gt;
&lt;h2 id="где-вы-можете-его-использовать"&gt;Где вы можете его использовать?&lt;/h2&gt;
&lt;p&gt;История совместимости клиентов широкая. Azure MCP Server 2.0 работает с:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IDEs&lt;/strong&gt;: VS Code, Visual Studio, IntelliJ, Eclipse, Cursor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CLI agents&lt;/strong&gt;: GitHub Copilot CLI, Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standalone&lt;/strong&gt;: локальный сервер для простых настроек&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-hosted remote&lt;/strong&gt;: новая звезда версии 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Плюс есть поддержка sovereign cloud для Azure US Government и Azure, управляемого 21Vianet, что критично для регулируемых развёртываний.&lt;/p&gt;
&lt;h2 id="почему-это-важно-для-net-разработчиков"&gt;Почему это важно для .NET разработчиков&lt;/h2&gt;
&lt;p&gt;Если вы создаёте agentic приложения с .NET — будь то Semantic Kernel, Microsoft Agent Framework или ваша собственная оркестровка — Azure MCP Server 2.0 даёт вам production-ready способ дать вашим агентам взаимодействовать с инфраструктурой Azure. Нет пользовательских REST обёрток. Нет сервис-специфичных паттернов интеграции. Просто MCP.&lt;/p&gt;
&lt;p&gt;Вместе с &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;fluent API для MCP Apps&lt;/a&gt;, который вышел несколько дней назад, экосистема .NET MCP быстро растёт.&lt;/p&gt;
&lt;h2 id="начало-работы"&gt;Начало работы&lt;/h2&gt;
&lt;p&gt;Выберите свой путь:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;GitHub Repo&lt;/a&gt;&lt;/strong&gt; — исходный код, документация, всё&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Docker Image&lt;/a&gt;&lt;/strong&gt; — контейнеризованное развёртывание&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;VS Code Extension&lt;/a&gt;&lt;/strong&gt; — интеграция IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Self-hosting guide&lt;/a&gt;&lt;/strong&gt; — главная фишка версии 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="в-итоге"&gt;В итоге&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0 — это ровно тот вид upgrade инфраструктуры, который не выглядит ослепительно на демо, но всё изменяет на практике. Self-hosted удалённый MCP с правильной аутентификацией, усилением безопасности и поддержкой sovereign cloud означает, что MCP готов для реальных команд, создающих реальные agentic workflows на Azure. Если вы ждали сигнала &amp;ldquo;enterprise-ready&amp;rdquo; — вот он.&lt;/p&gt;</content:encoded></item><item><title>MCP Apps получили Fluent API — Создавайте богатые UI для AI-инструментов на .NET за три шага</title><link>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ru/news/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>Новый Fluent API конфигурации для MCP Apps на Azure Functions позволяет превратить любой .NET MCP-инструмент в полноценное приложение с представлениями, разрешениями и CSP-политиками всего в несколько строк кода.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Этот пост был переведён автоматически. Оригинал можно прочитать &lt;a href="https://thedotnetblog.com/ru/news/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/"&gt;здесь&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP-инструменты отлично подходят для наделения AI-агентов возможностями. Но что, если вашему инструменту нужно показать что-то пользователю — дашборд, форму, интерактивную визуализацию? Именно для этого и существуют MCP Apps, и теперь их стало намного проще создавать.&lt;/p&gt;
&lt;p&gt;Лилиан Касем из команды Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;представила новый Fluent API конфигурации&lt;/a&gt; для MCP Apps на .NET Azure Functions — это такое улучшение опыта разработчика, что невольно задаёшься вопросом, почему так просто не было всегда.&lt;/p&gt;
&lt;h2 id="что-такое-mcp-apps"&gt;Что такое MCP Apps?&lt;/h2&gt;
&lt;p&gt;MCP Apps расширяют Model Context Protocol, позволяя инструментам нести собственные UI-представления, статические ресурсы и средства управления безопасностью. Вместо простого возврата текста ваш MCP-инструмент может отрисовывать полноценные HTML-интерфейсы — интерактивные дашборды, визуализации данных, формы конфигурации — всё это вызывается AI-агентами и отображается пользователям через MCP-клиенты.&lt;/p&gt;
&lt;p&gt;Проблема была в том, что ручная настройка всего этого требовала глубокого знания спецификации MCP: URI &lt;code&gt;ui://&lt;/code&gt;, специальные MIME-типы, координация метаданных между инструментами и ресурсами. Не сложно, но утомительно.&lt;/p&gt;
&lt;h2 id="fluent-api-за-три-шага"&gt;Fluent API за три шага&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Шаг 1: Определите свою функцию.&lt;/strong&gt; Стандартный MCP-инструмент Azure Functions:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Function(nameof(HelloApp))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;HelloApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [McpToolTrigger(&amp;#34;HelloApp&amp;#34;, &amp;#34;A simple MCP App that says hello.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ToolInvocationContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Hello from app&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Шаг 2: Преобразуйте его в MCP App.&lt;/strong&gt; В стартапе вашей программы:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConfigureMcpTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;HelloApp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsMcpApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/hello-app.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello App&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardWrite&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardRead&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithCsp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csp&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;csp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowBaseUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Шаг 3: Добавьте HTML-представление.&lt;/strong&gt; Создайте &lt;code&gt;assets/hello-app.html&lt;/code&gt; с нужным вам интерфейсом.&lt;/p&gt;
&lt;p&gt;Вот и всё. Fluent API берёт на себя всю сантехнику MCP-протокола — генерирует синтетическую ресурсную функцию, устанавливает правильный MIME-тип и внедряет метаданные, связывающие ваш инструмент с его представлением.&lt;/p&gt;
&lt;h2 id="api-спроектирован-отлично"&gt;API спроектирован отлично&lt;/h2&gt;
&lt;p&gt;Несколько вещей, которые мне особенно нравятся:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Источники представлений гибкие.&lt;/strong&gt; Можно отдавать HTML из файлов на диске или встраивать ресурсы прямо в сборку для автономных развёртываний:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/my-view.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromEmbeddedResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MyApp.Resources.view.html&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;CSP компонуемый.&lt;/strong&gt; Вы явно разрешаете источники, необходимые вашему приложению, следуя принципу наименьших привилегий. Вызывайте &lt;code&gt;WithCsp&lt;/code&gt; несколько раз — источники накапливаются:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithCsp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csp&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;csp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LoadResourcesFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://cdn.example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://youtube.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Управление видимостью.&lt;/strong&gt; Можно сделать инструмент видимым только для LLM, только для UI хоста или для обоих. Хотите инструмент, который только отрисовывает UI и не должен вызываться моделью? Легко:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithVisibility&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpVisibility&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// UI-only, hidden from the model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="начало-работы"&gt;Начало работы&lt;/h2&gt;
&lt;p&gt;Добавьте превью-пакет:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Mcp --version 1.5.0-preview.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если вы уже создаёте MCP-инструменты с Azure Functions, это просто обновление пакета. &lt;a href="https://learn.microsoft.com/azure/azure-functions/scenario-mcp-apps?tabs=bash%2Clinux&amp;amp;pivots=programming-language-csharp"&gt;Быстрый старт MCP Apps&lt;/a&gt; — лучшее место для начала, если вы новичок в этой концепции.&lt;/p&gt;
&lt;h2 id="подводя-итоги"&gt;Подводя итоги&lt;/h2&gt;
&lt;p&gt;MCP Apps — одно из самых захватывающих нововведений в пространстве AI-инструментов: инструменты, которые не просто &lt;em&gt;делают что-то&lt;/em&gt;, но могут &lt;em&gt;показывать что-то&lt;/em&gt; пользователям. Fluent API убирает сложность протокола и позволяет сосредоточиться на главном: логике вашего инструмента и его интерфейсе.&lt;/p&gt;
&lt;p&gt;Прочитайте &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;полный пост&lt;/a&gt; для полного справочника по API и примеров.&lt;/p&gt;</content:encoded></item></channel></rss>