<?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/es/tags/azure-sdk/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>es</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/es/tags/azure-sdk/index.xml" rel="self" type="application/rss+xml"/><item><title>Deja de Martillar una Dependencia en Dificultades: Patrones de Reintento para Azure Functions + Service Bus</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/azure-functions-service-bus-exponential-backoff-circuit-breaker/</guid><description>El retroceso exponencial y los patrones de circuit breaker ahora son compatibles de forma nativa para Azure Functions activadas por Service Bus — aquí se explica cómo funcionan y por qué quieres ambos.</description><content:encoded>&lt;p&gt;Aquí te explicamos cómo una falla recuperable se convierte en una interrupción en una aplicación de Functions: una dependencia comienza a dar timeout, cada instancia de Function reintenta inmediatamente e indefinidamente, la dependencia recibe cientos de solicitudes fallidas concurrentes, y lo que comenzó como un problema transitorio se convierte en un evento de contrapresión en todo el sistema.&lt;/p&gt;
&lt;p&gt;Probablemente conoces esta historia. Azure Functions escala rápidamente — ese es todo el punto. Pero &amp;ldquo;escalar rápidamente&amp;rdquo; y &amp;ldquo;reintentar inmediatamente&amp;rdquo; juntos pueden empeorar dramáticamente las fallas.&lt;/p&gt;
&lt;p&gt;Dos patrones ayudan. Retroceso exponencial y circuit breaker. Ambos ahora son compatibles de forma nativa para Azure Functions activadas por Service Bus.&lt;/p&gt;
&lt;h2 id="dos-patrones-roles-diferentes"&gt;Dos Patrones, Roles Diferentes&lt;/h2&gt;
&lt;p&gt;Estos patrones son complementarios, no alternativas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El retroceso exponencial&lt;/strong&gt; responde: &lt;em&gt;¿cuándo debería intentarlo de nuevo?&lt;/em&gt;
Aumenta el retraso entre reintentos para que una dependencia tenga tiempo de recuperarse. A nivel de mensaje, marcando el ritmo del temporizador de reintento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El circuit breaker&lt;/strong&gt; responde: &lt;em&gt;¿debería llamar a esta dependencia ahora mismo?&lt;/em&gt;
Detiene las llamadas repetidas a una dependencia poco saludable después de alcanzar un umbral de fallas, y luego sondea cuidadosamente después de un período de enfriamiento. A nivel de sistema, previniendo tormentas de reintentos.&lt;/p&gt;
&lt;p&gt;Quieres ambos. El retroceso maneja el ritmo de reintento por mensaje. El circuit breaker maneja las decisiones de salud agregadas.&lt;/p&gt;
&lt;h2 id="por-qué-importa-especialmente-para-service-bus"&gt;Por Qué Importa Especialmente para Service Bus&lt;/h2&gt;
&lt;p&gt;La cola absorbe el tráfico en ráfagas, lo que es bueno. Pero sin controles, la cola puede crecer mientras los workers continúan desperdiciando cómputo en llamadas que fallarán. Los mensajes envenenados permanecen activos más tiempo del que deberían. Las particiones calientes o la capacidad aguas abajo limitada crean problemas en cascada.&lt;/p&gt;
&lt;p&gt;El diseño más seguro:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Detectar la falla transitoria&lt;/li&gt;
&lt;li&gt;Retrasar el próximo intento con retroceso exponencial&lt;/li&gt;
&lt;li&gt;Detener las llamadas a la dependencia cuando se alcanza un umbral de fallas (circuito abierto)&lt;/li&gt;
&lt;li&gt;Reanudar cuidadosamente después de un período de enfriamiento (sonda de circuito)&lt;/li&gt;
&lt;li&gt;Mover el trabajo irrecuperable a dead-letter o a una ruta de cuarentena&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="cómo-se-ve-el-soporte-nativo"&gt;Cómo se Ve el Soporte Nativo&lt;/h2&gt;
&lt;p&gt;El nuevo soporte se integra con el modelo de host existente de Azure Functions — sin bibliotecas adicionales, sin implementaciones personalizadas. La configuración va en tu &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;La configuración del circuit breaker establece el umbral de fallas y el intervalo de restablecimiento para que las dependencias poco saludables no sean acosadas durante la recuperación.&lt;/p&gt;
&lt;h2 id="lenguajes-cubiertos"&gt;Lenguajes Cubiertos&lt;/h2&gt;
&lt;p&gt;Esto no es solo para .NET. La funcionalidad cubre dotnet, JavaScript, TypeScript y Python — el conjunto completo de lenguajes compatibles con el trigger de Service Bus en Azure Functions.&lt;/p&gt;
&lt;h2 id="conclusión"&gt;Conclusión&lt;/h2&gt;
&lt;p&gt;Los patrones de reintento no son emocionantes de configurar hasta la primera vez que una interrupción aguas abajo hace que tus Functions empeoren el problema en lugar de degradarse correctamente. Configurarlos de manera proactiva es barato. Implementarlos durante un incidente no lo es.&lt;/p&gt;
&lt;p&gt;Post original: &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 SDK Abril 2026: AI Foundry 2.0 y Lo Que Deben Saber los Desarrolladores .NET</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/</guid><description>El lanzamiento del Azure SDK de abril 2026 incluye Azure.AI.Projects 2.0.0 stable con cambios importantes, correcciones críticas de seguridad en Cosmos DB y nuevas bibliotecas de Provisioning para .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/azure-sdk-april-2026-ai-foundry-2-stable/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Los lanzamientos mensuales del SDK son fáciles de ignorar. Este tiene algunas cosas que vale la pena atender — especialmente si construyes con AI Foundry, Cosmos DB en Java, o haces aprovisionamiento de infraestructura desde código .NET.&lt;/p&gt;
&lt;h2 id="azureaiprojects-200--cambios-breaking-que-tienen-sentido"&gt;Azure.AI.Projects 2.0.0 — Cambios Breaking que Tienen Sentido&lt;/h2&gt;
&lt;p&gt;El paquete NuGet &lt;code&gt;Azure.AI.Projects&lt;/code&gt; alcanza la versión estable 2.0.0 con cambios arquitectónicos significativos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Divisiones de namespace&lt;/strong&gt;: Evaluaciones movidas a &lt;code&gt;Azure.AI.Projects.Evaluation&lt;/code&gt;, operaciones de memoria a &lt;code&gt;Azure.AI.Projects.Memory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tipos renombrados&lt;/strong&gt;: &lt;code&gt;Insights&lt;/code&gt; → &lt;code&gt;ProjectInsights&lt;/code&gt;, &lt;code&gt;Schedules&lt;/code&gt; → &lt;code&gt;ProjectSchedules&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convenciones de nomenclatura&lt;/strong&gt;: Propiedades booleanas siguen consistentemente la convención &lt;code&gt;Is*&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos son los cambios breaking que duelen una vez y luego se sienten correctos para siempre.&lt;/p&gt;
&lt;h2 id="cosmos-db-java-corrección-crítica-de-seguridad-rce"&gt;Cosmos DB Java: Corrección Crítica de Seguridad (RCE)&lt;/h2&gt;
&lt;p&gt;Esta es seria. La biblioteca Java Cosmos DB versión 4.79.0 incluye una corrección crítica para una &lt;strong&gt;vulnerabilidad de Ejecución Remota de Código (CWE-502)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Si tienes servicios Java usando Azure Cosmos DB, actualiza a 4.79.0 inmediatamente.&lt;/p&gt;
&lt;h2 id="nuevas-bibliotecas-de-provisioning-para-net"&gt;Nuevas Bibliotecas de Provisioning para .NET&lt;/h2&gt;
&lt;p&gt;Varias bibliotecas estables de Provisioning llegan a 1.0.0:&lt;/p&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;h2 id="resumiendo"&gt;Resumiendo&lt;/h2&gt;
&lt;p&gt;Lo más destacado para desarrolladores .NET es &lt;code&gt;Azure.AI.Projects 2.0.0&lt;/code&gt; alcanzando estabilidad. Post original: &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>El Azure MCP Server Ahora es un .mcpb — Instálalo sin Ningún Runtime</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>El Azure MCP Server ya está disponible como MCP Bundle (.mcpb) — descárgalo, arrástralo a Claude Desktop y listo. Sin Node.js, Python ni .NET requeridos.</description><content:encoded>&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;¿Sabes qué era molesto de configurar servidores MCP? Necesitabas un runtime. Node.js para la versión npm, Python para pip/uvx, .NET SDK para la variante dotnet, Docker si querías contenedores. Solo para conectar una herramienta a tu cliente IA.&lt;/p&gt;
&lt;p&gt;El &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server acaba de cambiar eso&lt;/a&gt;. Ahora está disponible como &lt;code&gt;.mcpb&lt;/code&gt; — un MCP Bundle — y la configuración es arrastrar y soltar.&lt;/p&gt;
&lt;h2 id="qué-es-un-mcp-bundle"&gt;¿Qué es un MCP Bundle?&lt;/h2&gt;
&lt;p&gt;Piénsalo como una extensión de VS Code (&lt;code&gt;.vsix&lt;/code&gt;) o una extensión de navegador (&lt;code&gt;.crx&lt;/code&gt;), pero para servidores MCP. Un archivo &lt;code&gt;.mcpb&lt;/code&gt; es un archivo ZIP autónomo que incluye el binario del servidor y todas sus dependencias. Todo lo necesario para ejecutarlo en tu plataforma, empaquetado junto.&lt;/p&gt;
&lt;p&gt;El resultado: descargas un archivo, lo abres en un cliente compatible y el servidor funciona. Sin runtime que instalar, sin &lt;code&gt;package.json&lt;/code&gt; que gestionar, sin conflictos de versiones.&lt;/p&gt;
&lt;h2 id="cómo-instalarlo"&gt;Cómo instalarlo&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Descarga el bundle para tu plataforma&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ve a la &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;página de GitHub Releases&lt;/a&gt; y descarga el archivo &lt;code&gt;.mcpb&lt;/code&gt; para tu OS y arquitectura. Asegúrate de elegir el correcto — &lt;code&gt;osx-arm64&lt;/code&gt; para Apple Silicon, &lt;code&gt;osx-x64&lt;/code&gt; para Mac Intel, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Instala en Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La forma más fácil: arrastra y suelta el archivo &lt;code&gt;.mcpb&lt;/code&gt; en la ventana de Claude Desktop mientras estás en la página de configuración de Extensiones (&lt;code&gt;☰ → Archivo → Configuración → Extensiones&lt;/code&gt;). Revisa los detalles del servidor, haz clic en Instalar y confirma.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Autentícate en 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;Eso es todo. El Azure MCP Server usa tus credenciales de Azure existentes.&lt;/p&gt;
&lt;h2 id="qué-puedes-hacer-con-él"&gt;Qué puedes hacer con él&lt;/h2&gt;
&lt;p&gt;Una vez instalado, tienes acceso a más de 100 herramientas de servicios Azure directamente desde tu cliente IA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consultar y administrar Cosmos DB, Storage, Key Vault, App Service, Foundry&lt;/li&gt;
&lt;li&gt;Generar comandos &lt;code&gt;az&lt;/code&gt; CLI para cualquier tarea&lt;/li&gt;
&lt;li&gt;Crear plantillas Bicep y Terraform&lt;/li&gt;
&lt;li&gt;Obtener recomendaciones de arquitectura y diagnósticos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prueba prompts como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Lista todos los grupos de recursos en mi suscripción&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Genera una plantilla Bicep para una app web con base de datos SQL&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="qué-método-de-instalación-usar"&gt;¿Qué método de instalación usar?&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Método&lt;/th&gt;
&lt;th&gt;Ideal para&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.mcpb&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Usuarios de Claude Desktop que quieren cero configuración&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extensión VS Code&lt;/td&gt;
&lt;td&gt;Desarrolladores en VS Code + GitHub Copilot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm/npx&lt;/td&gt;
&lt;td&gt;Desarrolladores que ya tienen Node.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;Pipelines CI/CD y contenedores&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="para-empezar"&gt;Para empezar&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Descarga&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;Repositorio&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;Docs&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;Consulta el &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;post completo&lt;/a&gt; para consejos de solución de problemas.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Acaba de Llegar — La Automatización Agentic en la Nube Auto-Alojada ya Está Aquí</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 alcanza estabilidad con implementaciones remotas auto-alojadas, 276 herramientas en 57 servicios de Azure, y seguridad de nivel empresarial — aquí está lo que importa para desarrolladores .NET que construyen flujos de trabajo agentic.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este artículo fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si has estado construyendo algo con MCP y Azure últimamente, probablemente ya sepas que la experiencia local funciona bien. Conecta un servidor MCP, deja que tu agente de IA hable con recursos de Azure, y continúa. Pero en el momento en que necesitas compartir esa configuración entre un equipo? Ahí es donde las cosas se complicaban.&lt;/p&gt;
&lt;p&gt;Ya no más. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;acaba de alcanzar 2.0 estable&lt;/a&gt;, y la característica principal es exactamente lo que los equipos empresariales han estado pidiendo: &lt;strong&gt;soporte para servidor MCP remoto auto-alojado&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="qué-es-azure-mcp-server"&gt;¿Qué es Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Un repaso rápido. Azure MCP Server implementa la especificación del &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Protocolo de Contexto del Modelo&lt;/a&gt; y expone capacidades de Azure como herramientas estructuradas y detectables que los agentes de IA pueden invocar. Piénsalo como un puente estandarizado entre tu agente y Azure — provisioning, implementación, monitoreo, diagnósticos, todo a través de una interfaz consistente.&lt;/p&gt;
&lt;p&gt;Los números hablan por sí solos: &lt;strong&gt;276 herramientas MCP en 57 servicios de Azure&lt;/strong&gt;. Esa es una cobertura seria.&lt;/p&gt;
&lt;h2 id="lo-importante-implementaciones-remotas-auto-alojadas"&gt;Lo importante: implementaciones remotas auto-alojadas&lt;/h2&gt;
&lt;p&gt;Aquí está la cosa. Ejecutar MCP localmente en tu máquina está bien para desarrollo y experimentos. Pero en un escenario de equipo real, necesitas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Acceso compartido para desarrolladores y sistemas de agentes internos&lt;/li&gt;
&lt;li&gt;Configuración centralizada (contexto de tenant, valores predeterminados de suscripción, telemetría)&lt;/li&gt;
&lt;li&gt;Límites de red y políticas empresariales&lt;/li&gt;
&lt;li&gt;Integración en tuberías CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 aborda todo esto. Puedes desplegarlo como un servicio interno administrado centralmente con transporte basado en HTTP, autenticación adecuada y gobernanza consistente.&lt;/p&gt;
&lt;p&gt;Para autenticación, tienes dos opciones sólidas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Identidad Administrada&lt;/strong&gt; — cuando se ejecuta junto a &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;Flujo On-Behalf-Of (OBO)&lt;/strong&gt; — delegación de OpenID Connect que llama a APIs de Azure usando el contexto del usuario conectado&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ese flujo OBO es particularmente interesante para nosotros los desarrolladores .NET. Significa que tus flujos de trabajo agentic pueden operar con los permisos reales del usuario, no con alguna cuenta de servicio con excesivos privilegios. Principio de privilegio mínimo, integrado desde el principio.&lt;/p&gt;
&lt;h2 id="endurecimiento-de-seguridad"&gt;Endurecimiento de seguridad&lt;/h2&gt;
&lt;p&gt;Esto no es solo un lanzamiento de características — también es uno de seguridad. El lanzamiento 2.0 añade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validación de extremos más fuerte&lt;/li&gt;
&lt;li&gt;Protecciones contra patrones de inyección en herramientas orientadas a consultas&lt;/li&gt;
&lt;li&gt;Controles de aislamiento más estrictos para entornos de desarrollo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vas a exponer MCP como un servicio compartido, estas salvaguardas importan. Mucho.&lt;/p&gt;
&lt;h2 id="dónde-puedes-usarlo"&gt;¿Dónde puedes usarlo?&lt;/h2&gt;
&lt;p&gt;La historia de compatibilidad con clientes es amplia. Azure MCP Server 2.0 funciona con:&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;Agentes CLI&lt;/strong&gt;: GitHub Copilot CLI, Claude Code&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independiente&lt;/strong&gt;: servidor local para configuraciones simples&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remoto auto-alojado&lt;/strong&gt;: la nueva estrella de 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Además hay soporte de nube soberana para Azure US Government y Azure operado por 21Vianet, que es crítico para implementaciones reguladas.&lt;/p&gt;
&lt;h2 id="por-qué-esto-importa-para-desarrolladores-net"&gt;Por qué esto importa para desarrolladores .NET&lt;/h2&gt;
&lt;p&gt;Si estás construyendo aplicaciones agentic con .NET — ya sea Semantic Kernel, Microsoft Agent Framework, u orquestación propia — Azure MCP Server 2.0 te da una forma lista para producción de dejar que tus agentes interactúen con la infraestructura de Azure. Sin wrappers REST personalizados. Sin patrones de integración específicos del servicio. Solo MCP.&lt;/p&gt;
&lt;p&gt;Combinado con la &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;API fluida para MCP Apps&lt;/a&gt; que salió hace unos días, el ecosistema .NET MCP está madurando rápidamente.&lt;/p&gt;
&lt;h2 id="empezando"&gt;Empezando&lt;/h2&gt;
&lt;p&gt;Elige tu ruta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;Repositorio de GitHub&lt;/a&gt;&lt;/strong&gt; — código fuente, documentación, todo&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Imagen de Docker&lt;/a&gt;&lt;/strong&gt; — implementación contenedorizada&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;Extensión de VS Code&lt;/a&gt;&lt;/strong&gt; — integración con IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Guía de auto-alojamiento&lt;/a&gt;&lt;/strong&gt; — la característica insignia de 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="resumiendo"&gt;Resumiendo&lt;/h2&gt;
&lt;p&gt;Azure MCP Server 2.0 es exactamente el tipo de actualización de infraestructura que no se ve llamativa en una demostración pero lo cambia todo en la práctica. MCP remoto auto-alojado con autenticación adecuada, endurecimiento de seguridad y soporte de nube soberana significa que MCP está listo para equipos reales construyendo flujos de trabajo agentic reales en Azure. Si has estado esperando la señal de &amp;ldquo;listo para empresas&amp;rdquo; — esto es.&lt;/p&gt;</content:encoded></item><item><title>Las MCP Apps tienen una API fluida — Construye interfaces ricas para herramientas de IA en .NET en tres pasos</title><link>https://thedotnetblog.com/es/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/es/news/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>La nueva API de configuración fluida para MCP Apps en Azure Functions te permite convertir cualquier herramienta MCP de .NET en una app completa con vistas, permisos y políticas CSP en pocas líneas de código.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Las herramientas MCP son geniales para darle capacidades a los agentes de IA. Pero ¿qué pasa si tu herramienta necesita mostrarle algo al usuario — un dashboard, un formulario, una visualización interactiva? Ahí es donde entran las MCP Apps, y ahora son mucho más fáciles de construir.&lt;/p&gt;
&lt;p&gt;Lilian Kasem del equipo de 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;presentó la nueva API de configuración fluida&lt;/a&gt; para MCP Apps en Azure Functions con .NET, y es el tipo de mejora en experiencia de desarrollador que te hace preguntarte por qué no fue siempre así de simple.&lt;/p&gt;
&lt;h2 id="qué-son-las-mcp-apps"&gt;¿Qué son las MCP Apps?&lt;/h2&gt;
&lt;p&gt;Las MCP Apps extienden el Model Context Protocol permitiendo que las herramientas lleven sus propias vistas de UI, assets estáticos y controles de seguridad. En lugar de solo devolver texto, tu herramienta MCP puede renderizar experiencias HTML completas — dashboards interactivos, visualizaciones de datos, formularios de configuración — todo invocable por agentes de IA y presentado a los usuarios por clientes MCP.&lt;/p&gt;
&lt;p&gt;El problema era que conectar todo esto manualmente requería conocer la especificación MCP a fondo: URIs &lt;code&gt;ui://&lt;/code&gt;, tipos MIME especiales, coordinación de metadatos entre herramientas y recursos. No era difícil, pero sí tedioso.&lt;/p&gt;
&lt;h2 id="la-api-fluida-en-tres-pasos"&gt;La API fluida en tres pasos&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Paso 1: Define tu función.&lt;/strong&gt; Una herramienta MCP de Azure Functions estándar:&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;Paso 2: Promuévela a MCP App.&lt;/strong&gt; En el startup de tu programa:&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;Paso 3: Añade tu vista HTML.&lt;/strong&gt; Crea &lt;code&gt;assets/hello-app.html&lt;/code&gt; con la interfaz que necesites.&lt;/p&gt;
&lt;p&gt;Eso es todo. La API fluida se encarga de toda la plomería del protocolo MCP — genera la función de recurso sintético, establece el tipo MIME correcto e inyecta los metadatos que conectan tu herramienta con su vista.&lt;/p&gt;
&lt;h2 id="la-superficie-de-la-api-está-bien-diseñada"&gt;La superficie de la API está bien diseñada&lt;/h2&gt;
&lt;p&gt;Algunas cosas que me gustan mucho:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Las fuentes de las vistas son flexibles.&lt;/strong&gt; Puedes servir HTML desde archivos en disco, o embeber recursos directamente en tu ensamblado para despliegues autónomos:&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;El CSP es componible.&lt;/strong&gt; Explícitamente permites los orígenes que tu app necesita, siguiendo principios de mínimo privilegio. Llama a &lt;code&gt;WithCsp&lt;/code&gt; varias veces y los orígenes se acumulan:&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;Control de visibilidad.&lt;/strong&gt; Puedes hacer que una herramienta sea visible solo para el LLM, solo para la UI del host, o ambos. ¿Quieres una herramienta que solo renderice UI y no deba ser llamada por el modelo? Fácil:&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="primeros-pasos"&gt;Primeros pasos&lt;/h2&gt;
&lt;p&gt;Añade el paquete preview:&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;Si ya estás construyendo herramientas MCP con Azure Functions, esto es solo una actualización de paquete. El &lt;a href="https://learn.microsoft.com/azure/azure-functions/scenario-mcp-apps?tabs=bash%2Clinux&amp;amp;pivots=programming-language-csharp"&gt;quickstart de MCP Apps&lt;/a&gt; es el mejor lugar para empezar si eres nuevo en el concepto.&lt;/p&gt;
&lt;h2 id="para-cerrar"&gt;Para cerrar&lt;/h2&gt;
&lt;p&gt;Las MCP Apps son uno de los desarrollos más emocionantes en el espacio de herramientas de IA — herramientas que no solo &lt;em&gt;hacen cosas&lt;/em&gt; sino que pueden &lt;em&gt;mostrar cosas&lt;/em&gt; a los usuarios. La API fluida elimina la complejidad del protocolo y te permite enfocarte en lo que importa: la lógica de tu herramienta y su interfaz.&lt;/p&gt;
&lt;p&gt;Lee el &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;post completo&lt;/a&gt; para la referencia completa de la API y ejemplos.&lt;/p&gt;</content:encoded></item></channel></rss>